在目标c中添加两个double值的问题

时间:2011-09-22 21:17:12

标签: iphone c ipad double

我正在为iphone和ipad编写应用程序,我的程序需要添加两个double值才能获得单个double值。问题是当其中一个double值相当大(例如:2 ^ 100)而另一个非常小,如1或2时,添加这两个double值的结果是错误的,或者甚至没有添加。有谁知道为什么会这样,如果有办法解决它。谢谢。

2 个答案:

答案 0 :(得分:6)

这与obj-c无关。 double是一种存储浮点值的64位数据类型。在十进制中,double可以容纳大约15.955位精度。但是,您的2 ^ 100号码有大约30个十进制数字。因此,如果您尝试向其添加大约1千万亿的任何内容,您会发现添加不起作用,因为它超出了您的数字的精确范围。

为了解决这个问题,你可以使用NSDecimalNumber,它最多可以包含38位十进制数。

答案 1 :(得分:1)

对于处理浮点数的人来说,这是一个很好的读物:

http://en.wikipedia.org/wiki/Floating_point

您描述的情况完全正常,并且是浮点在计算机上运行的自然结果。