「教えて!ピックアップ」リリース!

ご教授願います。
単精度実数では1ビットの符号部、7ビットの指数部、24ビットの仮数部で表し、-3.40282×10^38~3.40282×10^38の範囲を表すとあります。この、-3.40282×10^38~3.40282×10^38はどのように計算すると求められるのでしょうか?
よろしくお願い致します。

A 回答 (9件)

最大値の数字から判断して、IEEE754の単精度実数だろうと思いますのでその線で説明します。



まず、浮動小数点数が 仮数部×指数部で表されるというのはいいですよね?
で、二進数でこれらの最大値を考えると、
1.111....1 (全部で24ビット分) が仮数部の最大値で、
指数部の最大値が 127 になるというのもいいですか?

そうすると全体として
1.111...11(二進数) × 2^127
が最大の大きさになります。これを十進数に変換すると大体質問にあるような数字になります。

正確な手順は忘れてしまいましたが、とりあえず指数部に関しては
2^126 が十進数では何桁になるかを概算すると
log10(2^127) → 127 × log10(2) → 127 × 0.301 → 38.22700
となりますのでまあ大体38桁前後(10^38) ですよ。ということです。

正確なところは数学カテゴリででも訊いてください(^^;

数値計算入門I~第2回~
http://zwo.phys.chs.nihon-u.ac.jp/Suchi12/1-2/1- …
    • good
    • 1
この回答へのお礼

ご返信、ありがとうございます。
詳しくご記載頂き、とても参考になりました。
ありがとうございました。

お礼日時:2008/04/02 23:37

大丈夫だろうけど「その形式だ」と勘違いされるとまずいな~と思ったんですが, 文章を読み切れず申し訳ありません>#8.


しかし, 本当のところどんな形式なんだろ?
    • good
    • 0

>ここで挙がっている形式とは異なります>#6.



ごもっとも。
それを踏まえた上でこういった感じで求められますよという例を出したまでですので
その辺ご賢察いただきたく :)
    • good
    • 1

IEEE754 単精度実数は符号 1ビット, 指数部 8ビット (オフセット 127), 仮数部 23ビット (指数部が 0 と 255 以外では整数部の 1 を除く) なので, ここで挙がっている形式とは異なります>#6.


もちろん「最大値」から IEEE754 単精度っぽいことは推測できるんですが, ビットの振り分け方が違う (特に仮数部が 24ビットということから「仮数部を 16進 6桁で表現し, 指数部は 16 のべき」という可能性すらある) ので「どういう表現なのか」と聞いてるわけです.
ところで, その「モノの本」のタイトルなどは挙げられないんでしょうか? まあ挙がったとしても確認できるかどうかはわかりませんが.
    • good
    • 0

「どんな値を意味するのか」はその「モノの本」に (数式付きで) 書いてあるような気がするんだけどなぁ. 書いてなかったとしても, 調べるために必要なものはそろってるはずだから検索すればわかるはずだよ.


浮動小数の表記法としては IEEE754 が標準だけど, これだと指数部は 8ビットなんだよなぁ. だから聞いたんだけど....
    • good
    • 0
この回答へのお礼

ご返信、ありがとうございます。
IEEE754とはビットの振分けが違うようです。
ネットで調べた限りでは2通りの表記方法があるようです。
範囲の結果の表記はあるのですが、計算過程を見つけるとはできませんでした。

お礼日時:2008/04/02 23:31

24ビットの仮数部を10進表記すれば 有効数値が求められます


7ビットの指数部で仮数部が表す値の範囲が求められます

が 表記法によって純2進表記や4ビット正規化表記等がありますから
定義を確認しない限り、正解にはなりません
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。
モノの本での記載が上記の通りでしたので…。知識不足で申し訳ありません。

お礼日時:2008/04/01 19:46

ビットパターンと「それが表している数値」の関係を教えてください.


それがないと, 答えようがありません.
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。
モノの本での記載が上記の通りでしたので…。知識で不足申し訳ありません。

お礼日時:2008/04/01 19:39

>System.Math.Pow(2,-(8-1))(こちらは絶対値の最大最小を求めるのには使わない)



間違い。
- System.Math.Pow(2,(8-1))
が多分正しい
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。
せっかくご解答を頂いたのですが、当方のプログラムに関する知識が乏しい為、内容を理解することができませんでした。
申し訳ありませんが、数式での解法を記載して頂けると助かります。

お礼日時:2008/04/01 19:33

/*


C# 多分計算としてはこんな感じ。
Wikipedia見ると,単精度浮動小数点数は

http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95% …
符号部1ビット・指数部8ビット・仮数部23ビット
って書いてあるんだけど?

仮数部はその仕様上,最大で2未満にしかならない(正確には2 - System.Math.Pow(2,-23))
面倒くさいので2でいいや。

指数部は正と負の数を考えなきゃいけないから
8ビットだと
最大で
System.Math.Pow(2,(8-1)) - 1
最小で
System.Math.Pow(2,-(8-1))(こちらは絶対値の最大最小を求めるのには使わない)

小さいほうが1大きいのは
http://www.algolab.co.jp/~lum/pcnyumon/nyu032.htm
あたりを参考のこと

符号部ももちろん、絶対値の最大最小を求めるのには使わない

よって

考えられる最大値は

= System.Math.Pow(2,System.Math.Pow(2,7) - 1) * 2

見づらいから10を底として対数とって見よう・・・(以下コード見ればわかるので省略)






*/



namespace Q3912041A
{
class Program
{
public static void Main(string[] args)
{double a = System.Math.Pow(2,System.Math.Pow(2,7) - 1) * 2;
//最大桁数
System.Console.WriteLine(System.Math.Floor(System.Math.Log(a,10))); // 38
System.Console.WriteLine(a / System.Math.Pow(10,38)); // 3.40282366920938
System.Console.ReadKey(true);
}
}
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング