アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
デジャブ? (スコア: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近傍ではそんなにいりません。
Re:デジャブ? (スコア:1)
なんか設定でそういうのをいじれれば、良くなるかも。
Re:デジャブ? (スコア:2, 参考になる)
違うっぽいかも。
セルの値を=Sinh(1E-19)/1E-19にしても0だから。
1E-16前後あたりから値がおかしくなる。
でもSin(x)/xだと(xが十分小さいところで)問答無用でちゃんと1になるから、内部的に
どういう展開を使うかあたりで怪しいんかねぇ。
Re: (スコア:0)
Re: (スコア:0)
に自動変換され、セルには0とでますね。セルのプロパティから数値で小数点以下の桁数30にした状態でも0.0です。小数点以下に0が多く並んでるが数えるの面倒だから放置
Re: (スコア:0)
=IF(A1=0, "真", "偽")としてみると
sinh(1E-16)までは偽で、sinh(1E-17)から真となりました。
元コメントにあるとおり1E-16辺りから怪しいようです。
# さらにsinh(6E-17)では偽、sinh(5E-17)では真……って何ヒマな事をやってるんだろ
(*) 一応注意しておくと、sinh(6E-17)まで正しいという訳ではないです。