я скоро удавлюсь.... с++:
есть переменная long gameTime; все шито-крыто, даже начальное значение присвоено.
проверка
if (gameTime % 1440 == 0) {...}
кидает Division by zero, если gameTime на 1440 нацело не делится!!!
ладно, попробуем по-другому:
if (floor(gameTime/1440) == gameTime/1440) {...}
(floor дает целую часть числа (снизу)) конечно не очень красиво, но зато выполняется всегда! даже если gameTime не делится на 1440. вставляю в тело условия код:
printf("%lf, %lf\n", floor(gameTime/1440), gameTime/1440);
видим, что floor(gameTime/1440) действительно дает целую часть от gameTime/1440 (в типе float), видим также, что просто gameTime/1440 дает всегда 0! ладно, меняем вывод - вместо второго %lf ставим %i , видим, что да, gameTime/1440 дает в типе int (или long) целую часть от gameTime/1440. Понимаем неочевидную ошибку, меняем условие:
if(floor(gameTime/1440) == (float)gameTime/1440) {...} -
снова получаем деление на ноль, когда gameTime на 1440 нацело не делится! пробуем по-другому:
if( (long)floor(gameTime/1440) == (long)gameTime/1440) {...} -
получаем, что условие выполняется всегда!!!
АААААААААААААААА
ЧТО ДЕЛАТЬ!!!
ЗюЫю это не камень в сторону с++
есть переменная long gameTime; все шито-крыто, даже начальное значение присвоено.
проверка
if (gameTime % 1440 == 0) {...}
кидает Division by zero, если gameTime на 1440 нацело не делится!!!
ладно, попробуем по-другому:
if (floor(gameTime/1440) == gameTime/1440) {...}
(floor дает целую часть числа (снизу)) конечно не очень красиво, но зато выполняется всегда! даже если gameTime не делится на 1440. вставляю в тело условия код:
printf("%lf, %lf\n", floor(gameTime/1440), gameTime/1440);
видим, что floor(gameTime/1440) действительно дает целую часть от gameTime/1440 (в типе float), видим также, что просто gameTime/1440 дает всегда 0! ладно, меняем вывод - вместо второго %lf ставим %i , видим, что да, gameTime/1440 дает в типе int (или long) целую часть от gameTime/1440. Понимаем неочевидную ошибку, меняем условие:
if(floor(gameTime/1440) == (float)gameTime/1440) {...} -
снова получаем деление на ноль, когда gameTime на 1440 нацело не делится! пробуем по-другому:
if( (long)floor(gameTime/1440) == (long)gameTime/1440) {...} -
получаем, что условие выполняется всегда!!!
АААААААААААААААА
ЧТО ДЕЛАТЬ!!!
ЗюЫю это не камень в сторону с++