Który odpowiednik isnan()
w Swift? muszę sprawdzić, czy niektóre wyniki pracy są ważne i usunąć te, nieważne jak x/0 DziękiKtóry z nich jest odpowiednikiem metody isnan()?
Odpowiedz
Jest zdefiniowane w protokole FloatingPointNumber, która zarówno Float i Double rodzaje zgodna. Sposób użycia jest następujący:
let d = 3.0
let isNan = d.isNaN // False
let d = Double.NaN
let isNan = d.isNaN // True
Jeśli szukasz sposobu na sprawdzenie tego samodzielnie, możesz. IEEE definiuje to NaN! = NaN, co oznacza, że nie można bezpośrednio porównać NaN z liczbą, aby określić jej numerację-a-liczby. Możesz jednak sprawdzić, czy jest to maybeNaN != maybeNaN
. Jeśli ten warunek zostanie oceniony jako prawdziwy, masz do czynienia z NaN.
Chociaż należy preferować używanie aVariable.isNaN
do określenia, czy wartość jest NaN.
jak kawałek marginesie, jeśli jesteś mniej pewny co do klasyfikacji wartości pracujesz z, można przełączyć na wartość floatingPointClass
własności swojej FloatingPointNumber
zgodnego TYP za.
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)
}
Jej wartości deklarowane są w FloatingPointClassification wyliczenia.
wynik dzielenia przez 0.0 to NIE .nan ale .inf – user3441734