谁知道乘法运算符是否比使用Math.Pow方法更快?像这样:
n * n * nvs
Math.Pow ( n, 3 )发布于 2009-06-01 20:16:42
基本上,您应该使用benchmark来查看。
有根据的猜测(不可靠):
以防某些编译器没有对其进行优化...
x * x * x很可能比Math.Pow(x, 3)更快,因为Math.Pow必须处理一般情况下的问题,处理分数幂和其他问题,而x * x * x只需要几条乘法指令,所以它很可能更快。
发布于 2009-06-01 21:33:55
我只是重新安装了windows,所以visual studio没有安装,代码也很难看。
using System;
using System.Diagnostics;
public static class test{
public static void Main(string[] args){
MyTest();
PowTest();
}
static void PowTest(){
var sw = Stopwatch.StartNew();
double res = 0;
for (int i = 0; i < 333333333; i++){
res = Math.Pow(i,30); //pow(i,30)
}
Console.WriteLine("Math.Pow: " + sw.ElapsedMilliseconds + " ms: " + res);
}
static void MyTest(){
var sw = Stopwatch.StartNew();
double res = 0;
for (int i = 0; i < 333333333; i++){
res = MyPow(i,30);
}
Console.WriteLine("MyPow: " + sw.ElapsedMilliseconds + " ms: " + res);
}
static double MyPow(double num, int exp)
{
double result = 1.0;
while (exp > 0)
{
if (exp % 2 == 1)
result *= num;
exp >>= 1;
num *= num;
}
return result;
}
}结果:
csc /o test.cs
test.exe
MyPow: 6224 ms: 4.8569351667866E+255
Math.Pow: 43350 ms: 4.8569351667866E+255 在我的测试中,平方求幂(参见 https://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int)比Math.Pow快得多(我的CPU是2 Ghz的奔腾T3200 )。
编辑:.NET版本是3.5 SP1,操作系统是Vista SP1,电源计划是高性能。
发布于 2011-06-08 11:07:08
以下是10+在图像处理和科学计算领域多年的优化经验:
算法级别的优化胜过低级别的任何数量的优化。尽管有“写出显而易见的东西,然后优化”的传统智慧,但这必须在一开始就完成。不是在那之后。
手工编码的数学运算(特别是单指令多指令SSE+类型)通常会优于完全错误检查的通用内置运算。
编译器预先知道需要做什么的任何操作都会被编译器优化。这些操作包括: 1.诸如Array.Copy()之类的内存操作2.在给定数组长度的数组上执行循环。如for (..; i<array.Length;..)所示
总是设定不切实际的目标(如果你想的话)。
https://stackoverflow.com/questions/936541
复制相似问题