From: Shigeo Kobayashi Date: 2005-10-25T18:07:56+09:00 Subject: [ruby-dev:27518] Re: RCR 322: Use log identities to improve BigMath::log performance 小林です。 ----- Original Message ----- From: "Yukihiro Matsumoto" Subject: [ruby-dev:27511] RCR 322: Use log identities to improve BigMath::log performance > RCR322の修正を取り込みたいのですが、私にはちょっと手に余りま > す。正しいかどうかきちんと検証する自信もないし。 > > http://www.rcrchive.net/rcr/show/322 この議論は log だけでなく、 sin 等についても当てはまります。 例えば sin(y) を計算する場合、y>=PI なら(PI=3.14...) sin 関数の中で 自動的に sin(y-PI) として計算してほしいといったメールを過去に受け 取ったことがあります。しかし、これでは毎回 PI を sin の中で計算しな くてはなりません。要求桁数が同じなら、毎回同じ PI を計算することに なります。 log も同様に、 > power = power.to_s.to_d > _log(fraction, prec) + (_log(power, prec) * exponent) _log(power, prec) は _log(BigDecimal("10"), prec) ですから、一度の 計算なら良いのですが、普通は何度も log を呼び出すなかで log(10) を毎回計算しなければならない事を考慮する必要があります。 prec が変化しない(ケースが大半)なら非常に無駄なことになります。 PI と同様に _log(BigDecimal("10"), prec) もユーザが log を呼び出す 前に処理すべきものと考えます。 ということで、この修正は取り込む必要はないと思います。 # 知識として何かのドキュメントに記すということは必要かもしれませんが… ---- 小林 茂雄