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

hel*_*ker 4 language-agnostic math floating-accuracy rotational-matrices

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

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

我要问的是:由于四舍五入的浮点误差,这三个旋转是否对精度损失造成了太大的损失?有没有办法估计这个误差的大小?

谢谢阅读

Rod*_*uis 5

作为数值计算的经验法则——只认真对待前 12 位数字:)

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

如果您阅读本文(您应该在一天内从头到尾阅读),或thisthis,您会发现 IEEE 754 的各个算术运算保证精确到 ULP 的一半以内(=最后一位小数位)。

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

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

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

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