【发布时间】:2011-09-23 05:23:55
【问题描述】:
我正在为 iphone 和 ipad 编写一个应用程序,我的程序需要添加两个双精度值来获得一个双精度值。问题是当一个双精度值相当大(例如:2^100)而另一个像 1 或 2 一样非常小时,将这两个双精度值相加的结果是错误的,或者它甚至不进行加法.有谁知道这是为什么以及是否有解决方法。谢谢。
【问题讨论】:
我正在为 iphone 和 ipad 编写一个应用程序,我的程序需要添加两个双精度值来获得一个双精度值。问题是当一个双精度值相当大(例如:2^100)而另一个像 1 或 2 一样非常小时,将这两个双精度值相加的结果是错误的,或者它甚至不进行加法.有谁知道这是为什么以及是否有解决方法。谢谢。
【问题讨论】:
这与obj-c无关。 double 是存储浮点值的 64 位数据类型。在十进制中,双精度数可以容纳大约 15.955 位的精度。但是,您的 2^100 数字大约有 30 个十进制数字。因此,如果您尝试向其中添加大约 1 万亿的任何内容,您会发现添加不起作用,因为它超出了您的数字的精度范围。
为了解决这个问题,您可以使用NSDecimalNumber,它最多可以保存 38 位十进制数字的精度。
【讨论】:
【讨论】: