Article View: fj.sci.math
Article #13525Re: Newton method(Re: Squeare root bye +-x op.)
From: chikaoka
Date: Sat, 05 Oct 1996 00:00
Date: Sat, 05 Oct 1996 00:00
75 lines
3600 bytes
3600 bytes
近岡@大門高校(富山県)です。
hirayama@etl.go.jp (Fuminori Hirayama) wrote:
>平山@電総研といいます.
>
>In article <52vvmp$psc@inetsv1.daimon-hs.daimon.toyama.jp>, <chikaoka@daimon-hs.daimon.toyama.jp> wrote:
>
>> 近岡@大門高校(富山県)です。
>(略)
>> (3)のNewton法による平方根のプログラム例は、
>> (C言語風、ただし、aのn乗をa^nであらわす。)
>(略)
>> /* Newton法 */
>> do {
>> t=s; s=(t^2+x)/(2*t); /* # ここが問題 */
>> } while (s<t);
>>
(中略)
>> プログラムの#印の所は、
>> t=s; s=(t+x/t)/2;
>> とすると、高速でオーバーフローの心配も少なくなります。
>
>これを方法(A)として,
>
>> このNewton法はループ1回ごとに有効桁数が2倍になります。
>> しかし、プログラム中の#印の所を
>> t=s; u=s*s; t=t-2*t*(u-x)/(3*u+x);
>> とすれば、ループ1回ごとに 有効桁数が3倍になるような気がします。
>こっちを(B)とします.
[1] この式のままだと、ほぼ100%(例外あり)、
有効桁数の最後の1ビット分だけ大きくなります。
(浮動小数点数でも、固定小数点数でもです。)
誤差を無くすには、
s=t-2*t*(u-x)/(3*u+x);
を、
s=t*(u+3*x)/(3*u+x);
に修正する必要があります。
このとき、分子・分母のオーバーフローが心配です。
>(B)の繰り返しの式を変形すると
>
> (t(n+1)-sqrt(x))=(t(n)-sqrt(x))^3/(3*t(n)^2+x)
>
>となって,t(n)がxに十分近いときには1回のiterationで桁数は3倍になる
>と思います.だから同じ桁数(精度)まで計算するためには,(A)に比べて
>2/3の繰り返し回数ですむことになります.でも計算時間を考えると,
>1iterationあたりだいたい
>
>方法(A) 除算1回
>方法(B) 自乗1回+乗算1回+除算1回
>
>となるので,結局(A)の方が速くなるのではないかと思います.
[2] 方法(A)3回と、方法(B)2回とでほぼ同じ効果が得られるので、
方法(A)3回 除算3回
方法(B)2回 自乗2回+乗算2回+除算2回
で、除算1回が(自乗2回+乗算2回)より速いかどうかが問題になるのですね。
従って、方法(B)が効果を発揮するのは、
[2] 多倍長計算などで乗法の4倍以下の速度で除法ができない場合。
[1] 分子・分母の計算でオーバーフローしないこと。
の2条件を同時にみたす時に限られるのですね。
>それにしても(B)は面白い方法ですね.参考文献等はあるのでしょうか?
ご存じの方はぜひ教えてください。
私自身は、立方根のアルゴリズムでループ1回で有効桁数が3倍になるものが
奥村『C言語による最新アルゴリズム』(技術評論社)
にのっていたので、平方根でもできないかと考えた結果、
この方法を思いつきました。
近岡宣吉 Chikaoka, NobuYoshi
E-mail:chikaoka@daimon-hs.daimon.toyama.jp
Technical Details
Message-ID:
<534rup$7r3@inetsv1.daimon-hs.daimon.toyama.jp>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<SFUJI.96Sep27170540@rd3sn01.rd.ten.fujitsu.co.jp> <52vvmp$psc@inetsv1.daimon-hs.daimon.toyama.jp> <hirayama-0310962015590001@ripspom.aist.go.jp>Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS X-Google-Thread: f4956,8f4df0d6ffb80df3 X-Google-Attributes: gidf4956,public From: <chikaoka@daimon-hs.daimon.toyama.jp> Subject: Re: Newton method(Re: Squeare root bye +-x op.) Date: 1996/10/05 Message-ID: <534rup$7r3@inetsv1.daimon-hs.daimon.toyama.jp> X-Deja-AN: 187691488 references: <SFUJI.96Sep27170540@rd3sn01.rd.ten.fujitsu.co.jp> <52vvmp$psc@inetsv1.daimon-hs.daimon.toyama.jp> <hirayama-0310962015590001@ripspom.aist.go.jp> content-type: text/plain; charset=iso-2022-jp organization: daimon-hs x-url: news:hirayama-0310962015590001@ripspom.aist.go.jp mime-version: 1.0 newsgroups: fj.sci.math x-mailer: Mozilla 1.1N (Macintosh; I; 68K)