C:添加指数

时间:2012-11-09 14:02:33

标签: c double floating-accuracy addition exponential

我认为GCC编制的标准C代码中的一个微不足道的补充让我有些困惑。

如果我有一个名为A的双重和一个叫做B的双重,而A =一个非常小的指数说1e-20而B是一个更大的值,例如1e-5 - 为什么我的双C等于总和A + B取主导价值B?我希望当我指定打印到25位小数时,我会得到1.00000000000000100000e-5。

相反,我得到的只是1.00000000000000000000e-5。我是否必须使用长双或其他?

非常困惑,对于大多数人来说这是一个容易回答的问题我敢肯定!感谢您提前获得任何指导。

2 个答案:

答案 0 :(得分:1)

是的,双尾数的精度不够。 2 ^ 53(双尾数的精度)仅略大于10 ^ 15(10 ^ 20和10 ^ 5之间的比率),因此二进制扩展和舍入最终可以轻松压缩小位。

http://en.wikipedia.org/wiki/Double-precision_floating-point_format

Google是您的朋友等。

答案 1 :(得分:-1)

浮点变量可以保存比固定点更大的值范围,但是它们对有效数字的精度有限制 您可以表示非常大或非常小的数字,但精度取决于有效数字的数量 如果你试图在用于表达它们的指数方面在数字之间进行操作,那么使用它们的能力取决于用相同的指数表示它们的能力。
在您尝试对两个数字求和的情况下,较小的数字在指数中与较大的数字匹配,从而得到0,因为其有效数字超出范围。 您可以在wiki

上了解更多信息