teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

誤字修正

2020/11/16 11:45

投稿

yoshiki_iwasa
yoshiki_iwasa

スコア23

title CHANGED
File without changes
body CHANGED
@@ -1,36 +1,36 @@
1
1
  #質問概要
2
2
 
3
- 浮動小数値(float)<->固定数値の変換を可能にするアルゴリズムがどうしてうまくいくのかがわかりません。後に示すやり方でなぜうまくいくのか、理由をご教授いただきたいです。
3
+ 浮動小数値(float)<->固定数値の変換を可能にするアルゴリズムがどうしてうまくいくのかがわかりません。後に示すやり方でなぜうまくいくのか、理由をご教授いただきたいです。
4
4
 
5
5
  #質問詳細
6
6
  このブロックの前段では、質問をわかりやすくするため状況の説明を実際のコードを用いて行っております。
7
7
  後段では、何がわからないのかを説明しています。
8
8
 
9
- 浮動小数値を固定数値に変換して保持する場合、一般的に以下のアルゴリズムが使われているようです。
9
+ 浮動小数値を固定数値に変換して保持する場合、一般的に以下のアルゴリズムが使われているようです。
10
10
  なお、わかりやすさのため、以下のルールに従って変換が行われるものとします
11
- **・**固定数値の小数部分は下位8bit とする。
11
+ **・**固定数値の小数部分は下位8bit とする。
12
- **・**固定数値は int型の変数(fix)に格納する。
12
+ **・**固定数値は int型の変数(fix)に格納する。
13
13
  **・**浮動小数値は float型の変数(floats) とする。
14
14
 
15
- **浮動小数→固定数変換アルゴリズム**
15
+ **浮動小数→固定数変換アルゴリズム**
16
16
  ```C++
17
17
  int float_to_fixed(float floats)
18
18
  {
19
19
  int ret;
20
20
 
21
- ret = (int)(roundf(floats * (1 << 8)));//所与の浮動小数値 ☓ 2^(固定数部のbit 数)
21
+ ret = (int)(roundf(floats * (1 << 8)));//所与の浮動小数値 ☓ 2^(固定数部のbit 数)
22
22
 
23
23
  return (ret);
24
24
  }
25
25
  ```
26
- **固定数→浮動小数変換アルゴリズム**
26
+ **固定数→浮動小数変換アルゴリズム**
27
27
  ```C++
28
28
 
29
29
  float fixed_to_float(int fixed)
30
30
  {
31
31
  float ret;
32
32
 
33
- ret = ((float)fixed / (float)(1 << 8));//固定少数値をfloatにキャストして、2^(固定小数値の小数部分のbit数)
33
+ ret = ((float)fixed / (float)(1 << 8));//固定少数値をfloatにキャストして、2^(固定小数値の小数部分のbit数)で割る
34
34
 
35
35
  return (ret);
36
36
  }
@@ -42,14 +42,14 @@
42
42
  2 : https://medium.com/incredible-coder/converting-fixed-point-to-floating-point-format-and-vice-versa-6cbc0e32544e
43
43
 
44
44
 
45
- 上に示した2つの関数について、どうしてこの方法で浮動小数が固定数に変換できるのかわかりません。
45
+ 上に示した2つの関数について、どうしてこの方法で浮動小数が固定数に変換できるのかわかりません。
46
46
 
47
47
  #####わからない理由を以下に示します。
48
48
  自分の理解では、floatと固定少数はbitを考えた時構造が全く違うと理解しています。  
49
- 浮動小数値は、符号部・指数部・仮数部に別れます。しかし、固定数値は、符号部・整数部・数部にbitが別れています。だから、いくらbitシフトさせようと浮動小数点は固定数に変換できないと思ってしまいます。そもそも各bit の役割がぜんぜん違うからです。
49
+ 浮動小数値は、符号部・指数部・仮数部に別れます。しかし、固定数値は、符号部・整数部・数部にbitが別れています。だから、いくらbitシフトさせようと浮動小数点は固定数に変換できないと思ってしまいます。そもそも各bit の役割がぜんぜん違うからです。
50
50
 
51
- int型などの整数値を固定数値に変換するのは理解できます。
51
+ int型などの整数値を固定数値に変換するのは理解できます。
52
- 整数値は、第1bitの右にバイナリポイント(数点)があると理解できるので、固定数に治す場合は小数部のbit分だけ、左bitシフトすればいいからです。
52
+ 整数値は、第1bitの右にバイナリポイント(数点)があると理解できるので、固定数に治す場合は小数部のbit分だけ、左bitシフトすればいいからです。
53
53
 
54
54
  質問の意図伝わりましたでしょうか?
55
55
  お力をお貸しください。

2

呉時

2020/11/16 11:45

投稿

yoshiki_iwasa
yoshiki_iwasa

スコア23

title CHANGED
File without changes
body CHANGED
@@ -49,7 +49,7 @@
49
49
  浮動小数値は、符号部・指数部・仮数部に別れます。しかし、固定少数値は、符号部・整数部・少数部にbitが別れています。だから、いくらbitシフトさせようと浮動小数点は固定少数に変換できないと思ってしまいます。そもそも各bit の役割がぜんぜん違うからです。
50
50
 
51
51
  int型などの整数値を固定少数値に変換するのは理解できます。
52
- 整数値は、第1bitのにバイナリポイント(少数点)があると理解できるので、固定少数に治す場合は小数部のbit分だけ、bitシフトすればいいからです。
52
+ 整数値は、第1bitのにバイナリポイント(少数点)があると理解できるので、固定少数に治す場合は小数部のbit分だけ、bitシフトすればいいからです。
53
53
 
54
54
  質問の意図伝わりましたでしょうか?
55
55
  お力をお貸しください。

1

質問詳細の説明追加

2020/11/16 09:23

投稿

yoshiki_iwasa
yoshiki_iwasa

スコア23

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,9 @@
3
3
  浮動小数値(float)<->固定少数値の変換を可能にするアルゴリズムがどうしてうまくいくのかがわかりません。後に示すやり方でなぜうまくいくのか、理由をご教授いただきたいです。
4
4
 
5
5
  #質問詳細
6
- このブロックの前段では、質問をわかりやすくするため状況の説明を
6
+ このブロックの前段では、質問をわかりやすくするため状況の説明を実際のコードを用いて行っております。
7
+ 後段では、何がわからないのかを説明しています。
8
+
7
9
  浮動小数値を固定少数値に変換して保持する場合、一般的に以下のアルゴリズムが使われているようです。
8
10
  なお、わかりやすさのため、以下のルールに従って変換が行われるものとします
9
11
  **・**固定性数値の小数部分は下位8bit とする。