回答編集履歴
2
d
test
CHANGED
@@ -14,4 +14,16 @@
|
|
14
14
|
|
15
15
|
浮動小数点同士の比較で `==` を使うのは、浮動小数点演算は丸め誤差が発生するので NG です。
|
16
16
|
|
17
|
+
2つの浮動小数点数 x, y が一致するかを比較するとき、それらが十分近いかどうかで判定します。例えば、差が閾値 `tol` 未満かどうかで判定します。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
```
|
22
|
+
|
23
|
+
std::abs(x - y) < tol
|
24
|
+
|
25
|
+
```
|
26
|
+
|
27
|
+
|
28
|
+
|
17
|
-
`
|
29
|
+
今回の場合、`std::abs(LengthSq() - 0) < tol`で、`LengthSq() >= 0` なので、絶対値は不要で、`LengthSq() < 0.0001f` のように十分小さい値かどうかで判定すればよいでしょう。
|
1
d
test
CHANGED
@@ -12,6 +12,6 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
浮動小数点同士
|
15
|
+
浮動小数点同士の比較で `==` を使うのは、浮動小数点演算は丸め誤差が発生するので NG です。
|
16
16
|
|
17
|
-
`r.LengthSq() == 0`
|
17
|
+
`r.LengthSq() == 0` を比較したい場合、 `std::abs(r.LengthSq()) < 0.0001f` のように比較したい r.LengthSq() と 0 の差が十分小さいかどうかでチェックします。
|