スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C# Math.Powのパフォーマンスについて

  • 2016/03/02 14:33
  • Category: C#
.NETのMath.Powを使う場合、指数部に整数を指定するのであれば、Math.Powよりもx * xのように演算子を使う方が高速です。


//最適化でコードが削除されないように一部対処してます。

Math.Pow5937ms
x * x * x115ms


50倍も差が出ました。Math.Powではdoubleを指定できるので、汎用的に使える分、処理は遅くなるということでしょうか…
MSDNに書いてある通り、引数がNANやInfであったときに特定の値を返すので、引数の判断にも時間がかかっていそうです。


Reference Sourceでメソッドの実装を見ようとしたところ、
http://referencesource.microsoft.com/#mscorlib/system/math.cs,95354113fadc3083,references
public static extern double Pow(double x, double y);
externが付いていました。もっと低レイヤーで実装されているようです。


さらに調べてみると、Stack Overflowから
http://stackoverflow.com/questions/9652549/self-made-pow-c
http://opensource.apple.com/source/Libm/Libm-315/Source/ARM/powf.c
http://opensource.apple.com/source/Libm/Libm-2026/Source/Intel/expf_logf_powf.c
Cでの実装が見つかりました。(といってもAppleのものですが)
軽く読むだけでも、単なる掛け算とは比較にならないほどの処理をしてるのが分かりますね…

スポンサーサイト

Pagination

Trackback

Trackback URL

http://someprog.blog.fc2.com/tb.php/17-c47285c9

Comment

Post Your Comment

コメント登録フォーム
公開設定

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。