2013/06/18

ちょっと前に悩んだんですが、浮動小数点演算のオーバーフローってどうやって検出しましょう

 浮動小数点演算について記載中です。
 以前ちょっと困って、暫定対処で逃げを打ったのですが、浮動小数点演算のオーバーフローってどうやって検出するのでしょうか?
 指数部(12ビット)、仮数部(52ビット)の浮動小数点演算の場合、数値として表現できるのが、仮数部(52bit)で表せる数値で、その小数点の位置を示す指数部(12bit)で表現する。
 よく誤差が出るのでお金の計算はするなと言いますが、小数演算以外でも仮数部で表現できない数字は丸められてしまいます。

 2の52乗=9007199254740992

 javascript で 以下のコードはどう動くでしょう?

document.write ( 9007199254740992 + "<br />" ) ; 
document.write ( 9007199254740993 + "<br />") ;

 実行結果
   9007199254740992
   9007199254740992  ←あれ?数字が変わっています。

丸められますと書きましたが、仮数部を超えているわけなので、オーバーフローではないのか?って
気はしますが、違うんですよね。
色々書いていると、なかなか知らないことに遭遇することもあるようです。

0 コメント:

コメントを投稿