小编Spa*_*ld1的帖子

使用“-ffast-math”在 GCC 上与 quiet_NaN 进行浮点比较总是产生真(!)

在某些情况下,使用 GCC + 编译时,将正常的浮点数与std::numeric_limits<float>::quiet_NaN()总是产生比较(在 Linux 和 MinGW 上测试)。在其他情况下,它总是会产生(这将是符合 IEEE 的行为)。"true""-ffast-math""false"

如果quiet_NaN在编译时已知其中一个值是 a ,则该行为符合 IEEE 标准,并且分支会被优化掉。

我知道这"-ffast-math"允许违反 IEEE 规则,并且它意味着"-ffinite-math-only"假设没有 NaN。但即使"-ffast-math"结果quiet_NaN()具有特定的位模式(例如 7FF80000),那么与普通浮点数的比较如何0.5f可能产生真值?

这是显示不同情况的代码示例。请用"g++ -O3 -ffast-math".

#include <iostream>
#include <limits>

int main() {
#if 1
    // make sure that the value of 'x' is not known at compile time
    bool isnan;
    std::cout << "use nan (0|1): ";
    std::cin >> isnan;
#else
    // otherwise GCC …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

4
推荐指数
1
解决办法
282
查看次数

标签 统计

c++ ×1

c++11 ×1