【问题标题】:Switch statement with closed-ranges covering full Float range具有覆盖整个浮点范围的封闭范围的 Switch 语句
【发布时间】:2021-11-18 03:06:42
【问题描述】:

我希望下面的代码能够覆盖整个 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()
}

【问题讨论】:

  • 我猜它只匹配整数。用整数试试。
  • 打印你的浮动值。它可能是 nan 或无穷大。
  • 无穷大被最后一个范围覆盖。 NaN 不能被范围覆盖。 ??????????

标签: ios swift switch-statement range


【解决方案1】:

如果值为Float.nanFloat.signalingNaN,则此开关将一直下降到默认值,因此从技术上讲,应用程序在此时合法地崩溃是可能的。

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

【讨论】:

  • 这就是原因。我通过guard 向上测试value.isNaN 避免了这个问题。谢谢。
【解决方案2】:

您已经涵盖了所有情况,除了八个指数位全为 1 的值。这些都不是“在略高于 0 到大约 15 之间”,所以你的假设目前是不正确的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多