
No.3ベストアンサー
- 回答日時:
doubleは浮動小数点型で、浮動小数点型は大きな値から小さな値までを扱えるように考え出された科学技術計算用のデータ形式で有効桁を犠牲にして扱える値の範囲を宇宙の広さから原子の大きさまで幅広く扱えるようにしています。
>小数点以下は何桁? 整数部分は何桁?
と言うような精度では表せません。
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95% …
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型の数百倍かそれ以上に計算速度が遅くなります。利用はお勧めできません。
この回答への補足
すいません一つ気になることを思いついたので教えてください。
doubleは4桁しか扱えない(正確でない)ということは、だったら同じ24ビットのunsigned short long型を使って計算(掛け算など)した方が扱える桁数も多いし、正確な数字も出るということでしょうか?
詳しい説明ありがとうございました。ペコリ(o_ _)o))
・・・思っていたより全然桁数は少ないのですね・・・(TOT)
勉強になりました。ありがとうございます。
No.4
- 回答日時:
>すいません一つ気になることを思いついたので教えてください。
>doubleは4桁しか扱えない(正確でない)ということは、だったら同じ24ビットのunsigned short long型を使って計算(掛け算など)した方が扱える桁数も多いし、正確な数字も出るということでしょうか?
その通りです。
例えば金額計算でdoubleやfloatの浮動小数点型を使うプロのプログラマをいません。誤差があるので使い物に成りませんから。24ビットのunsigned short longの固定小数点型だと1677716で確実に10進で6桁まで扱えますからね。
じゃあ、浮動小数点型をどういうときに使うかというと1kmは原子で約何個分かと言う計算が固定小数点は値の範囲が広すぎて出来ませんが浮動小数点では可能です。
回答ありがとうございます。
なるほど!! そうだったのですか・・・小数計算だからとdoubleを使ってしまいました・・・σ(^◇^;)ヒヤアセ unsigned short longを使ってやろうと思います。ありがとうございました。ペコリ(o_ _)o))
No.2
- 回答日時:
まずは「浮動小数点数」とはどういうものか勉強してください。
浮動小数点数では、「仮数部」と「指数部」に分けて数値を表現します。
分かりやすく、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 を扱うには精度が足りないことになります。
この回答への補足
すいません一つ気になることを思いついたので教えてください。
PICC liteでdoubleは約5桁しか扱えない(正確でない)ということは、だったら同じ24ビットのunsigned short long型を使って計算(掛け算など)した方が扱える桁数も多いし、正確な数字も出るということでしょうか?
詳しい説明ありがとうございました。ペコリ(o_ _)o))
なるほど そういうことだったのですか・・・素人には難しいですねσ(^◇^;)ヒヤアセ
完ぺきではないと思いますが、ある程度理解できました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelでPC(パソコン)によって...
-
”/”を使わずに割り算したいんで...
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
三菱シーケンサ(Aシリーズ)で...
-
距離から緯度経度を求める方法
-
EXCELで 0.1 はなぜ 0.1 となる...
-
EXCELの関数"STDEV(標準偏差)"...
-
PICで小数点の演算
-
2進数の足し算(C言語)
-
O(n log n)について2
-
色の判定
-
【C言語】RGBと輝度の計算に関して
-
変換指定子%22-16gの表示...
-
16進数 加算 減算 C言語
-
C言語 型変換のタイミング
-
どんな数字を入力してもaverage...
-
VB.net Double と...
-
VB6.0での小数点の扱いについて
-
ExcelのINT関数の計算結果がお...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
MATLABでの行列の全要素の和
-
除算を使わずに10で割りたい。
-
floatの有効桁数
-
”/”を使わずに割り算したいんで...
-
ExcelのINT関数の計算結果がお...
-
VBAでミリ秒まで出力する方法
-
VB6.0での小数点の扱いについて
-
Fortran において変数の定義
-
計算の丸め誤差の解消について
-
C言語について質問です。
-
CRCの計算方法について
おすすめ情報