Gauche > Archives > 2019/06/10

2019/06/10 14:18:04 UTCkaki
#
テストが一つだけ失敗します。 test (fl+ one (flexp-1 one)): expects 2.718281828459045 => got 2.7182818284590455
#
$ gauche-config --arch
x86_64-apple-darwin13.4.0
$ ./gosh -ftest -usrfi-144
gosh> (define one (flonum 1))
one
gosh> (fl+ one (flexp-1 one))
2.7182818284590455
gosh> fl-e
2.718281828459045
gosh> (flexp-1 one)
1.7182818284590453
2019/06/10 15:32:31 UTCshiro
#
flexp-1 が1ULPだけずれてますね。expm1(3)を直接呼んでるだけなので、libmの実装の問題?
2019/06/10 15:37:41 UTCshiro
#
こっちのOSXでも再現しました。そうかしばらくOSXで検証してなかった。
2019/06/10 15:43:28 UTCshiro
#
なんか引数が1.0の近辺だけOSXのexmp1(3)の結果がずれるな…
2019/06/10 16:42:30 UTCshiro
#
GNU libmでも1ulpの誤差は許容してるから、これはプラットフォーム依存ということでapprox=?で比較すべき案件かな
#
https://www.gnu.org/software/libc/manual/html_node/Errors-in-Math-Functions.html
2019/06/10 18:59:16 UTCshiro
#
ハードで計算してるわけじゃないから実装により違いはあり得るのか。glibcのは https://code.woboq.org/userspace/glibc/sysdeps/ieee754/dbl-64/s_expm1.c.html だがDarwinのはどこだろう。BSD由来?