连续坐标旋转中的浮点误差



我有代码(Python)必须对曲线反射段之间的距离执行一些操作。

为了使思维和代码更清晰,我在执行实际计算之前应用了两次旋转(使用矩阵乘法)。我想可以在没有任何旋转的情况下执行计算,但代码和思维会更加尴尬。

我要问的是:由于舍入浮点误差,三次旋转在精度损失方面是否太大?有没有办法估计这个误差的大小?

感谢您的阅读

根据数值计算的经验法则 - 只认真对待前 12 位数字:)

现在,假设 3D 旋转,并且三角函数的结果是无限精确的,矩阵乘法将涉及旋转向量中每个元素的 3 次乘法和 2 次加法。由于您进行两次旋转,这相当于每个元素 6 次乘法和 4 次加法。

如果你读过这个(你应该有一天从

头到尾读),或者这个,或者这个,你会发现IEEE 754的各个算术运算保证精确到半个ULP(=最后一个小数位)。

应用于您的问题,这意味着结果向量中每个元素的 10 个操作将精确到 5 ULP 以内。

换句话说,假设你正在旋转一个单位向量。旋转向量的元素将精确到 0.000000000000005 - 我会说这没什么可担心的。

包括三角函数中的错误,嗯,这有点复杂......这实际上取决于您的编程语言和/或编译器版本等。但我保证它将与 5 个 ULP 相媲美。

如果您确实认为这种精度还不够,那么我建议您一次性执行两次旋转。分析计算矩阵乘法,并将旋转实现为单个矩阵乘法。或者:看看四元数(尽管我怀疑这对你的情况来说有点矫枉过正)。

您需要做的是计算操作的条件编号,并确定它是否会导致重要性损失。这应该允许您估计可能引入的错误。

最新更新