![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.4ベストアンサー
- 回答日時:
IEEE754の単精度浮動小数点数では、符号1ビット、指数部8ビット、仮数部23bitの32bitで数値を表現しています。
(厳密に言えば、Cの言語仕様では、floatの内部表現がどうなっているかは規定されていませんが、今時大抵のコンピュータでは、このIEEE754に基づいた内部表現が使われていますので、32bitの内訳がこれ以外の環境を考える必要はまずないと思います)
さて、この仮数部23bitに対し、最上位に暗黙の1が追加された24bitを仮数として浮動小数点表記を行うわけですが、
ここで安直に「だから有効精度は24bit」にはならないことに注意してください。最上位は1で固定なのですがから、24bit分の表現能力は持っていないのです。
このとき、表現できる数値の最小差は、2進数表記で
1.0000_0000_0000_0000_0000_000b: 二進数で1の後に0が23個(仮数部表現23bitの値が0)
1.0000_0000_0000_0000_0000_001b: 二進数で1の後に0が22個で1(仮数部表現23bitの値が1)
になります。(桁数をわかりやすくするため、途中に_を入れました)
これは、10進数で表すと、
1と1.00000_01192_0929になります。つまり、
0.00000_01192_0929 がIEEE754単精度浮動小数点数の精度です。
これを、
・ほぼ0.00000_01 が表現可能だから、精度は7桁と見る
・厳密には0.00000_01は表現できず、違いがちゃんと表現可能なのは、0.00000_1 までなので、精度は6桁と見る
のどちらと取るかは考え方の違いになります。
これを言い換えれば、log_10(2^23)=6.92369を元に、
ほぼ表現可能な桁数を考えて、四捨五入した7桁を精度とするか、
厳密に表現可能な桁数を考えて、切り捨てた6桁を精度とするか、
という話になります。
No.3
- 回答日時:
いろいろなサイトを見たそうなので現在の標準的な浮動小数点フォーマットがIEEE754という形式だということは知っていると思います。
サイト例:Wikipedia
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95% …
IEEE754のフォーマットでは32ビットを
1ビット(符号)、8ビット(指数部2進数)、23ビット(仮数部2進数)
に割り当てます。
ここで仮数の部分が有効数字を決めるので単純に10進数での有効桁数の目安は
LOG10(仮数部の整数最大値)で計算します。
23ビットで考えると LOG10(2^23) = 6.92…となります。
これは6桁は十分表せるが7桁までは届かない、ということになります。
一方、このIEEE754という形式はがんばって精度を上げようということで仮数部に暗黙の1ビットというのをもっています。
指数部が全部0で無い場合、この暗黙の1ビットが最上位についたように取り扱うので24ビットに見えます。
すると LOG10(2^24)= 7.22…となり 7桁の有効桁になります。
こうみると厳密には6桁でしか表現できない部分もあるので安全をみて6桁という人もあれば、おおむね7桁表現しているんだから7桁とよんでもいい、という人も出てくるのでしょう。
仕事で演算を多用するときは、そんなあいまいな部分は使えないので6桁と考えて扱うか、大抵は倍精度(64ビット長)の形式を使うはずです。
その場合も仮数部は52ビットですので安全をみて LOG10(2^52) = 15.65…→ 15桁を有効桁と考えて処理します。
IEEE754ではない固有のフォーマットを使用している場合は
LOG10(2^仮数部ビット数)
で桁数の目安を計算してみてください。
No.2
- 回答日時:
浮動小数点数の内部構造は1つではなく、複数の形式が
有ります。
浮動小数点数
http://ja.wikipedia.org/wiki/浮動小数点数
浮動小数点数型と誤差
http://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html
>float 型の精度(有効桁数)は2進数にして 24 (=23+1)
> 桁であり,10進数では約 7 桁となる.
また、作成者(メーカー)やバージョンによっても異なる
場合があります。
C言語 浮動小数点の最大値 最小値
http://simd.jugem.jp/?eid=18
>ちなみに、浮動小数点の有効桁数ですが
>VC8では、float型が6桁、double型とlong double型が
>15桁となっています。
>
>C++Builderを見てみると、
>float型が6桁、double型が15桁、long double型が18桁
>となっていました。
従って有効桁数は、何を使用するかによって変わります。
No.1
- 回答日時:
includeファイル: float.h に仮数部のbit数: FLT_MANT_DIG が定義されています。
VC++2010β2では24でした。24bitで表現されているなら...わかりますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 高校 高校化学、気体、温度の有効数字 3 2023/04/02 11:39
- PDF C#でfloatを整数部、小数部とも桁数固定で文字表示したい 2 2022/07/28 09:37
- 化学 有効数字の問題にです 4 2022/08/02 22:33
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- 化学 有効数字の取り扱いについて 高校化学では、測定値同士の計算結果の有効数字は、測定値に合わせるようにな 4 2022/06/30 14:07
- 高校 この問題の(2)なぜ答えが有効数字1桁なんですか?自分は有効数字2桁で3.7×10^3にしました 2 2023/02/11 17:23
- 計算機科学 この問題なぜ答えが有効数字2桁なんでしょうか、問題の数字は有効数字3桁なのに… 5 2022/06/17 10:06
- 物理学 丸め 5 2022/08/04 12:25
- その他(教育・科学・学問) なぜ、0.50+0.50=1.0 になるのですか? 0.50も1.0も有効数字2桁ですので、計算結果 9 2022/11/17 18:12
- 高校 何故1番と3番では有効数字3桁で荒らされているのに、 4番は2桁なんですか? 2 2023/05/20 14:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c languageで 簡単な質問があ...
-
16進数 加算 減算 C言語
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
VB.net Double と...
-
有効数字について 以前質問をし...
-
z80について
-
EXCELの関数"STDEV(標準偏差)"...
-
VBAでミリ秒まで出力する方法
-
三菱シーケンサ(Aシリーズ)で...
-
乱数 なぜ剰余を使うのか
-
距離から緯度経度を求める方法
-
加算と減算で乗算と除算を表現...
-
初心者です。 C++ついて
-
最大50桁の実数の和・差・積を...
-
8・16進数の引き算を教えてくだ...
-
【VBA、VBS】何故False・・・?
-
2038年問題 日付算出
-
データ型 double の桁数について
-
チェックデジットについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
O(n log n)について2
-
16進数 加算 減算 C言語
-
c languageで 簡単な質問があ...
-
VB.net Double と...
-
”/”を使わずに割り算したいんで...
-
三菱シーケンサ(Aシリーズ)で...
-
ExcelのINT関数の計算結果がお...
-
有効数字について 以前質問をし...
-
ExcelでPC(パソコン)によって...
-
除算を使わずに10で割りたい。
-
EXCELの関数"STDEV(標準偏差)"...
-
floatの有効桁数
-
VBAでミリ秒まで出力する方法
-
100桁の計算ができなくて困って...
-
2進数の足し算(C言語)
-
VB6.0での小数点の扱いについて
-
VBAでの割り算の余りの求め方
-
コンピューターは指数関数をど...
-
距離から緯度経度を求める方法
-
BCD・HEX・BINについて
おすすめ情報