在IEEE754
标准中,使用四倍精度浮点格式,最小严格正(次正规)值为2 -16493 ≈10 -4965 。为什么海湾合作委员会拒绝任何低于10 -4949 的东西?我正在寻找对可能发生在下面的不同事物的解释,这些事情决定了限制为10 -4949 而不是10 -4965 。
#include <stdio.h>
void prt_ldbl(long double decker) {
unsigned char * desmond = (unsigned char *) & decker;
int i;
for (i = 0; i < sizeof (decker); i++) {
printf ("%02X ", desmond[i]);
}
printf ("\n");
}
int main()
{
long double x = 1e-4955L;
prt_ldbl(x);
}
我正在使用GNU GCC version 4.8.1 online - 不确定它正在运行哪个架构(我意识到可能是罪魁祸首)。请随意发布不同架构的发现。
答案 0 :(得分:2)
您的long double
类型可能不是(*)四倍精度。它可能只是387 80-bit extended-double format。这种格式对于指数的位数与四次精度相同,但有效位数的位数要少得多,因此可以在其中表示的最小值听起来是正确的(2 -16445 )
(*)您的long double
可能不是四精度,因为没有处理器在硬件中实现四精度。编译器总是可以在软件中实现四精度,但更有可能将long double
映射到双精度,扩展双精度或double-double。
答案 1 :(得分:1)
最小的80位long double
约为2 -16382 - 63 〜= 10 -4951 ,而不是2 -164934 。所以编译器是完全正确的;你的号码小于最小的次正常值。