<p><code>110 000 km</code>绝对误差是什么相对误差?在</p>
<blockquote>
<p>I got the 110 000 km value by subtracting my predicted Earth's x
coordinate with NASA's Earth x coordinate.</p>
</blockquote>
<p>我不知道你在计算什么或者你说的“美国宇航局的地球x坐标”是什么意思。这是从哪个原点,在什么坐标系,什么时间的距离?(据我所知,地球是绕太阳运行的,所以它的x坐标w.r.t.是以太阳为中心的坐标系一直在变化。)</p>
<p>在任何情况下,你计算出的绝对误差是11万公里,从“美国宇航局的地球x坐标”中减去你的计算值。你似乎认为这是个不好的回答。你的期望是什么?直接击中目标?在一米之内?一公里?你能接受什么?为什么?在</p>
<p>用误差差除以“美国宇航局的地球x坐标”得到相对误差。把它想象成一个百分比。你有什么价值?如果是1%或更少,恭喜你自己。那就太好了。在</p>
<p>你应该知道<a href="http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html" rel="nofollow">floating point numbers aren't exact on computers</a>。(你不能精确地用二进制来表示0.1,正如你不能精确地用十进制表示1/3一样。)会有错误。作为一个模拟器,你的工作就是理解错误并尽可能减少它们。在</p>
<p>你可能会有一个台阶大小的问题。试着把你的时间步长减少一半,看看你是否做得更好。如果你这样做了,它说明你的结果还没有收敛。再减少一半,直到达到可接受的误差。在</p>
<p>你的方程式可能条件不好。如果这是真的,小的初始误差会随着时间的推移而放大。在</p>
<p>我建议你把方程无量纲化,计算稳定极限步长。你对“足够小”步长的直觉可能会让你大吃一惊。在</p>
<p>我还读了更多关于<a href="http://en.wikipedia.org/wiki/N-body_problem" rel="nofollow">many body problem</a>的文章。很微妙。在</p>
<p>您也可以尝试使用数值积分库来代替积分方案。你将编程你的方程,并把它们交给一个工业强度积分器。它可以让你了解到底是你的实现还是物理造成了问题。在</p>
<p>我个人不喜欢你的实现。如果你考虑到数学向量的话,这会是一个更好的解决方案。相对位置的“如果”测试让我很冷淡。矢量力学可以让符号自然地显现出来。在</p>
<p>更新:</p>
<p>好吧,你的相对误差很小。在</p>
<p>当然,绝对误差是很重要的-取决于您的要求。如果你要在一个星球上着陆,你不想离开那么远。在</p>
<p>因此,您需要停止对什么构成了太小的步骤大小的假设,并做您必须做的,以推动错误到可接受的水平。在</p>
<p>计算中的所有数量是64位IEEE浮点数吗?否则,你永远也到不了那里。在</p>
<p>一个64位浮点数大约有<a href="http://en.wikipedia.org/wiki/Floating_point" rel="nofollow">16 digits of accuracy</a>。如果你需要更多,你必须使用一个无限精度的对象,比如Java的BigDecimal,或者——等等——重新缩放你的方程,使其使用千米以外的长度单位。如果你用对你的问题有意义的东西来衡量你所有的距离(例如,地球的直径或地球轨道长轴/短轴的长度),你可能会做得更好。在</p>