我在VS8专业版上使用C#。我有一段代码,我最初是在Pascal中编写的,然后是C编写的,因此C#直到现在才被使用。代码片段看起来是这样的: -在VS8中找到两个double值的错误C#
*bool InverseTransverseMercator(coord enl)
{
double nu, rho, k0;
double x, y, x2, x3, x4, x5, x6, x7;
double phif, phi, cosphif, sinphif, lam, n, n2, n3, n4;
double t, t2, t3, t4, t6, nu2, nu3, nu5, nu7, neta2;
double a0, a1, a2, a3, p7, p8, p9, p10, p11, p12, p12a;
coord cc; //has a structure public double x, y, z;
cc = enl;
x = cc.x;
y = cc.y;
x2 = x * x;
x3 = x * x2;//I stop the debugger at the start of this line and examine some values.
...*
下面是调试器的值是无我真的很困惑: -
x = 23500.0 - original value
x * x = 552250000.0 (right hand side of x2=x * x correct)
x2 = 552249984.0 (left hand side of x2 = x * x INCORRECT!)
正如你可以看到x * x
值是正确的但在价值它被分配的变量(X2)不是。事实上,答案相差16个。 这些都是双重变量,我期望在第16位有效数字四舍五入。我尝试使用'decimal'类型使用Math.Pow(x,2)
重命名变量,并且都有问题,x2
的值不是它应该是的。我尝试重新排列线条,并添加更多虚拟线条而没有区别。通过我的代码搜索我没有全球性的名称x2
。有趣的是,这个值确实会变成接近确切的答案,就好像一个巨大的舍入误差正在完成一样。我必须在这里做一些愚蠢而愚蠢的事情,但我看不到它。我非常感谢有人就此问题提出的任何建议。
请修复格式。 – Timwi 2010-08-08 14:40:11