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