- 论坛徽章:
- 0
|
客户在测试我们开发出的软件时发现的问题:
在较大的数值多次叠加后,运算的结果发生
偏差。
程序如下:
#include <stdlib.h>;
#include <math.h>;
#define TIMES 8192
int main( int argc, char* argv[] )
{
double x = 99999999.99;
double sum = 0.0;
for( int i=0; i < TIMES; i++ )
{
sum += x;
}
sum = sum;
printf( " The multiple result is %18.2lf.\n", x*TIMES );
printf( " The sum result is %18.2lf.\n", sum );
return 0;
}
运行结果如下:
The multiple result is 819199999918.08.
The sum result is 819199999918.02.
如果是
#include <stdlib.h>;
#include <math.h>;
#define TIMES 8192
int main( int argc, char* argv[] )
{
double x = 99999999.99;
double sum = 0.0;
for( int i=0; i < TIMES; i++ )
{
sum += x*100;
}
sum = sum/100;
printf( " The multiple result is %18.2lf.\n", x*TIMES );
printf( " The sum result is %18.2lf.\n", sum );
return 0;
}
那么结果正常:
The multiple result is 819199999918.08.
The sum result is 819199999918.08.
说明是在小数部分出现问题。
如果将第一段程序改一处double x = 9999.99;
那么运算结果也正常:
The multiple result is 81919918.08.
The sum result is 81919918.08.
说明这个浮点运算偏差是在数值较大时才会出现。
问题在哪儿呢?这样的偏差我们的用户是不能接受的,
因为数值的单位可能是千元或者万元,即使差0.01,
误差也比较大了。更主要的是,我想知道这种问题
在计算机编程中普遍吗? |
|