2011-06-14 113 views
0

其具有一段代碼,林wrinting應用,在那裏T->蜱是浮動:浮點數和usleep問題

usleep(1000); 
t->tick = t->tick + 0.001; 
printf("tick is %f, firing time is %f\n", t->tick, t->firing_time); 

我發現有在usleep?:

tick is 0.313000, firing time is 2.000000 
tick is 0.314000, firing time is 2.000000 
tick is 0.314999, firing time is 2.000000 
tick is 0.315999, firing time is 2.000000 

錯誤如何擺脫那個錯誤?

+0

如何計算'firing_time'? – 2011-06-14 12:33:18

+0

是float並設置爲2.000000 – JosiP 2011-06-14 12:33:45

+0

http://floating-point-gui.de/ – 2011-06-14 12:34:30

回答

0

看起來像printf中的舍入穩定性錯誤。嘗試:printf(「tick是%.3f,開火時間是%.3f \ n」,t-> tick,t-> firing_time);

+0

nope,因爲當我測試條件firing_time ==刻度,我總是得到錯誤 – JosiP 2011-06-14 12:38:03

+3

@josip你不能比較這樣的浮點數。通常的做法是減去兩個浮點數,然後檢查結果是否小於給定值,如0.001。 – dandan78 2011-06-14 12:38:26

+0

你在哪裏看到比較操作? – ocsid80 2011-06-14 12:39:47

1

沒有錯誤,你根本不明白二進制浮點數學是如何工作的。