具有覆盖整个 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.nan
或 Float.signalingNaN
,因此从技术上讲,应用程序在该点正常崩溃是可能的。
考虑在崩溃之前添加一些日志记录,以检查导致崩溃的值。
除了八个指数位全为 1 的值之外,您已经涵盖了所有情况。 None 其中“介于略高于 0 和大约 15”之间,因此您的假设目前不正确。
https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Exponent_encoding
我希望下面的代码能够涵盖整个 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.nan
或 Float.signalingNaN
,因此从技术上讲,应用程序在该点正常崩溃是可能的。
考虑在崩溃之前添加一些日志记录,以检查导致崩溃的值。
除了八个指数位全为 1 的值之外,您已经涵盖了所有情况。 None 其中“介于略高于 0 和大约 15”之间,因此您的假设目前不正确。
https://en.wikipedia.org/wiki/Single-precision_floating-point_format#Exponent_encoding