2014-06-22 11 views

Odpowiedz

101

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.

Powiązane problemy