Я сделал простой пример для подсчета десятичных точек, но он не останавливается и не дает правильного ответа, вот мой код:
double b=76327741.125;
int count=0;
while(b - (int)b > 0.0)
{
b*=10;
count++;
}
cout<<count;
ответ должен быть:
3
но вместо этого цикл while продолжает работать неопределенно долго .. что не так с моим кодом?
Вы должны, вероятно, установить 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;
Вы должны были проверить INT_MAX
первый. Количество будет другим. Это зависит от того, выполняете ли вы код на 32-битной или 64-битной машине. Если это намного меньше, чем ваш начальный b
Вы бы точно оказались в бесконечном цикле. Например, максимальный тип короткого целого равен 32767. В этом случае условие вашего цикла будет выглядеть так: 76327741.125 - some negative number
больше 0. Однако в цикле вы увеличили значение b. В следующий раз, когда мы попадем в строку условий, это будет примерно так: 76327741.125*10 - some negative number