Swift 负平方根

Swift Negative Square Root

看起来这在其他语言中也是如此 (see thread on C++),但是有谁知道为什么你不能检查负平方根的结果与 Double.NaNDouble.quietNaN Swift 的 Double 结构中的属性?

这是我 运行 在 Playground 中的一些代码:

sqrt(-5.0)       // (not a number)
Double.NaN       // (not a number)
Double.quietNaN  // (not a number)

Double.NaN == sqrt(-5.0)       // false
Double.quietNaN == sqrt(-5.0)  // false

Swift playground 似乎在打印 sqrt(-5.0)Double.NaNDouble.quietNaN 时使用相同的错误字符串,但它们具有不同的编程表示形式。我不明白为什么会这样。有什么想法吗?

你可以通过检查一个数字是否等价于它本身来检查一个数字是否为 NaN:

if aNumber != aNumber {
  println("This is NaN")
}

NaN 总是不等于它自己。

或者您可以使用双数的 isNaN 属性:

let number: Double = 5.0
let nanNumber: Double = Double.NaN

number.isNaN  // false
nanNumber.isNaN  // true

Float 数字也有一个 isNaN 属性.