0

我正在编写具有那段代码的应用程序,其中 t->tick 是浮动的:

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

如何摆脱该错误?

4

2 回答 2

1

没有错误,您根本不了解二进制浮点数学的工作原理。

于 2011-06-14T12:42:58.340 回答
0

看起来像是 printf 中的舍入稳定性错误。

试试: printf("tick 是 %.3f, 触发时间是 %.3f\n", t->tick, t->firing_time);

于 2011-06-14T12:36:37.183 回答