4

目前我正在将一些旧的 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);

我希望评估的结果与 q5 相同,但事实并非如此。q12 改为 4479508755225.0

代码有什么问题?

4

1 回答 1

6

你为什么期望:

pow(d23, 2)

pow(23, 2)

?

提示:在 VS 中,始终将数字的默认颜色(黑色)更改为其他颜色(我喜欢红色)。

于 2012-06-01T11:33:39.960 回答