#c #double #zero #fractions
#c #двойной #ноль #дроби
Вопрос:
мне нужна помощь с домашним заданием, мне нужно создать программу на языке Си, которая получает двойное число и печатает число без плавающей запятой, например, получает 157.89943912 и печатает 15789943912
итак, я сделал это
void main()
{
double x = 157.89943912;
while (x - (int)x > 0.0000001)
{
x *= 10;
}
printf("%lf", x);
scanf_s("%d");
}
теперь из-за двойной нулевой неточности цикл выполняется вечно
, но если я поставлю 157.8994391 (на один десятичный знак с плавающей запятой меньше)
это работает..
заранее спасибо !.
Комментарии:
1. будет ли это обманом
sprintf()
double
, а затем удалить «.» из строки?2. Ваша проблема связана с ошибкой вычисления с плавающей запятой, вы ошибочно предполагаете, что 157.89943912 * 10 равно 1578.9943912 и т. Д., Это не так
3. @bruno не совсем: 15789943912 может быть не представлен в виде
int
(для этого требуется не менее 5 байт), поэтому приведение будет переполнено4. @IngoLeonhardt да, также
5.
scanf_s("%d");
? ouppps