init(sign:exponent:significand:)
Creates a new value from the given sign, exponent, and significand.
Declaration
init(sign: FloatingPointSign, exponent: Int, significand: Float16)Parameters
- sign:
The sign to use for the new value.
- exponent:
The new value’s exponent.
- significand:
The new value’s significand.
Discussion
The following example uses this initializer to create a new Double instance. Double is a binary floating-point type that has a radix of 2.
let x = Double(sign: .plus, exponent: -2, significand: 1.5)
// x == 0.375This initializer is equivalent to the following calculation, where ** is exponentiation, computed as if by a single, correctly rounded, floating-point operation:
let sign: FloatingPointSign = .plus
let exponent = -2
let significand = 1.5
let y = (sign == .minus ? -1 : 1) * significand * Double.radix ** exponent
// y == 0.375As with any basic operation, if this value is outside the representable range of the type, overflow or underflow occurs, and zero, a subnormal value, or infinity may result. In addition, there are two other edge cases:
If the value you pass to
significandis zero or infinite, the result is zero or infinite, regardless of the value ofexponent.If the value you pass to
significandis NaN, the result is NaN.
For any floating-point value x of type F, the result of the following is equal to x, with the distinction that the result is canonicalized if x is in a noncanonical encoding:
let x0 = F(sign: x.sign, exponent: x.exponent, significand: x.significand)This initializer implements the scaleB operation defined by the IEEE 754 specification.