アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
にわかな奴ほど語りたがる -- あるハッカー
デジャブ? (スコア:0)
Re: (スコア:1, 参考になる)
# xがゼロの近傍で、sinh(x)≒xになる筈。
Re:デジャブ? (スコア:2, 参考になる)
sinh(x)=(exp(x)-exp(-x))/2
で計算していて、0近傍でexp(x)≒1+x、exp(-x)≒1-xとなるので、これらの値が倍精度で表現出来なくなったところで終わりです。パーセントオーダーの精度だと5e-15で終わりです。
MzScheme(Schemeの処理系の1つ)でも試してみましたが、倍精度なので結果は同じです。sinhは無いので、上記の式を使いました。
ただ、個人的には、この手の計算をするときにExcelを使う奴の方が間違っていると思う。
Re:デジャブ? (スコア:1)
関数計算をしていて有効桁が少ないという問題がありましたね。
あと、sqrt(x) を x^0.5 で代用しているのでこれも有効桁が少ないという
問題がありました。(真面目に計算するならニュートン法でも使うところ。)
補足 (スコア:1)
> (sinh 1e-4)
0.00010000000016666667
> (sinh 1e-5)
1.0000000000166668e-005
> (sinh 1e-6)
1.0000000000001666e-006
> (sinh 1e-7)
1.0000000000000017e-007
> (sinh 1e-8)
1e-008
Excelのsinh(x)では
1.00E-04のとき、
1.00000000166689E-04
ですが、1.00E-05のとき、
1.00000000001210E-05
となるので、Excelでは、1e-5のときの下位の桁は信頼できません。
因みに、MzSchemeで計算しましたが、exp(x)-1を求める関数は、
(define mexp (lambda (x) (exact->inexact (let loop1 ((n 60)) (if (= n 0) 0 (+ (let loop2 ((n n)) (if (= n 0) 1 (* (/ x n) (loop2 (- n 1))))) (loop1 (- n 1))))))))
マクローリン展開のnは60としましたが、0近傍ではそんなにいりません。