Qual è l'equivalente di isnan()
in Swift? Ho bisogno di verificare se alcuni risultati operativi sono validi e cancellare quelli non validi come x/0 GrazieQual è l'equivalente Swift di isnan()?
risposta
E 'definita nel protocollo FloatingPointNumber, che entrambi i tipi di Float e Double conformi a. L'utilizzo è il seguente:
let d = 3.0
let isNan = d.isNaN // False
let d = Double.NaN
let isNan = d.isNaN // True
Se si sta cercando un modo per effettuare questo controllo da soli, è possibile. IEEE definisce che NaN! = NaN, il che significa che non è possibile confrontare direttamente NaN con un numero per determinarne l'is-a-number-ness. Tuttavia, è possibile verificare che maybeNaN != maybeNaN
. Se questa condizione è vera, hai a che fare con NaN.
Anche se è necessario preferire utilizzando aVariable.isNaN
per determinare se un valore è NaN.
Come un po 'di una nota a margine, se si è meno sicuri circa la classificazione del valore di cui si sta lavorando, è possibile passare il valore della proprietà vostra FloatingPointNumber
di tipo conforme 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)
}
I suoi valori sono dichiarati nel FloatingPointClassification enum.
il risultato della divisione per 0.0 NON è .nan ma .inf – user3441734