下面是一個簡單的C++程序的代碼:原因是C怪輸出++程序
#include <bits/stdc++.h>
using namespace std;
int main() {
double x = 3;
double y = .15;
while(x>0) {
printf("%.15f ",x);
cout<<x<<endl;
x-=y;
}
return 0;
}
輸出:
> 3.000000000000000 3
> 2.850000000000000 2.85
> 2.700000000000000 2.7
> 2.550000000000000 2.55
> 2.400000000000000 2.4
> 2.250000000000000 2.25
> 2.100000000000001 2.1
> 1.950000000000001 1.95
> 1.800000000000001 1.8
> 1.650000000000001 1.65
> 1.500000000000001 1.5
> 1.350000000000001 1.35
> 1.200000000000001 1.2
> 1.050000000000001 1.05
> 0.900000000000001 0.9
> 0.750000000000001 0.75
> 0.600000000000001 0.6
> 0.450000000000001 0.45
> 0.300000000000001 0.3
> 0.150000000000001 0.15
> 0.000000000000001 1.05471e-15
看看現在的第七行。這不奇怪嗎?這裏出於某種原因2.25 - .15正在2.100000000000001。我知道這可以通過使用浮動來避免。但我想知道爲什麼會發生這種情況。
浮點數不能精確存儲,因爲並非所有的十進制數都有二進制的精確表示。這就是所謂的浮點錯誤,也是爲什麼你應該總是非常謹慎的事情,例如測試兩個相等的浮點數 – dww