如何检查C++编译器是否使用IEEE 754浮点标准

Rus*_*rse 28 c++ compiler-construction floating-point ieee-754

我想问一个跟随这个问题的问题,如果编译器使用标准,那么定义检查可以很好地回答这个问题.然而,这只适用于C.有没有办法在C++中做同样的事情?

我不希望将浮点类型转换为文本或使用一些非常复杂的转换函数.我只需要编译器检查.如果您知道此类兼容编译器的列表,请发布链接.我找不到.

小智 29

实际上,你有一种更简单的方法来实现这一点.从C++标准来看,18.2.1.1该类numeric_limits存在于其中std.要访问所述静态成员,您只需执行以下操作:

std::numeric_limits<double>::is_iec559;
Run Code Online (Sandbox Code Playgroud)

要么:

std::numeric_limits<float>::is_iec559;
Run Code Online (Sandbox Code Playgroud)

true如果使用IEEE 754,则应该返回,否则返回false.

作为一种替代方法,Adam的答案的第二部分也应该为C++做.

  • 但实际上,这并不完全可靠.如果你愿意,可以把它称为不符合,但是编译器不一定*知道它们的浮点类型是否是IEEE754,因为它们产生的机器代码运行在架构的多个变体上,其中一些符合ulp的每个细节. - 精确和使用正确的舍入模式,而其他人则没有. (3认同)