我試圖做codechef問題 - https://www.codechef.com/problems/FLOW009爲什麼浮動在c不工作的方式應該?
在這裏,我的代碼(成功提交)是這樣的 -
int main(void) {
int testCases;
scanf ("%d\n", &testCases);
while (testCases--) {
float q,p;
scanf ("%f%f", &q,&p);
if (q >= 1000){
printf("%.6f\n",q*p - (q*p*0.1));
}
else{
printf("%.6f\n", q*p);
}
}
return 0;
}
這已成功提交...但但是當我嘗試這種代碼 -
int main(void) {
int testCases;
scanf ("%d\n", &testCases);
while (testCases--) {
float q,p;
scanf ("%f%f", &q,&p);
if (q >= 1000){
float a = q*p - (q*p*0.1);
printf("%.6f\n",a);
}
else{
printf("%.6f\n", q*p);
}
}
return 0;
}
它說錯了答案。在我的編譯器中,所有測試用例的結果都是一樣的。發生什麼事。第一個代碼 - 我只是打印值。 在第二個 - 我正在使用一個變量來存儲值。
聚苯乙烯 - 我試圖typecasting的價值也沒有結果。
簡短的回答是,「0.1」不能完全用二進制浮點表示。可能這兩段代碼與內部保持更高精度的代碼不同。 (類似於十進制,「3 x 1/3」可能會給你一個,但是如果你將1/3存儲在一個變量中,它可能四捨五入爲「0.3333333」,乘以3時不等於1.) –
codechef問題描述還要求所有輸入都是整數,這表明計算也應該使用整數。 – Peter
注意:'0.1'是'double'類型的。 – pmg