- ベストアンサー
浮動小数点表示の情報落ちについて
- 浮動小数点表示における情報落ちについて説明します。
- 浮動小数点表示の仮数部が23ビットであることから情報落ちが生じます。
- 指数部の差が大きい方が情報落ちしやすく、仮数部の23ビットで表現するために指数部を18に揃えるのです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 はじめに、#2の回答で、「情報落ち」の話をしていなかったので、補足します。以下の該当部分を読み取って訂正してください。 こんなに大きな桁数をそのまま計算できない計算機だとすれば、たとえば4桁しかメモリ割り当てがないとすれば、、 1230*10^5+123= の計算をすることになりますね。この足し算でどことどこを足せばいいのでしょうか。1230+123=1353はだめなことは明らかですね。 1230*10^5+0.00123*10^5= として、指数をそろえれば、1230+0.00123=1230.00123と計算できて、 1230*10^5+=1230.00123*10^5 でいいでしょう。でも、4桁しかメモリ割り当てがないとすれば、123=0.00123*10^5の変換の時点で、0*10^5になって、「情報落ち」してしまいます。これは、1.230*10^8+0.00000123*10^8としても同じことで、0.00000123*10^8への変換の時点で、0.000*10^8になって、、「情報落ち」します。 これは、追加の質問にも関連しています。 指数をそろえないと、足し算できない。 追加の質問について、 指数を2^18にそろえるために、 (1.01)2×2^(-5)=x*2^18 としたxです。 x=(1.01)2*2(-23) 指数計算の法則は知っているのでしょうね。 a^m/a^n=a^(m-n) です。これを使っているだけなのですが。 指数を2^18にそろえるために、 (1.01)2×2^(-5)=x*2^18 とすると、xは、 x=(1.01)2*2^(-5)/2^18=(1.01)2*2^(-5-18)=(1.01)2*2^(-23)=(0.0000000000000000000000101)2 ですよ。 この質問/回答はこれで終わりです。さらに疑問があるなら、改めて質問してください。
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
「(1.01)2×2^-5の指数を-23に変えたから (1.01)2*2^-23=0.0000000000000000000000101なんですね。」 というのは, 完全に誤解しています.「指数を -5 から -23 に変えた」のではありません. 1.01×2^-5 という値を (指数を 18 にそろえるために) (なんとか)×2^18 という形 (そして「(なんとか)」のところは小数) で表現したいだけです. もう 1度 #3 を読み返してみてください. どこに「指数を-23に変えた」とありますか? もっといえば, 最初の質問の 「(1.01)2×2^-5」が「0.0000000000000000000000101」になる の時点で, 既に誤解しています. この式を素直に読めば (1.01)2×2^-5 が 0.0000000000000000000000101 ×2^18 になる としか読めないはずです. なぜ「×2^18」を無視したんですか?
お礼
ご回答ありがとうございます。 (1.01)2^-5が0.0000000000000000000000101になるのは、 (1.01)2^-5を(1.01)2^18に直したからなんですね。 すると、#2・#3・#5さんの言われている通り、 (1.01)2*2^(-5)/2^18=(1.01)2*2^(-23)になるからなんですね。 当方、全く勘違いしておりました。 ご丁寧に解説して頂き、ありがとうございました。 以上、ありがとうございました。
- okormazd
- ベストアンサー率50% (1224/2412)
#2です。 最後ちょっとミスがありました。 指数を10^18にそろえるために、 (1.01)2×2^-5=x*10^18 としたxです。 x=(1.01)2*10(-23) だから、 (0.0000000000000000000000101)2 になるのです。 ↓ 指数を2^18にそろえるために、 (1.01)2×2^(-5)=x*2^18 としたxです。 x=(1.01)2*2(-23) だから、 (0.0000000000000000000000101)2 になるのです。
お礼
ご回答ありがとうございます。 (1.01)2×2^-5の指数を-23に変えたから (1.01)2*2^-23=0.0000000000000000000000101なんですね。 そこで疑問に思ったのですが、 なぜ-5の指数が-23になるのですか。 なぜ(1.01)2×2^18は指数が23で 1.0100000000000000000000なんですか。 これも同じように指数は-23にならないのですか。 お手数ですが、ご教授お願い致します。
- okormazd
- ベストアンサー率50% (1224/2412)
ふつうに10進数で考えてみたらどうでしょう。 123000000+123=123000123 ですよね。これは、指数部が0、すなわち10^0にそろえ計算したものです。 これは9桁ですが、こんなに大きな桁数をそのまま計算できない計算機だとすれば、たとえば、 1230*10^5+123= の計算をすることになりますね。この足し算でどことどこを足せばいいのでしょうか。1230+123=1353はだめなことは明らかですね。 1230*10^5+0.00123*10^5= として、指数をそろえれば、1230+0.00123=1230.00123と計算できて、 1230*10^5+0.00123*10^5=1230.00123*10^5 でいいでしょう。指数をそろえないと、足し算できない、いいでしょうか。 「(1.01)2×2^-5」が 「0.0000000000000000000000101」 になんかなりません。 指数を10^18にそろえるために、 (1.01)2×2^-5=x*10^18 としたxです。 x=(1.01)2*10(-23) だから、 (0.0000000000000000000000101)2 になるのです。
お礼
ご回答ありがとうございます。 #3の方へ更なる疑問点を書きましたので、 面倒かと思われますが詳しく教えて下さい。 以上、ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
「計算をしやすく」というか, そもそも指数部をそろえないと計算できないよね. たとえば 13.7 + 4.25 という計算をするときに, 末尾の 7 と 5 をそろえて 1 3.7 4.2 5 ----- 5 6.2 のように計算しますか? 最後の「(1.01)2×2^-5」が「0.0000000000000000000000101」になるというのは, 単に指数部の値を変更した結果仮数部も (指数部の変化を相殺するように) 変えなきゃならないってだけです. ここは「指数部をそろえなければならない」というだけで分かるはずです. ちなみに指数部を 18 にそろえているのは, 単純に「大きい方にそろえている」だけであって特に意味はありません. 最終的には仮数部が一定の範囲に入るように調整し直すので, どこにそろえたとしても同じことです.
お礼
ご回答ありがとうございます。 指数部を合わせる意味が分かりました。 そして18にしてるのに特に意味は無いんですね。 以上、ありがとうございました。
お礼
ご回答ありがとうございます。 ご丁寧に説明して頂いたので解釈することが出来ました。 当方、指数計算の法則を知りませんでした。 x=(1.01)2*2^(-5)/2^18=(1.01)2*2^(-23)になるんですね。 指数計算について勉強したいと思います。 以上、ありがとうございました。