
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
メモリ?
倍精度浮動小数点は以下の構成になっています。
(-1)^符号部 * 2^(指数部-1023) * (1.仮数部)
符号部:1[bit]
指数部:11[bits]
仮数部:52[bits]
計:64[bits]
例)[符号部,指数部,仮数部]で書きます
1.0は[0,1023,0000....0b]
0.5は[0,1022,0000....0b]
1.5は[0,1023,1000....0b]
○本題
15^15は
437,893,890,380,859,375
で二進数表記した場合
110 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 0111 1110 1111b
式『(-1)^符号部 * 2^(指数部-1023) * (1.仮数部)』を当てはめると
下記になります。
(-1)^0 * 2^58 * 1.10 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 0111 1110 1111b
符号部は素直に0
指数部は58 = (1081 - 1023)
仮数部は10 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 0111 1110 1111b
ここでちょっと見てください。
58[bits]では52[bits]を6[bits]超えています。
この場合、浮動小数点では影響の小さい(値の小さい)下位のビットを四捨五入します。
10 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 0111 11(10 1111)b
カッコ内が四捨五入対象(その中の最上位ビットが0or1)
よって
仮数部は
10 0001 0011 1011 0110 0010 1100 0101 1001 0111 0111 0000 1000 00b
となります。
これが誤差の原因です。
確かめ算をします。
[0,1081,1000010011101101100010110001011001011101110000100000b]
は
(-1)^0*2^(1081-1023)*(1.1000010011101101100010110001011001011101110000100000b)
=2^58*(1.1000010011101101100010110001011001011101110000100000b)
=2^6*2^52*(1.1000010011101101100010110001011001011101110000100000b)
=2^6*11000010011101101100010110001011001011101110000100000b
=11000010011101101100010110001011001011101110000100000000000b
=437,893,890,380,859,392
IA-32アーキテクチャではサイズを大きくした、拡張倍精度浮動小数点などもありますが。
(x87 FPU命令ですが)
結局は破綻する箇所が先送りされるだけです。
拡張倍精度浮動小数点は、コンパイラ独自拡張や機械語でないと使用出来ません。
インラインアセンブラもOKですが。
Cのdoubleに持ってきた瞬間に誤差が出ます。
※ 途中数値間違っていたらごめんなさい
No.1
- 回答日時:
有効桁数などで検索して下さい。
double 型でだいたい 15桁くらいまでしか表現できなかったはずです。
15^15 = 437893890380859375
かな?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
有効数字について 以前質問をし...
-
VB.net Double と...
-
ExcelでPC(パソコン)によって...
-
ExcelのINT関数の計算結果がお...
-
8・16進数の引き算を教えてくだ...
-
距離から緯度経度を求める方法
-
O(n log n)について2
-
計算時間の精度
-
16進数 加算 減算 C言語
-
2進数の足し算(C言語)
-
VBAでの割り算の余りの求め方
-
どんな数字を入力してもaverage...
-
floatの有効桁数
-
整数のべき数のプログラムについて
-
BCD・HEX・BINについて
-
c languageで 簡単な質問があ...
-
Aの値からBの値を除するとは??
-
複数桁10進数の*桁目だけを抽出...
-
main.c:7:43: warning: implici...
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリー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の計算方法について
おすすめ情報