Double(Float.signalingNaN).isSignalingNaN is false.
Is this a bug?
extension Float {
var bits: String { String(self.bitPattern, radix: 2) + String(repeating: " ", count: 32) }
}
extension Double {
var bits: String { String(self.bitPattern, radix: 2) }
}
print("""
Value | Bit pattern | isNaN | isSignalingNaN
---------------------------|-----------------------------------------------------------------|-------|----------------
Double.nan | \(Double.nan.bits ) | \(Double.nan .isNaN) | \(Double.nan .isSignalingNaN) ✅
Double.signalingNaN | \(Double.signalingNaN.bits ) | \(Double.signalingNaN .isNaN) | \(Double.signalingNaN .isSignalingNaN) ✅
Float.nan | \( Float.nan.bits ) | \( Float.nan .isNaN) | \(Float.nan .isSignalingNaN) ✅
Float.signalingNaN | \( Float.signalingNaN.bits ) | \( Float.signalingNaN .isNaN) | \(Float.signalingNaN .isSignalingNaN) ✅
Double(Float.nan) | \(Double(Float.nan).bits ) | \(Double(Float.nan) .isNaN) | \(Double(Float.nan) .isSignalingNaN) ✅
Double(Float.signalingNaN) | \(Double(Float.signalingNaN).bits) | \(Double(Float.signalingNaN).isNaN) | \(Double(Float.signalingNaN).isSignalingNaN) ❓
^ Why is this bit set?
""")
| Value | Bit pattern | isNaN | isSignalingNaN |
|---|---|---|---|
| Double.nan | 111111111111000000000000000000000000000000000000000000000000000 |
true | false |
| Double.signalingNaN | 111111111110100000000000000000000000000000000000000000000000000 |
true | true |
| Float.nan | 1111111110000000000000000000000 |
true | false |
| Float.signalingNaN | 1111111101000000000000000000000 |
true | true |
| Double(Float.nan) | 111111111111000000000000000000000000000000000000000000000000000 |
true | false |
| Double(Float.signalingNaN) | 111111111111100000000000000000000000000000000000000000000000000 |
true | false |
-----------^ Why is this bit set? |