回答編集履歴
2
typo
answer
CHANGED
@@ -21,11 +21,13 @@
|
|
21
21
|
> [Why does frexp() not yield scientific notation?](https://stackoverflow.com/questions/24928833/why-does-frexp-not-yield-scientific-notation)
|
22
22
|
frexp()が戻り値を[1, 2)の範囲ではなく、[0.5, 1)の範囲に収めるようにしている理由は、IEEE 754およびISO/IEC 60559が策定される前に作られた関数であることが理由と考えられる
|
23
23
|
|
24
|
+
次の質問ですが、
|
25
|
+
|
24
26
|
> ガード桁:5
|
25
27
|
丸め桁:6
|
26
28
|
スティッキー・ビット:8
|
27
29
|
|
28
|
-
[Guard Bit, Round Bit, Sticky Bit](http://exlight.net/devel/fp/grs/index.html)の意味なら、全く
|
30
|
+
[Guard Bit, Round Bit, Sticky Bit](http://exlight.net/devel/fp/grs/index.html)の意味なら、全く違うようです。
|
29
31
|
|
30
32
|
> 仮数部の下に,ガード ビット(Guard bit),ラウンド ビット(Round Bit),スティッキービット(Sticky Bit)の3つのビットが用意されている.これら3つのビットの値はFPUが演算中に自動でセットするもので,ユーザーが値をとりだして演算に利用することはできない(できなくなっているのが普通).
|
31
33
|
|
1
微修正
answer
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
そして、正規化しない場合、同じ値浮動小数点値に対して、仮数部と指数部の組み合わせが複数発生し、取り扱いが非常に面倒です。IEEE754やfrexp関数は正規化しています。
|
13
13
|
|
14
14
|
IEEE754は0でない場合、最上位ビットを小数点の左隣に定めました。
|
15
|
-
frexp関数は、[0でない場合、最上位を小数点の右隣](https://cpprefjp.github.io/reference/cmath/frexp.html)に定めました。[1/2, 1)は、0.5以上1未満です。これは小数点の右隣がちょうど1になるな範囲です。
|
15
|
+
frexp関数は、[0でない場合、最上位ビットを小数点の右隣](https://cpprefjp.github.io/reference/cmath/frexp.html)に定めました。[1/2, 1)は、0.5以上1未満です。これは小数点の右隣がちょうど1になるな範囲です。
|
16
16
|
つまり、正規化方法が異なるだけです。
|
17
17
|
|
18
18
|
もしも、frexp関数の非0の時の仮数部を[1, 2)と定めていればIEEE754の正規化と一致しますが、恐らくfrep関数の仕様の方が先に決っているはずです。
|