Ошибка в цикле while?

Я сделал простой пример для подсчета десятичных точек, но он не останавливается и не дает правильного ответа, вот мой код:

double b=76327741.125;
int count=0;
while(b - (int)b > 0.0)
{
b*=10;
count++;
}
cout<<count;

ответ должен быть:

3

но вместо этого цикл while продолжает работать неопределенно долго .. что не так с моим кодом?

0

Решение

Вы должны, вероятно, установить b быть b - int(b), чтобы убедиться, что он не продолжает расти (и, возможно, переполнен).

double b=76327741.125;
int count=0;
while(b - (int)b > 0.0)
{
b = b - int(b); // Note the change here.
b*=10;
count++;
}
cout<<count;
0

Другие решения

Вы должны были проверить INT_MAX первый. Количество будет другим. Это зависит от того, выполняете ли вы код на 32-битной или 64-битной машине. Если это намного меньше, чем ваш начальный bВы бы точно оказались в бесконечном цикле. Например, максимальный тип короткого целого равен 32767. В этом случае условие вашего цикла будет выглядеть так: 76327741.125 - some negative numberбольше 0. Однако в цикле вы увеличили значение b. В следующий раз, когда мы попадем в строку условий, это будет примерно так: 76327741.125*10 - some negative number

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector