#include <stdio.h>float time(int x){? ? if(x>=23||x>=0&&x<=5)? ? {? ? ? ? float a=1.2;? ? ? ? return a;? ? }? ? else? ? {? ? ? ? int b=1;? ? ? ? return b;? ? }}float kilometre(float y){? ? int begin=13;? ? if(y>3)? ? {? ? ? ? float c=(y-3)*2.3+begin+1;? ? ? ? return c;? ? }? ? else? ? {? ? ? ? int d=begin+1;? ? ? ? return d;? ? }}int main(){? ? float a,b,c,d;? ? a=9;? ? b=12;? ? c=6;? ? d=12;? ? float e=time(a)*kilometre(b)+time(c)*kilometre(d);? ? printf("小明每天打車的總費用是%f\n",e);? ? return 0;}
2 回答

傻圓傻圓
TA貢獻14條經驗 獲得超23個贊
????在計算機存儲數(shù)字的時候是使用的是二進制的形式,存儲整數(shù)一般不會有誤差,但是在存儲小數(shù)的時候就會出現(xiàn)誤差了,對于float類型來說,它的精度并不是很高,在你的程序中你使用到了2.3這個float類型的數(shù)字,你可以試著看一下這行語句的打印結果printf("%.10f", (float)2.3),會發(fā)現(xiàn)打印的結果并不是預期中的2.3000000000這個數(shù)字,而是一個稍微小上一丟丟的數(shù)字。如果使用double類型的話會更好,因為double類型的精度更高,試著看一下這行語句的打印結果printf("%.10lf", (double)2.3),會發(fā)現(xiàn)是預想中的結果2.3000000000,但實際上如果輸出位數(shù)在多一些的話,也會看出來一些誤差。
????總的來說,就是在計算機進行浮點數(shù)的運算時,會涉及到一個精度問題,而你的代碼之所以會打印出來的結果和預期不同,就是因為運算時的誤差,如果想要深入的了解,建議看一下關于計算機中數(shù)字的存儲以及計算相關知識。
- 2 回答
- 0 關注
- 1517 瀏覽
添加回答
舉報
0/150
提交
取消