« Windowsで使える開発環境「MinGW」 | トップページ | あれ?system-config-security-levelは? »

2008/01/11

3乗根を求める

2乗根(平方根)を求めるならsqrt()(C言語のmathライブラリの関数)で求められますが、3乗根となると手が止まる人もいると思います。(私もその一人)

3乗根が整数になる値(8,27,64,125,216,...)ならばpow(n, 1.0/3.0)で求めてもなんら問題ないと思いますが、3乗根が実数になる値となると精度が気になります。

そんなときに私が思いつくのはNewton法くらいです。(Newton法の詳細はリンク先のWikipediaで)つまり、f(x) = x^3 - n = 0 とおいてNewton法により x の値を求めるわけです。

う~ん、どちらを使えばいいんだろう?

pow()のほうが汎用性高いけど、Newton法のほうが精度よさそうだし・・・

アドバイス欲しいなぁ

|

« Windowsで使える開発環境「MinGW」 | トップページ | あれ?system-config-security-levelは? »

Algorithm」カテゴリの記事

コメント

double pow_1_3(double a)
{
double x = pow(a, 1./3)
return (2*x+a/x/x)/3; // modifier
}

投稿: boss | 2009/01/07 17:24

なるほど!
pow()で近似値を求めてからNewton法の漸化式を使えということですか。
ありがとうございます。

投稿: Student | 2009/01/07 21:27

計算コストを考えれば、
単精度でpowf+Newton法を使って計算し、それもとに倍精度でNewton法を走らせるという方法もあります。

投稿: boss | 2009/01/09 01:36

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/222903/17659600

この記事へのトラックバック一覧です: 3乗根を求める:

« Windowsで使える開発環境「MinGW」 | トップページ | あれ?system-config-security-levelは? »