gpt4 book ai didi

c++ - double 误差

转载 作者:行者123 更新时间:2023-11-27 23:13:44 27 4
gpt4 key购买 nike

当使用 %Lf 打印时,一个大的 double 值被改变以下组合的值给出正确的结果小数点前9位/小数点后6位例如用 %Lf 打印的小数点前 9 位的值输入:3435537287.32输出:3435537287.320000

一旦我将小数点前的数字增加到 10,用 %Lf 打印的值就会添加垃圾值。例如用 %Lf 打印的小数点前 10 位的值输入:34355372871.3487输出:34355372871.348701正如您从上面的输出中看到的,输入值已更改。

是否有任何可用于 g++/xlc++ 的编译时选项,以便不更改值?

::代码片段::

double d2 =  34355372871.3487; 
double d4 = 3435537287.3487;

printf("d2 = %lf\n", d2);
printf("d4 = %lf\n", d4);

谢谢, hudson

最佳答案

简短说明:你需要长 double

long double d2 =  34355372871.3487L; 
long double d4 = 3435537287.3487L;

printf("d2 = %Lf\n", d2);
printf("d4 = %Lf\n", d4);

详细解释:您的有效数字占用了很多空间;-)以下是浮点值中使用的位。

//Type       Sign  Exponent Significand Total bit 
//Double 1 11 52 64
//Long Double 1 15 64 80

请记住,十进制中的每个数字大约需要 3.3 位 (log(10)/log(2))所以 52bits/3.3 ~ 15-16 位。

关于c++ - double 误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18102494/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com