число с плавающей запятой и проблема услипа - PullRequest
0 голосов
/ 14 июня 2011

Я пишу приложение, в котором есть этот код, где t-> tick - это float:

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

Как избавиться от этой ошибки?

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Нет ошибки, вы просто не понимаете, как работает двоичная математика с плавающей точкой.

0 голосов
/ 14 июня 2011

Похоже на ошибку стабильности округления в printf.

Попробуйте: printf ("тик% .3f, время запуска% .3f \ n", t-> тик, t-> firing_time);

...