所以我有两个功能应该做同样的事情
float ver1(float a0, float a1) {
float r0 = a0 - a1;
if (abs(r0) > PI) {
if (r0 > 0) {
r0 -= PI2;
} else {
r0 += PI2;
}
}
return r0;
}
float ver2(float a0, float a1) {
float a2 = a1 - PI2;
float r0 = a0 - a1;
float r1 = a0 - a2;
if (abs(r0) < abs(r1)) {
return r0;
}
if (abs(r0) > abs(r1)) {
return r1;
}
return 0;
}
注意:PI 和 PI2 是 pi 和 2*pi 的浮点常数
奇怪的是,有时它们会产生不同的结果,例如,如果你给它们输入 0.28605145 和 5.9433694,那么第一个结果是 0.62586737,第二个结果是 0.62586755,我不知道是什么原因造成的。
如果您手动计算结果应该是什么,您会发现第二个答案是正确的。我在二维物理模拟中使用的这个功能,真正奇怪的是第一个答案(错误的)在那里工作,而第二个答案(正确的)让它表现得非常疯狂。与未知来源的如此微小差异和如此深远的影响:|
在这一点上,无论如何我都会切换到矩阵,但这种奇怪的情况让我很好奇,有人知道发生了什么吗?