質問編集履歴
3
誤字修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
浮動小数値(float)<->固定
|
5
|
+
浮動小数値(float)<->固定小数値の変換を可能にするアルゴリズムがどうしてうまくいくのかがわかりません。後に示すやり方でなぜうまくいくのか、理由をご教授いただきたいです。
|
6
6
|
|
7
7
|
|
8
8
|
|
@@ -14,19 +14,19 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
浮動小数値を固定
|
17
|
+
浮動小数値を固定小数値に変換して保持する場合、一般的に以下のアルゴリズムが使われているようです。
|
18
18
|
|
19
19
|
なお、わかりやすさのため、以下のルールに従って変換が行われるものとします
|
20
20
|
|
21
|
-
**・**固定
|
21
|
+
**・**固定小数値の小数部分は下位8bit とする。
|
22
22
|
|
23
|
-
**・**固定
|
23
|
+
**・**固定小数値は int型の変数(fix)に格納する。
|
24
24
|
|
25
25
|
**・**浮動小数値は float型の変数(floats) とする。
|
26
26
|
|
27
27
|
|
28
28
|
|
29
|
-
**浮動小数→固定
|
29
|
+
**浮動小数→固定小数変換アルゴリズム**
|
30
30
|
|
31
31
|
```C++
|
32
32
|
|
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
-
ret = (int)(roundf(floats * (1 << 8)));//所与の浮動小数値 ☓ 2^(固定
|
41
|
+
ret = (int)(roundf(floats * (1 << 8)));//所与の浮動小数値 ☓ 2^(固定小数部のbit 数)
|
42
42
|
|
43
43
|
|
44
44
|
|
@@ -48,7 +48,7 @@
|
|
48
48
|
|
49
49
|
```
|
50
50
|
|
51
|
-
**固定
|
51
|
+
**固定小数→浮動小数変換アルゴリズム**
|
52
52
|
|
53
53
|
```C++
|
54
54
|
|
@@ -62,7 +62,7 @@
|
|
62
62
|
|
63
63
|
|
64
64
|
|
65
|
-
ret = ((float)fixed / (float)(1 << 8));//固定少数値をfloatにキャストして、2^(固定小数値の小数部分のbit数)
|
65
|
+
ret = ((float)fixed / (float)(1 << 8));//固定少数値をfloatにキャストして、2^(固定小数値の小数部分のbit数)で割る
|
66
66
|
|
67
67
|
|
68
68
|
|
@@ -86,7 +86,7 @@
|
|
86
86
|
|
87
87
|
|
88
88
|
|
89
|
-
上に示した2つの関数について、どうしてこの方法で浮動小数が固定
|
89
|
+
上に示した2つの関数について、どうしてこの方法で浮動小数が固定小数に変換できるのかわかりません。
|
90
90
|
|
91
91
|
|
92
92
|
|
@@ -94,13 +94,13 @@
|
|
94
94
|
|
95
95
|
自分の理解では、floatと固定少数はbitを考えた時構造が全く違うと理解しています。
|
96
96
|
|
97
|
-
浮動小数値は、符号部・指数部・仮数部に別れます。しかし、固定
|
97
|
+
浮動小数値は、符号部・指数部・仮数部に別れます。しかし、固定小数値は、符号部・整数部・小数部にbitが別れています。だから、いくらbitシフトさせようと浮動小数点は固定小数に変換できないと思ってしまいます。そもそも各bit の役割がぜんぜん違うからです。
|
98
98
|
|
99
99
|
|
100
100
|
|
101
|
-
int型などの整数値を固定
|
101
|
+
int型などの整数値を固定小数値に変換するのは理解できます。
|
102
102
|
|
103
|
-
整数値は、第1bitの右にバイナリポイント(
|
103
|
+
整数値は、第1bitの右にバイナリポイント(小数点)があると理解できるので、固定小数に治す場合は小数部のbit分だけ、左bitシフトすればいいからです。
|
104
104
|
|
105
105
|
|
106
106
|
|
2
呉時
test
CHANGED
File without changes
|
test
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
|
101
101
|
int型などの整数値を固定少数値に変換するのは理解できます。
|
102
102
|
|
103
|
-
整数値は、第1bitの
|
103
|
+
整数値は、第1bitの右にバイナリポイント(少数点)があると理解できるので、固定少数に治す場合は小数部のbit分だけ、左bitシフトすればいいからです。
|
104
104
|
|
105
105
|
|
106
106
|
|
1
質問詳細の説明追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,7 +8,11 @@
|
|
8
8
|
|
9
9
|
#質問詳細
|
10
10
|
|
11
|
-
このブロックの前段では、質問をわかりやすくするため状況の説明を
|
11
|
+
このブロックの前段では、質問をわかりやすくするため状況の説明を実際のコードを用いて行っております。
|
12
|
+
|
13
|
+
後段では、何がわからないのかを説明しています。
|
14
|
+
|
15
|
+
|
12
16
|
|
13
17
|
浮動小数値を固定少数値に変換して保持する場合、一般的に以下のアルゴリズムが使われているようです。
|
14
18
|
|