質問編集履歴
2
例をもとに戻し、コードは追記として別記しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
C# 7.3において、float型の変数をdouble型にキャストした際、非常に小さな値の誤差が発生しています。
|
2
2
|
|
3
|
+
例:float : 29 → double : 29.0000009536743
|
4
|
+
|
5
|
+
なんとなく、誤差が発生しそうだな、という気はしますが、これの原因を正確に説明できなくて困っています。
|
6
|
+
より大きい値を扱える型へのキャストでは誤差は発生しないものと思っていたのですが…
|
7
|
+
|
8
|
+
よろしくお願いいたします。
|
9
|
+
|
10
|
+
**追記**
|
3
11
|
全く同じコードは掲載できないのでイメージでしかありませんが、以下のようなコードをUnity 2019.4.15fで実行した際に発生したものです。
|
4
12
|
```C#
|
5
13
|
int A = 29;
|
@@ -9,8 +17,3 @@
|
|
9
17
|
Debug.Log(AMax * ARatio) // 29
|
10
18
|
Debug.Log(AMax * (double)ARatio) // 29.0000009536743
|
11
19
|
```
|
12
|
-
|
13
|
-
なんとなく、誤差が発生しそうだな、という気はしますが、これの原因を正確に説明できなくて困っています。
|
14
|
-
より大きい値を扱える型へのキャストでは誤差は発生しないものと思っていたのですが…
|
15
|
-
|
16
|
-
よろしくお願いいたします。
|
1
例をコードに変更
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
C# 7.3において、float型の変数をdouble型にキャストした際、非常に小さな値の誤差が発生しています。
|
2
2
|
|
3
|
+
全く同じコードは掲載できないのでイメージでしかありませんが、以下のようなコードをUnity 2019.4.15fで実行した際に発生したものです。
|
4
|
+
```C#
|
5
|
+
int A = 29;
|
6
|
+
int AMax = 45;
|
7
|
+
float ARatio = A / (float)AMax;
|
8
|
+
|
9
|
+
Debug.Log(AMax * ARatio) // 29
|
3
|
-
|
10
|
+
Debug.Log(AMax * (double)ARatio) // 29.0000009536743
|
11
|
+
```
|
4
12
|
|
5
13
|
なんとなく、誤差が発生しそうだな、という気はしますが、これの原因を正確に説明できなくて困っています。
|
6
14
|
より大きい値を扱える型へのキャストでは誤差は発生しないものと思っていたのですが…
|