我正在将一些旧的C++代码重写为C#。在运行一些测试时,它没有按照预期工作,我开始进行调试,并遇到了下面的问题,我似乎无法解决。
因为我在类中进行了很多数学计算,并经常使用Math.Pow函数,所以我创建了一个快捷方法:
public double pow(double d, double p)
{
return Math.Pow(d,p);
}
那么我有一行代码如下,它使用了这个方法很多次:
double y = pow((pow(d12, 2) + pow(d13, 2) + pow(23, 2)), 2) - (2.0 * (pow(d12, 4) + pow(d13, 4) + pow(d23, 4)));
这行代码没有得到预期的结果,所以我开始将其分解成更小的部分进行计算......例如减号前面的值应该等于q5:
double q1 = pow(d12, 2);
double q2 = pow(d13, 2);
double q3 = pow(d23, 2);
double q4 = q1 + q2 + q3;
double q5 = pow(q4, 2);
在这些代码行后,q5 的值为 8775553070736.0。
接着我尝试将长行分成两部分,第一部分应该与上述 5 行相等,只是写成了一行:
double q12 = pow((pow(d12, 2) + pow(d13, 2) + pow(23, 2)), 2);
我原以为q12的值与q5相同,但实际上并不是这样的。q12的值为4479508755225.0
代码有什么问题吗?
Math.Pow
很慢。我建议使用double sqr(double d) { return d * d; }
和double fourthPow(double d) { return d*d*d*d; }
。 - Vlad