- ベストアンサー
データ型 double の桁数について
picマイコンをPICC liteと言うCコンパイラで作成しているのですが、そのPICC liteでは、データ型のdoubleは24ビットで、-3.4×10の38乗 ~ 3.4×10の38乗となっているのですが・・・この意味がさっぱりわからず何桁まで扱えるのかわかりません。 小数点以下は何桁? 整数部分は何桁? ・・・整数 小数含めて何桁まで大丈夫なのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
doubleは浮動小数点型で、浮動小数点型は大きな値から小さな値までを扱えるように考え出された科学技術計算用のデータ形式で有効桁を犠牲にして扱える値の範囲を宇宙の広さから原子の大きさまで幅広く扱えるようにしています。 >小数点以下は何桁? 整数部分は何桁? と言うような精度では表せません。 http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9 http://www.cc.kyoto-su.ac.jp/~yamada/pB/float.html 仮数部が15ビットだと精度は2進→10進変換が入るので10進で4.8桁程度です。実用レベルで有効桁は4桁ぐらいですかね。小数点の位置は関係ないです。 例えば、1.0012だとしたら1.001xで最後の2は信用できないです。10012だとしても1001xで最後の2は信用できないです。わかりますかね? 有効桁を超えた計算も出来ません。100000+1は100000です。1は有効桁外ですから。 そ あと、PICの場合は浮動小数点演算回路を持っていないCPUですので固定小数点のint型の数百倍かそれ以上に計算速度が遅くなります。利用はお勧めできません。
その他の回答 (3)
- zwi
- ベストアンサー率56% (730/1282)
>すいません一つ気になることを思いついたので教えてください。 >doubleは4桁しか扱えない(正確でない)ということは、だったら同じ24ビットのunsigned short long型を使って計算(掛け算など)した方が扱える桁数も多いし、正確な数字も出るということでしょうか? その通りです。 例えば金額計算でdoubleやfloatの浮動小数点型を使うプロのプログラマをいません。誤差があるので使い物に成りませんから。24ビットのunsigned short longの固定小数点型だと1677716で確実に10進で6桁まで扱えますからね。 じゃあ、浮動小数点型をどういうときに使うかというと1kmは原子で約何個分かと言う計算が固定小数点は値の範囲が広すぎて出来ませんが浮動小数点では可能です。
お礼
回答ありがとうございます。 なるほど!! そうだったのですか・・・小数計算だからとdoubleを使ってしまいました・・・σ(^◇^;)ヒヤアセ unsigned short longを使ってやろうと思います。ありがとうございました。ペコリ(o_ _)o))
- mtaka2
- ベストアンサー率73% (867/1179)
まずは「浮動小数点数」とはどういうものか勉強してください。 浮動小数点数では、「仮数部」と「指数部」に分けて数値を表現します。 分かりやすく、10進数で説明すると、有効数字5桁の浮動小数点数では 0.012345を「1.2345×0.01」(=1.2345×10の-2乗) 123450を「1.2345×100000」(=1.2345×10の6乗) と表現します。1.0000~9.9999の範囲の「仮数部」と、それからを何桁ずらすのかを意味する「指数部」の組み合わせです。 123456(1.23456×10の6乗)や0.123456(1.23456×10の-1乗)といった数値はこれらの数値は仮数部が6桁ありますので、仮数部の有効数字が5桁だと表現できません。 でも、有効数字が5桁までなら、非常に大きな数値も小さな数値も、扱うことができます。 1234500000000 は、1.2345×10の12乗だし、 0.00000012345は、1.2345×10の-7乗です。 ですから、浮動小数点数では「小数点以下何桁」「整数部分は何桁」といった概念はありません。扱える数字の範囲は「上から数えて何桁」って 形になります。 以上、10進数で説明しましたが、2進数でも原理は同じです。 で、PICC lite のマニュアルによると、24bit double は仮数部15+1ビット、指数部8ビットとなってます。 2進数で16bitの精度がありますから、10進数で考えるなら「有効数字は約5桁」です。 0.012345や、12345000 は扱えますが、12345600 や 0.0123456 を扱うには精度が足りないことになります。
お礼
詳しい説明ありがとうございました。ペコリ(o_ _)o)) なるほど そういうことだったのですか・・・素人には難しいですねσ(^◇^;)ヒヤアセ 完ぺきではないと思いますが、ある程度理解できました。 ありがとうございました。
補足
すいません一つ気になることを思いついたので教えてください。 PICC liteでdoubleは約5桁しか扱えない(正確でない)ということは、だったら同じ24ビットのunsigned short long型を使って計算(掛け算など)した方が扱える桁数も多いし、正確な数字も出るということでしょうか?
- osamuy
- ベストアンサー率42% (1231/2878)
>3.4×10の38乗 ってことは、指数部が8ビットっぽいから、符号1ビット仮数部15ビット(ケチ表現抜き)じゃないかと。 HITEC Cのマニュアル持ってないからあってずっぽうですが。
お礼
ありがとうございました。ペコリ(o_ _)o))
お礼
詳しい説明ありがとうございました。ペコリ(o_ _)o)) ・・・思っていたより全然桁数は少ないのですね・・・(TOT) 勉強になりました。ありがとうございます。
補足
すいません一つ気になることを思いついたので教えてください。 doubleは4桁しか扱えない(正確でない)ということは、だったら同じ24ビットのunsigned short long型を使って計算(掛け算など)した方が扱える桁数も多いし、正確な数字も出るということでしょうか?