我想写一个函数来检查 float
, double
或 long double
完全符合 IEEE-754 格式。我的意思是:
- float = IEEE-754 binary32
- 双 = IEEE-754 binary64
- long double = IEEE-754 binary128
我认为 std::numeric_limits<T>::is_iec559
对应于那个,但它返回 true
对于 long double
在我的 64 位 Linux 上 sizeof(long double) = 16 bytes
但内部编码为 80-bit
英特尔格式。那么该怎么做呢?
最佳答案
如果std::numeric_limits<T>::is_iec559
那么T
为真符合标准。
如果系统为其内部寄存器使用 80 位,只要最终四舍五入的结果最接近使用无限位数的引用结果,这是可以的。也就是说,添加或删除一个 ulp 将使您远离引用。
很难通过对所有可表示的数字运行所有可能的操作并与使用许多位的引用进行比较来检查这一点。
您需要对 std::numeric_limits
有信心以及实现它的图书馆。
关于c++ - 返回浮点类型是否完全符合 IEEE-754 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17385843/