【问题标题】:Can an integer be NaN in C++?C ++中的整数可以是NaN吗?
【发布时间】:2011-04-26 08:30:39
【问题描述】:

我可以将int 设置为NaN 吗?如果是,那么如何检查int 是否为NaN

【问题讨论】:

    标签: c++ nan


    【解决方案1】:

    我认为处理故障最合适的 API 是在您的 api 中返回第二个整数错误代码,例如:

    int myfunc(args, int* realReturn);
    

    返回的 int 是错误代码。

    前面的输出在调用代码中作为指针传递:

    int myInt;
    if (myFunc(args, &myInt) != 0) {
    //handle error
    }
    

    【讨论】:

      【解决方案2】:

      Nan 没有任何特定的 int 值。人们通常做的是使用一些大整数来表示这个值。如果它是无符号整数,那么它通常使用-1。

      【讨论】:

        【解决方案3】:

        不,NaN 是浮点值。

        int 的每个可能值都是一个数字。

        编辑

        标准说:

        6.2.6.2 40) 一些填充位组合可能会产生陷阱 表示,例如,如果一个 填充位是奇偶校验位。 无论如何,没有算术运算 有效值可以生成陷阱 代表 不是作为的一部分 特殊情况,例如 溢出,这不会发生 无符号类型。

        因此可能存在一些特定于实现的无效整数值,但没有定义生成它们的方法。

        【讨论】:

        • "int 的每个可能值都是一个数字。"那是标准的一部分,还是只是在实践中总是正确的东西?例如,在 C99 标准中,整数类型可以有陷阱表示。只有unsigned char 保证没有。
        • @Pascal 陷阱表示不被视为值。 “某些对象表示不需要表示对象类型的值。[...] 这种表示称为陷阱表示。”
        • @Johannes:我确信 DerKuchen 指的是位模式,而不是对象类型的值。
        • numeric_limits<int>::quiet_NaN(),当然 ;v) 。 — 严肃地说,NaN 不是浮点值,它没有任何值,FP 或其他值。恰好添加到 FP 格式比添加到定点格式更便宜。
        • @Potatoswatter 根据link quiet_NaN() 将返回0 for int
        【解决方案4】:

        Generally (and specifically in the case of C++, to the best of my knowledge): no.

        整数 NaN

        大多数固定大小的整数格式没有任何方式明确指示无效数据。

        【讨论】:

        • 嗯,有时它实际上必须。例如,ISO C 的ilogb 使用FP_ILOGB0INT_MAXFP_ILOGBNAN 对来自数学上无效输入的无效结果(int 类型)进行编码。这些是无效的,因为该函数也可能在相同条件下引发FE_INVALID 浮点异常。
        【解决方案5】:

        不,您不能将 int 设置为 NaN。

        【讨论】:

          猜你喜欢
          • 2011-06-19
          • 1970-01-01
          • 2022-12-20
          • 1970-01-01
          • 1970-01-01
          • 2019-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多