1

ベクトルを正規化すると、その長さは1になります。ただし、長さメソッドの結果は0.99999982です。

それが正しいか間違っているかはわかりません。しかし、それを印刷すると、結果は1になります。0.99999982ではありません(coutによって印刷されます)

しかし、std :: coutはそれが1であることをどのように知っていますか?[これが私の最初の質問です]

そして別の質問は、関数を比較した結果がなぜ偽であるかということです。

以下のような比較方法があります。また、lhsはベクトルの長さであり、rhsはちょうど1です。

return (fabsf(rhs-lhs) <= FLT_EPSILON) ? true : false;

このメソッドの結果はfalseです。

正規化されたベクトルの長さは、正規化されたと見なされるのはすでに間違っていますか?またはイプシロンが小さすぎますか?

私は何を間違えましたか?

4

2 に答える 2

4

イプシロンが小さすぎます。これは、イプシロンが可能な限り最小であるためです。(定義により)

したがって、より大きな許容誤差が必要になります。

于 2011-09-21T03:33:07.120 に答える
1

IEEE規格では、加算、減算、乗算、除算の結果を正確に丸めることが求められています。次に、結果を最も近い浮動小数点数に丸める必要があります。浮動小数点エラーは、ベクトルを正規化するために必要な多くの演算子に蓄積されます。他のポスターのように、FLT_EPSILONは小さすぎると言いました。

于 2011-09-21T04:29:01.653 に答える