2013-07-02 25 views
7

我々はSQRTの差(x)とPOW(X、0.5)

pow(x,0.5)で異なる sqrt(x)どのよう
pow(x,0.5); 

を使用して同じことを達成することができるように、C/C++でSQRT()関数が存在する理由と思いまし。 sqrt関数を持つ特別な理由はありますか?

+0

私は特別な理由はないと思います。平方根演算は非常に一般的で、 'sqrt(x)'は 'pow()'と比較して読みやすさを向上させます。 – GeekFactory

+7

自転車があるときに自転車があるのはなぜですか? –

+1

ループを追加するだけで乗算ができるのはなぜですか? –

答えて

10

私は第一1がどこ第二一つとして約20秒かかりました

1.

for(int i=0;i<100000000;i++) 
    pow(double(i),0.5); 

2.

for(int i=0;i<100000000;i++) 
    sqrt(double(i)); 

あなたがsqrt(x)のパフォーマンスをチェックするためのテストを実行し、pow(x,0.5)私のコンピュータでは約2秒かかりました。だからパフォーマンスが良い方法です。すでに他の人が読みやすさについて言及しているのは別の理由です。

+0

私は反対の結果を得た... –

+0

私は実際に確かめるために3回テストを実際に走った。私は多くのバリエーションを得ていませんでした。再度確認してください。 – banarun

+1

[テストする](http://ideone.com/dlwLGR) –

5

powがジェネリックであるのに対し、sqrtは一つのことに固有のもので、結果を計算することが

しかし、アルゴリズムの面で...あなただけの数学的な等価性を考えるならば、確かに。

したがって、sqrtにはより速い関数を書くことが可能で、汎用のpow関数を書き込むことができます。

5

sqrt()は、IEEE仕様で正しく丸められることが保証されている特別なケースです。私はそれを見てソースを見つける。 1つのケースだけを処理する必要があるため、少し速くする必要があります。

同じものであっても、よく使われる関数の組み込みエイリアスを持つのは良いことです。

編集:IEEE-754によれば、pow()関数とsqrt()の両方は、丸められた値が実際の値に最も近い浮動小数点表現になるように実装されています。しかし、sqrt()はもっと速くなければなりません。

+0

参照してくださいhttp://stackoverflow.com/questions/22259537/ –

関連する問題