直接上代码,更复杂形式请自行修改:
//有误差的浮点数累计运算
double c = 0.1d;
for (int i = 0; i < 10000; i++)
{
c += 0.1d;//通过循环运算,就会出现累计误差
}
Console.WriteLine(c);
Console.WriteLine(0.1d + 0.1d * 10000);
/*结果为:
1000.10000000016
1000.1
请按任意键继续. . . */
//下面,同样适用循环,用分数的形式来避免误差
int a = 1, b = 10;//1/10=0.1
for (int i = 0; i < 10000; i++)
{
a += 1;//0.1就是1/10;如果是加1/3,那就要先同分,把最小公分母找到,然后操作分子
}
Console.WriteLine((double)a/b);
Console.WriteLine(0.1d + 0.1d * 10000);
/*结果为:
1000.1
1000.1
请按任意键继续. . . */