Nic*_*vac 16 c++ math floating-point physics
我正在用C++编写一个物理模拟器,我担心的是健壮性.我已经读过,当计算两个几乎相等的数量的差值时,浮点运算会发生灾难性的消除.我想到,当计算两个几乎正交矢量的点积时,这可能发生在模拟器中.但是,我所看到的参考文献仅讨论通过重写相关方程来解决问题(例如,可以重写二次公式以消除问题) - 但这在计算点积时似乎不适用?我想我有兴趣知道这是否是物理引擎中的一个问题,以及它是如何解决的.
jan*_*neb 13
一个常见的技巧是使累加器变量成为一种精度高于向量本身的类型.
或者,可以在对术语求和时使用Kahan求和.
另一种方法是使用各种阻塞点积算法而不是规范算法.
当然可以结合上述两种方法.
请注意,以上是点产品的一般错误行为,而不是特别灾难性的取消.
Ton*_*nyK 5
你在评论中说你必须计算x1*x2 + y1*y2,其中所有变量都是浮点数.因此,如果以双精度进行计算,则完全没有精度,因为双精度的精度比浮点数高两倍(假设您的目标使用IEEE-754).
具体来说:让变量xx, yy代表的实数.让它们成为产品,让它成为双精度乘法的结果.然后在所有情况下,是由实数表示.floatx, yxxyyxyx * yxxyyxy
xx, yy
float
x, y
xxyy
xy
x * y
归档时间:
14 年,1 月 前
查看次数:
1661 次
最近记录: