ニュートン・ラフソン法を用いて累乗根を求めるモジュール。
もちろん打ち切り誤差が発生します。// ニュートン・ラフソン法でxのn乗根を求める
#include "hspmath.as"
#module
#defcfunc radical_root double x, double n, local x_old, local x_new
x_new = x
repeat
x_old = x_new
x_new = ( n - 1.0 + x * pow@( x_old, -n ) ) * x_old / n
if ( absf( x_old - x_new ) < 0.00000000001 ) {
// ある程度の精度で演算を打ち切る
break
}
loop
return x_new
#global
repeat 3
pos cnt * 220, 0
up_cnt = cnt + 2
repeat 15, 2
mes strf( str( cnt ) + "の" + str( up_cnt ) + "乗根は%1.10f", radical_root( cnt, up_cnt ) )
loop
loop
stop
本家のBBSにあった「xの(1/n)乗がxのn乗根」という考え方を使えば、何と1行で記述できます。#define ctype radical_root( %1, %2 ) expf( logf( %1 ) / ( %2 ) )
2007年7月29日日曜日
累乗根を求める
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿