06/08/28 22:53:00
これか
URLリンク(www.jp.freebsd.org)
FreeBSD QandA 2003年10月16日 更新分
管理番号 587 (更新) 更新履歴
Q. gccで "long double" を使用して数値計算を行ないましたが、同じ CPU での
Linux の結果と比べて計算精度が悪く、計算結果が異なります。
A. FreeBSD の標準カーネルでは浮動小数点の仮数部の精度が (IEEE754 と異なり)
53bit に設定されているために起きる現象です。
Intel x86 系の FPU の仮数部の精度は 24/53/64bit に設定可能です。
FreeBSD では仮数部の精度が 53bit に設定されているために、long double
を使用しても仮数部の精度が 53bit (つまり、double と同じ) しかありません。
1. 関数 fpsetprec()/fpgetprec() を使用して、FPU の仮数部の精度を 64bit
に変更する事が出来ます。fpsetprec(3) を御覧下さい。
2. GNU Multiple Precision Arithmetic Library (GMP)、PARI 等 FreeBSD 標
準以外の数値演算ライブラリを利用してもよいでしょう。