如何确定Pi(π)的准确性

时间:2009-05-20 15:59:05

标签: c optimization trigonometry floating-accuracy lookup-tables

优化我们正在开发的游戏,我们正在进入每个CPU周期都很重要的阶段。我们使用弧度来计算围绕其他对象旋转的对象的位置,我想在查找表中减少不必要的精度。为此,我们大量使用预定义的Pi。 这个Pi的准确度如何?

所以,我的问题是:

  • 准确度有多准确?
  • 甚至更好,如何确定所需的准确度?

8 个答案:

答案 0 :(得分:18)

您可以将其设置为与您可以存储的任何浮点表示一样准确。使用相同类型的更精确的浮点数执行计算不会花费更长的时间。

准确性通常以有效数字的数量来衡量;你需要自己决定你感兴趣的精确位数。如果你对pi使用一个不太准确的值,那么该值的不准确性将传播到它所在的其他计算中。

答案 1 :(得分:6)

作为一个比较:我认为NASA使用精度为7位小数的​​pi来进入太空。

首先,我们需要确定您的位置计算需要多精确,即程序中依赖于pi的公式的准确程度。我们需要从那里开始,以了解您需要达到的准确度。

一旦确定,您可以使用或多或少的直接数值分析来确定pi所需的准确度。我可以帮助你,但我需要位置公式来做到这一点:)

编辑:我怀疑你的公式是线性依赖于pi,即你没有使用一些模糊的函数f(x,y,z,pi),其中pi是平方或类似的。在这种情况下,公式的准确性是pi精度的一个因子,例如K * EPS(PI)。否则它基本上是f相对于pi的导数的倍数。不计算所有其他参数f的准确性取决于!

干杯!

答案 2 :(得分:3)

这取决于您在计算中有多少significant digits。给出公式

C = pi * d

如果您想知道直径为英里的圆周中有多少英寸,您需要六位数的pi才能保持您想要的精确度因为一英里有63,360英寸,所以周长为199,051英寸。由于答案中有六位有效数字,我需要六位pi来计算它所需的精确度。

3.14 * 63,360 = 198950.4

3.142 * 63,360 = 199077.12

3.1416 * 63,360 = 199051.776

3.14159 * 63,360 = 199051.1424

正如你所看到的,在这种情况下,我得到了正确的答案只有5位pi,但情况并非总是如此。您需要至少与有效位数一样多的pi数字确保您有足够的精确度。

答案 3 :(得分:1)

如果您预先计算并存储它,您可以使用系统上的数学库尽可能准确地计算它。一个很好的选择是:

double PI = (16.0 * atan(1/5)) - (4.0 * atan(1/239));

这将为您提供相当准确的PI值,您可以在启动时计算并根据需要重复使用。获得比易于重复使用的版本更难的版本。

答案 4 :(得分:0)

目前还不完全清楚你在做什么。你是根据角度查找坐标吗?在这种情况下,Pi的准确性根本不重要。重要的是查找表的大小,您当然会以尽可能高的精度预先计算它。除了考虑将数据类型从单一更改为双重外,进一步的准确性不会花费额外的执行时间。

答案 5 :(得分:0)

如果您正在预先计算该值,请尽可能准确地存储,但要真实地了解实际需要的准确度,您必须查看公式和其他组件的准确性,并确保准确性你有pi匹配其他组件。数值分析将为您提供线索。

答案 6 :(得分:-1)

圣经说Pi的价值是3(link)。所以你当然应该使用它 :)

答案 7 :(得分:-1)

pi的新公式

Pi=2.m.sin(90/m)

Pi=3.m.sin(60/m)

Pi=4.m.sin(45/m)

Pi=5.m.sin(36/m)

对于价值数百万的PI免费计算器XP,XM,......推荐m = 1.0E + 10000000计算器的成功,你需要安装netframework2.0

http://harry-j-smith-memorial.com/index.html