Всякий раз, когда я использую pow, ожидающий целочисленный результат, я добавляю .5, поэтому я использую (int)(pow(10,m)+.5)
вместо того, чтобы компилятор автоматически конвертировал pow(10,m)
в int.
Я прочитал много мест, рассказывающих, что другие сделали исчерпывающие тесты некоторых ситуаций, в которых я добавляю, что .5
и обнаружили нулевые случаи, когда это имеет значение. Но точное определение условий, в которых оно не требуется, может быть довольно сложным. Использование его, когда оно не требуется, не наносит реального вреда.
Если это имеет значение, это разница, которую вы хотите. Если это не имеет значения, у него была крошечная стоимость.
В опубликованном коде я бы отрегулировал каждый вызов до pow
таким образом, а не только тот, который я использовал в качестве примера.
Нет одинаково простого решения для использования log10
, но это может быть проблема. Поскольку вы ожидаете не целого ответа и хотите, чтобы не целочисленный ответ усекался до целого числа, добавление .5 было бы очень неправильным. Поэтому вам может потребоваться найти более сложную работу для фундаментальной проблемы работы с плавающей точкой. Я не уверен, но, предполагая 32-битные целые числа, я думаю, что добавление 1e-10
к результату log10
до того, как преобразование в int
оба никогда не будет достаточно, чтобы изменить log10(10^n-1)
на log10(10^n)
, но всегда достаточно, чтобы исправить ошибку, которая могла бы сделать обратное.
Похоже, вам, возможно, потребуется научиться использовать отладчик для перехода через ваш код. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver
СОВЕТ: 'int'! =' Double ' –
вместо того, чтобы сказать, что C++ mod возвращает неверный ответ, может быть более разумным сказать, что мода не возвращает ожидаемого ответа. Небеса запрещают вам находить ошибку в моде после всех этих лет. : D – therainmaker