嵌套的Math.Pow(...)表现得很奇怪

Kni*_*ard 4 c# math nested pow

目前我正在将一些旧的C++代码重写为C#.当运行一些测试它没有按预期工作时,我开始调试,并且遇到了我似乎无法弄清楚的下面的内容.

因为我在课堂上做了很多数学并经常使用Math.Pow函数,所以我为它创建了一个快捷方法:

public double pow(double d, double p)
{
   return Math.Pow(d,p);
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个如下代码行,它使用这种方法很多次:

double y = pow((pow(d12, 2) + pow(d13, 2) + pow(23, 2)), 2) - (2.0 * (pow(d12, 4) + pow(d13, 4) + pow(d23, 4)));
Run Code Online (Sandbox Code Playgroud)

这条线没有给出预期的结果,所以我开始把它分成小块,因为它应该被计算...例如,减号之前的值应该等于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);
Run Code Online (Sandbox Code Playgroud)

在这些线之后q5是8775553070736.0

然后我尝试将长线分成两部分,其中第一部分应该等于上面的5行,只写成一行:

double q12 = pow((pow(d12, 2) + pow(d13, 2) + pow(23, 2)), 2);
Run Code Online (Sandbox Code Playgroud)

我期望评估与q5相同,但事实并非如此.q12而是评估为4479508755225.0

代码有什么问题?

lep*_*pie 6

为什么你期望:

pow(d23, 2)
Run Code Online (Sandbox Code Playgroud)

和...一样

pow(23, 2)
Run Code Online (Sandbox Code Playgroud)

PROTIP:在VS中,始终将数字的默认颜色(黑色)更改为其他内容(我喜欢红色).