Ответ 1
Он определен в протоколе 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 с числом, чтобы определить его значение-число. Однако вы можете проверить, что maybeNaN != maybeNaN
. Если это условие оценивается как истинное, вы имеете дело с 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 перечислении.