2014-06-22 4 views

risposta

101

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.