goo blog サービス終了のお知らせ 

山口屋~活動日誌~

私生活で主な出来事をピックアップ

浮動小数点数 比較 一致 判定 計算機イプシロン

2022-11-03 20:32:51 | ソフトウェア開発
倍精度浮動小数点数(double型)の値を比較して一致するか判定する際に、 a==b や a!=b では絶対にやってはいけない。計算機イプシロン(C言語では"float.h"のDBL_EPSILONマクロ)を上手く利用し、差が十分小さければ一致と判定する。

ここで、倍精度の浮動小数点数について、改めて振り返っておく。
符号部→1bit。
指数部→11bit。2の-1024~1023乗
仮数部→52bit。0~2の52乗
加算であれば、もとの数に2の-52乗を掛けた数より小さい数は全く反映されない。(情報落ち)

さて、計算機イプシロンであるが、定義が混在している。
→再帰の反復blog:計算機イプシロンのこと
定義1:1.0より大きい最小の浮動小数点数と1.0との差、2^-52(倍精度浮動小数点数の仮数部が52bit)
定義2:「1.0 + eps > 1.0」が真となる最小の浮動小数点数eps、ANSI C
※定義2は丸めモードにより値が異なってくる。
・上への丸め:2^-1074=最小の正の浮動小数点数(倍精度浮動小数点数で、指数部が11bitで-1022乗、仮数部が52bitで-52乗、を表している?)
・下への丸め、0への丸め:2^-52≒2.220446049250313e-16
・最近接丸め(=偶数への丸め):2^-53(≒1.1102230246251565e-16)より大きい最小の数≒1.1102230246251568e-16
実際には
・1.0の大きい方の隣りの数との相対誤差: 2^-52
・1.0の小さい方の隣りの数との相対誤差: 2^-53
のように、
・2^-53 ≦ 隣りの数との相対誤差 ≦ 2^-52
となって、2^-53を計算機イプシロンとして比較の判定に用いた場合は等値演算子で比較するのとほぼ同じになってしまう。

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« プラレール 400系新幹線つば... | トップ | TwoSum TwoProduct Kahan 敗... »
最新の画像もっと見る

コメントを投稿

ソフトウェア開発」カテゴリの最新記事