回答編集履歴

2

d

2020/06/16 04:20

投稿

tiitoi
tiitoi

スコア21956

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
- `r.LengthSq() == 0` を比較したい場合、 `std::abs(r.LengthSq()) < 0.0001f` のように比較したい r.LengthSq() 0 の差が十分小さいかどうかでチェックます
29
+ 今回の場合、`std::abs(LengthSq() - 0) < tol`で、`LengthSq() >= 0` で、絶対値は不要で、`LengthSq() < 0.0001f`ように十分小さいかどうかで判定すればよいでょう

1

d

2020/06/16 04:20

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -12,6 +12,6 @@
12
12
 
13
13
 
14
14
 
15
- 浮動小数点同士比較で `==` を使うのは丸め誤差がるので NG です。
15
+ 浮動小数点同士比較で `==` を使うのは、浮動小数点演算は丸め誤差が発生するので NG です。
16
16
 
17
- `r.LengthSq() == 0` `std::abs(r.LengthSq()) < 0.0001f` のように比較したい r.LengthSq() と 0 の差が十分小さいかどうかでチェックします。
17
+ `r.LengthSq() == 0` を比較したい場合、 `std::abs(r.LengthSq()) < 0.0001f` のように比較したい r.LengthSq() と 0 の差が十分小さいかどうかでチェックします。