具有覆盖整个 Float 范围的封闭范围的 Switch 语句

Switch statement with closed-ranges covering full Float range

我希望下面的代码能够涵盖整个 Float 范围,我只使用了刚好在 0 以上的一小部分。

然而,我的应用有时会在现场崩溃,因为它点击了 default: fatalError()

这里可能有什么问题?

var value: Float // Between a little above 0 and about 15.

...

switch value
{
case ...3: return 0
case 3...10: return 1
case 10...: return 2
default: fatalError()
}

此开关将一直通过默认设置,例如,如果值为 Float.nanFloat.signalingNaN,因此从技术上讲,应用程序在该点正常崩溃是可能的。

考虑在崩溃之前添加一些日志记录,以检查导致崩溃的值。

除了八个指数位全为 1 的值之外,您已经涵盖了所有情况。 None 其中“介于略高于 0 和大约 15”之间,因此您的假设目前不正确。

https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Exponent_encoding