在iPhone OS上进行浮点计算的最精确数据类型是什么?

时间:2009-08-25 16:47:35

标签: iphone cocoa-touch uikit

我一直以为它是双倍的,直到我意外地命中了floo + ESC并且它告诉我有一个floorl(< #long double#>)函数。那么 long double 是解决所有重大不准确问题的方法吗? ; - )

或者甚至还有比这更精确的东西?

4 个答案:

答案 0 :(得分:3)

需要注意的一点是,long double只是在iPhone硬件上充当double。您不会从较大的类型获得任何额外的精度。它会在模拟器中为您提供更高的精度,因为您在那里运行Mac,这会让您感到困惑。

如前所述here(以及其他评论者),NSDecimal或NSDecimalNumber是获得精确度的方法(最多34位),使用它进行的计算是使用真十进制数学,而不是二进制浮点数完成的点。这可以避免您使用常规IEEE 754数学运算时看到的许多错误。

答案 1 :(得分:2)

我认为long double是极限,但这实际上取决于你想做什么。你真的遇到了不准确的问题吗?

答案 2 :(得分:1)

为了更加精确,请查看NSDecimalNumber类。正如另一条评论所说 - 你发现任何不准确的问题。此外,准确度会更慢。

答案 3 :(得分:1)

添加更多精度是解决问题的一种方法,但有时(通常是?)真正的问题在于执行计算的方式。在这种情况下,我禁止使用健康剂量的RTFM。 FP算术的任何入门书都将涵盖为什么某些形式的方程式是灾难性的,以及如何避免遗忘的差距。