質問編集履歴

2

例をもとに戻し、コードは追記として別記しました

2022/05/17 14:36

投稿

Gurz1019_MP
Gurz1019_MP

スコア196

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

例をコードに変更

2022/05/17 13:09

投稿

Gurz1019_MP
Gurz1019_MP

スコア196

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
- 例:float : 29 → double : 29.0000009536743
10
+ Debug.Log(AMax * (double)ARatio) // 29.0000009536743
11
+ ```
4
12
 
5
13
  なんとなく、誤差が発生しそうだな、という気はしますが、これの原因を正確に説明できなくて困っています。
6
14
  より大きい値を扱える型へのキャストでは誤差は発生しないものと思っていたのですが…