math.sqrt返回0

时间:2015-06-26 13:45:46

标签: c# function return math.sqrt

我有一个c#函数,其中包含计算某些点的欧氏距离的公式。我得到了由R(rx,ry)和L(lx,ly)定义的点的位置。

起初,我尝试编写如下代码:

$classes = ['one', 'two', 'three'];

for (..) {
    printf('<li class="%s">', $classes[$key % count($classes)]);
}

它返回0.0。

然后我尝试拆分变量来检查我做错了哪里,如下:

double dRightLeft = Math.Sqrt((Math.Pow(rx - lx, 2) + Math.Pow(ry - ly, 2)));

rl变量返回其操作的有效值。但是当我试图从中取出平方根时,dRighLeft变量仍然返回0.0。 我尝试了这样的已分配和未分配的dRightLeft:

 double rl = (Math.Pow(rx - lx, 2) + Math.Pow(ry - ly, 2));
 double dRightLeft = Math.Sqrt(rl);

他们两人仍然返回0.0值。

这是我的简短但完整的程序,我获得了rx,ry,lx和ly值:

//assigned
dRightLeft = 0;
//unassigned
dRightLeft;

1 个答案:

答案 0 :(得分:0)

我怀疑问题是Math.Pow处理双精度,它具有低精度(see this SO question for more discussion)。直接的本能是通过写出乘法来替换Math.Pow:

double rl = ((rx - lx) * (rx - lx) + (ry - ly) * (ry - ly));
double dRightLeft = Math.Sqrt(rl);

Math.Pow reference看来,如果你的基数(即rx - lxry - ly)也是0,那么返回0的唯一方法似乎是指数为2。 / p>