【问题标题】:NaN as a special argumentNaN 作为特殊参数
【发布时间】:2010-10-21 17:32:11
【问题描述】:

我正在编写一个小库,您可以在其中设置范围;起点和终点是双打的。该库具有该范围的一些内置或计算的默认值,但是一旦通过范围设置功能设置它们,就无法返回到默认值。

因此我喜欢做的是使用 NaN 值作为指标来使用默认值,但是我没有找到任何 NaN 的标准定义,并且阅读 gcc 手册它说有些平台没有' t 支持 NaN。

我的问题是:

最近有没有不使用 IEEE 754 浮点数的平台?我不关心一些模糊的嵌入式设备,因为 lib 专注于具有 GUI 的平台,准确地说是 cairo。

第二个问题你会使用 NaN 值作为参数来达到这个目的吗?我在标题中的某个位置定义它没有问题。

【问题讨论】:

    标签: c


    【解决方案1】:

    我不会为此目的使用 NaN - 除了使用 which NaN 的问题(并且有很多)之外,最好添加一个函数调用 API 重置为默认值。

    【讨论】:

      【解决方案2】:

      NaN 不等于任何数字,甚至不等于它自己。因此,将其用作指标将导致复杂的代码甚至错误。我不会以这种方式使用它。

      【讨论】:

      • 伙计,我知道你对令人费解的错误的意思吗...我第一次遇到奇怪的 NaN 东西时,我花了几个小时才意识到 NaN != NaN...
      • ...这就是我麻烦的根源。
      【解决方案3】:

      NaN 在代码中处理起来有点奇怪,我当然不希望有一个库将它们用于它们不适合的目的。

      编辑:我刚刚想到的另一个问题是,如果计算结果为 NaN,并且将其作为参数传递,则会出现意外行为。例如:

      MyFunc(SomeCalculation()); //if SomeCalculation() is assumed to not be NaN,
                                 //this will cause unintended behavior
      

      【讨论】:

        猜你喜欢
        • 2019-09-21
        • 2018-03-29
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-05
        • 1970-01-01
        相关资源
        最近更新 更多