最近我研究自动寻路系统中发现了有一个奇怪的问题。
就是说两个双精度小数点的乘法结果不是每次一样。 有两种结果。
一个是正确的(结果值的精度就是双精度)一个是不正确的(结果是单精度)
我来贴个代码
double dmutiple(double p1x, double p1y)
{
double ret = p1x * p1y;
return ret;
}
下面调用这个函数如此
double p = dmultiple(-1315.192627, 3798.213623);
这下当然是p1x和p1y都是双精度、乘法的结果也应该是双精度 这样才对了。
但是这次的测试的结果是让我很失望。。。
有的时候 -4995382.552624 这是正确的。
可是有时 -4995382.500000 这是不对的,这个是p1x和p1y都是单精度的时候的精度。
哪位朋友看过了这样的问题吗?
可注意的是在简单的例子Project上没有这个问题 每次都正确的。
但是比较大的工程里一定出现这问题。 所以我想这个问题是不是堆栈不够的时候出现的问题的。。。 但还不确定。
请多位高手的指教。 |