From: TOYOFUKU Chikanobu Date: 2010-01-08T14:14:02+09:00 Subject: [ruby-dev:39990] Re: Almost endless loop of BigMath::atan(x) when x.abs >= 1 豊福です。 >> ついでに報告しておくと revision 25184 で >> atan(BigDecimal("0.7"), 100) を計算すると小数点以下30数桁目 >> から値が違っています。 > > 約2倍の速度向上は再現しましたが、精度はpatchをあてた後の方が落ちている気がします。 すいません。小数点以下30数桁目から値が違ってるのは私の 方でした。orz > どうも除算の精度を指定してないのが一因っぽいので修正しました。 > + x = (1-x).div(1+x, prec) if inv2 = x > 0.4 ということは x = 1 / x if inv = x > 1 の方も精度指定しないといけないですね。 実際 atan(BigDecimal("7"), 100) だと70数桁目から値が違ってきます。 > それでも、もとの精度は下回ってますね・・・ 収束するまでの項数分誤差が溜ってくるのでその分精度を 増やさないといけない気がします。項数を書かせてみると最大 でも200項を越えないようなので x = (1-x).div(1+x, prec+3) if inv2 = x > 0.4 でしょうか。 他の数学関数についても同様のことが起きていないか調べてみます。 --- May Haskell be with you.