【发布时间】:2013-06-27 11:23:27
【问题描述】:
我想编写一个函数来检查 float、double 或 long double 是否完全符合 IEEE-754 格式。我的意思是:
我认为 std::numeric_limits<T>::is_iec559 与此相对应,但它在我的 64 位 Linux 上为 long double 返回 true,其中 sizeof(long double) = 16 bytes 但内部编码为 80-bit Intel 格式。那么该怎么做呢?
【问题讨论】:
-
80 位 Intel 格式是符合 IEEE-754 的格式(具体来说,它满足第 3.7 节中定义的“binary64 扩展”格式的要求)。我认为您需要一个谓词来指定格式是否为 IEEE-754“基本格式”(或可能是“交换格式”);这比
is_iec559声称的要求要具体得多。 -
由于内存对齐要求,我经常看到
sizeof(long double)在 x86_32 上为 12 个字节,在 x86_64 GNU G++ 上为 16 个字节。
标签: c++ floating-point ieee-754 standards-compliance extended-precision