我想使用c语言计算100000、200000、300000的乘积,即6000000000000000。但是我需要用小数点后两个零的双精度值来回答。
我使用了以下代码:
long double result = 100000 * 200000 * 300000;
printf("%.2LF", result);
预期输出:6000000000000000.00
实际输出:-593035264.00
答案 0 :(得分:1)
(从Weather Vanes的评论中回答,将其变成一个Q / A对,如果愿意的话可以删除。)
表达式100000 * 200000 * 300000
执行整数计算并溢出,这解释了您观察到的看似无关的结果值。
改为尝试100000.0 * 200000.0 * 300000.0
或(double)100000 * 200000 * 300000
。
原因?
计算表达式时不考虑目标变量(及其类型),
也就是说,您需要在=
的右侧强制进行浮点计算。
请注意Davids的有用评论:
两倍的最大范围是1.79769e + 308-对于您的计算来说绰绰有余。