C 无符号长整型到长双精度
在C编程语言中,我很难得到长双变量的精确值 为了计算两个无符号long-long变量的精确平均值,我觉得我需要使用标准double上的long-double,因为标准double只处理52个有效位,而无符号long-long是64位 下面是我遇到的问题的一个示例:C 无符号长整型到长双精度,c,types,overflow,C,Types,Overflow,在C编程语言中,我很难得到长双变量的精确值 为了计算两个无符号long-long变量的精确平均值,我觉得我需要使用标准double上的long-double,因为标准double只处理52个有效位,而无符号long-long是64位 下面是我遇到的问题的一个示例: unsigned long long int x = 0x00000000FE5F06AC; unsigned long long int y = 0x000FFFFFFFFFFFFF; long double z = (x+y)/2
unsigned long long int x = 0x00000000FE5F06AC;
unsigned long long int y = 0x000FFFFFFFFFFFFF;
long double z = (x+y)/2.0;
printf("z = %lf", z);
这样的代码示例将始终为z打印0.0000,我真的不明白为什么会发生这种情况
是否有下溢发生,或者在格式化时出现了某种类型的错误?我看到了两个错误:
G
。希望这只是一个打字错误或抄写错误long double
的格式是%Lf
,而不是%Lf
这里有一个工作示例的链接:
长双z=(x+y)/2.0代码>-->长双z=x;z+=y;;z/=2代码>注释有53个有效二进制数字。它可以表示所有的uint53\u t
和int54\u t
(如果存在的话)。哇,太棒了!是的,G是一个打字错误,很好的捕捉。谢谢你在“l”和“l”中发现了我的错误,我从来不知道有什么不同