4

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

为了使思路和代码更清晰,我在执行实际计算之前应用了两次旋转(使用矩阵乘法)。我想可以完全不进行任何旋转来执行计算,但是代码和思维会更加尴尬。

我要问的是:由于舍入浮点错误,三个旋转是否会导致精度损失过多?有没有办法估计这个误差的大小?

谢谢阅读

4

2 回答 2

5

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

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

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

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

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

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

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

于 2012-08-14T07:15:52.680 回答
1

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

于 2012-08-13T22:51:48.967 回答