优化我们正在开发的游戏,我们正在进入每个 CPU 周期获胜都很重要的阶段。我们使用弧度计算围绕其他对象旋转的对象的位置,我想减少查找表中不必要的精度。为此,我们大量使用了预定义的 Pi。这个 Pi 应该有多准确?
所以,我的问题是:
- 准确到什么程度才足够准确?
- 或者更好的是,如何确定所需的精度?
优化我们正在开发的游戏,我们正在进入每个 CPU 周期获胜都很重要的阶段。我们使用弧度计算围绕其他对象旋转的对象的位置,我想减少查找表中不必要的精度。为此,我们大量使用了预定义的 Pi。这个 Pi 应该有多准确?
所以,我的问题是:
您不妨让它与您可以存储的任何浮点表示一样准确。使用相同类型的更准确的浮点数执行计算不会花费更长的时间。
准确度通常以有效位数来衡量;您需要自己决定您感兴趣的准确度位数。如果您对 pi 使用不太准确的值,则该值的不准确性将传播到它所在的其他计算中。
作为比较:我认为 NASA 使用 pi 精度为小数点后 7 位,以便能够停靠在太空中。
首先,我们需要确定您的位置计算需要有多准确,即程序中取决于 pi 的公式必须有多准确。我们需要从那里开始,以了解实现此目标所需的 pi 准确度。
一旦确定了这一点,您可能可以或多或少地使用直接的数值分析来确定 pi 所需的精度。我可以帮助你,但我需要位置公式来做到这一点:)
编辑:我怀疑你的公式线性依赖于 pi,即你没有使用一些晦涩的函数 f(x,y,z,pi) ,其中 pi 是平方或类似的。在这种情况下,公式的准确性是 pi 准确性的一个因子,例如 k*eps(pi)。否则,它基本上是 f 对 pi 的导数的一个因数。不计算所有其他参数 f 的准确性取决于!
干杯!
这取决于您的计算中有多少有效数字。给定公式
C = pi * d
如果你想知道直径一英里的圆的圆周有多少英寸,你需要六位数的圆周率来保持你想要的精度,因为一英里有 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 数字,以确保您有足够的精度。
如果您要预先计算并存储它,您可以使用系统上的数学库尽可能准确地计算一次。一个不错的选择是:
double PI = (16.0 * atan(1/5)) - (4.0 * atan(1/239));
这将为您提供一个相当准确的 PI 值,您可以在启动时计算并根据需要重复使用。很难获得比易于重复使用的版本更准确的版本。
目前尚不清楚您在做什么。您是否正在根据角度查找坐标?在这种情况下,Pi 的准确性根本无关紧要。重要的是查找表的大小,您当然会以尽可能高的准确度预先计算它。除了您正在考虑将数据类型从单数更改为双数之外,进一步的准确性不会花费额外的执行时间。
如果您要预先计算该值,使其尽可能准确地存储,但要真正了解实际需要的准确度,您必须查看您的公式和其他组件的准确度,而不是确保您拥有的准确度pi 与其他组件匹配。数值分析会给你大量的线索。
圣经说 Pi 的值为 3(链接)。所以当然你应该使用它:)
圆周率的新公式
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