これはisnan()
in Swift?に相当するものですか?
FloatingPointNumber プロトコルで定義されており、 Float と Double の両方のタイプが準拠しています。使用法は次のとおりです。
let d = 3.0
let isNan = d.isNaN // False
let d = Double.NaN
let isNan = d.isNaN // True
このチェックを自分で行う方法を探しているなら、できます。 IEEEでは、NaN!= NaNと定義しています。つまり、NaNを数値と直接比較して、そのis-a-number-nessを決定することはできません。ただし、maybeNaN != maybeNaN
。この条件がtrueと評価される場合、NaNを扱っています。
ただし、aVariable.isNaN
は、値がNaNかどうかを判別します。
ちょっとした注意点として、使用している値の分類について確信が持てない場合は、FloatingPointNumber
準拠型のfloatingPointClass
プロパティの値を切り替えることができます。
let noClueWhatThisIs: Double = // ...
switch noClueWhatThisIs.floatingPointClass {
case .SignalingNaN:
print(FloatingPointClassification.SignalingNaN)
case .QuietNaN:
print(FloatingPointClassification.QuietNaN)
case .NegativeInfinity:
print(FloatingPointClassification.NegativeInfinity)
case .NegativeNormal:
print(FloatingPointClassification.NegativeNormal)
case .NegativeSubnormal:
print(FloatingPointClassification.NegativeSubnormal)
case .NegativeZero:
print(FloatingPointClassification.NegativeZero)
case .PositiveZero:
print(FloatingPointClassification.PositiveZero)
case .PositiveSubnormal:
print(FloatingPointClassification.PositiveSubnormal)
case .PositiveNormal:
print(FloatingPointClassification.PositiveNormal)
case .PositiveInfinity:
print(FloatingPointClassification.PositiveInfinity)
}
その値は FloatingPointClassification enumで宣言されています。