Подтвердить что ты не робот

Каков Swift эквивалент isnan()?

Что эквивалентно isnan() в Swift? Мне нужно проверить, действительны ли некоторые результаты операции и удалить те недопустимые, как x/0 Благодаря

4b9b3361

Ответ 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 перечислении.

Ответ 2

Принятый ответ работает, но когда я впервые увидел его, я не совсем понял из-за примера.

Вот пример от Apple для тех, кто не ясно:

enter image description here

let x = 0.0
let y = x * .infinity // y is a NaN

if y.isNan {

    print("this is NaN") // this will print
} else {

    print("this isn't Nan")
}