我正在为iphone和ipad编写一个应用程序,我的程序需要将两个双精度值相加才能得到一个双精度值。问题是,当其中一个双精度值相当大(例如: 2^100)而另一个很小(如1或2 )时,将这两个双精度值相加的结果是错误的,或者它甚至不执行加法。有没有人知道为什么会这样,有没有办法绕过它。谢谢。
发布于 2011-09-23 05:22:46
这与obj-c无关。double是存储浮点值的64位数据类型。以十进制表示,一个双精度数可以容纳大约15.955位的精度。但是,您的2^100数字大约有30位十进制数字。因此,如果你尝试向它添加任何大约1千万亿的东西,你会发现加法不起作用,因为这超出了你的数字的精度范围。
为了解决这个问题,您可以使用NSDecimalNumber,它可以容纳多达38位小数位的精度。
发布于 2011-09-23 05:23:56
对于任何处理浮点数的人来说,这是一个很好的读物:
http://en.wikipedia.org/wiki/Floating_point
您所描述的情况是完全正常的,并且是浮点在计算机上工作的自然结果。
https://stackoverflow.com/questions/7521616
复制相似问题