Lilla_My___ Ответов: 4

While, наименьшее число с плавающей запятой


Привет!
Во-первых: это моя вторая неделя в программировании, я идиот, но это необходимо для моей учебы.
Я должен сделать программу, которая покажет наименьшее число с плавающей запятой с 32 битами. И это должно быть так: я начинаю с единицы, а петлю и делю на два до конца (чуть больше нуля).

Что я уже пробовал:

#включить <stdio.h>

тап_п(недействительными) {
поплавок последней = 1.0;
пока(последние &ГТ; 0.0) {
последний = (последний / 2.0);
}
while (last = 0) {
printf("%f", last*2);
}

возвращает 0;
}

Patrice T

А у вас есть вопрос или проблема ?

Lilla_My___

я не знаю, почему это так, почему это не работает...

4 Ответов

Рейтинг:
2

Patrice T

Цитата:
я не знаю, почему это так, почему это не работает...

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
1

Richard Deeming

В дополнение к проблемам, о которых упоминал Грифф, конечный результат все равно не сработает. Если last является 0, умножив его на 2 все равно отдам тебе 0.

Вам нужно будет использовать две переменные, чтобы сохранить копию предыдущего шага.

float last = 1.0;
float temp = last / 2.0;
while (temp > 0.0)
{
    last = temp;
    temp = last / 2.0;
}

printf("%f", last);


Рейтинг:
0

OriginalGriff

Посмотри на свою вторую петлю:

while (last = 0) {
   printf("%f", last*2);
   }
Так как вы не меняете значение last внутри петли, если она когда - нибудь попадет внутрь - а она никогда не попадет-она никогда не сможет выйти.

Но он никогда не войдет во второй цикл, потому что " = " - это оператор присваивания, а не оператор сравнения. А в C нулевые значения рассматриваются как ложные.

Я бы настоятельно рекомендовал вам потратить немного времени на то, чтобы привыкнуть к отладчику - он показал бы вам это очень и очень быстро...


Рейтинг:
0

CPallini

float x = 1.f;

while (x / 2.f > 0.f)
  x /= 2.f;

printf("%g\n", x);