だから私は同じことをするべき2つの機能を持っています
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 の float 定数です。
たとえば、0.28605145 と 5.9433694 をフィードすると、最初の結果は 0.62586737 になり、2 番目の結果は 0.62586755 になり、何が原因なのかわかりません。
結果がどうあるべきかを手動で計算すると、2番目の答えが正しいことがわかります。この関数は 2D 物理シミュレーションで使用しますが、最初の答え (間違った答え) がそこで機能し、2 番目の答え (正しい答え) があらゆる種類のクレイジーな動作をするというのは本当に奇妙なことです。未知の情報源からのこのような小さな違いと、これほど大きな効果:|
とにかく、この時点でマトリックスに切り替えますが、この奇妙な状況に興味を持ちました。何が起こっているのか知っている人はいますか?