У меня есть вопрос о выполнении деления с остатком целых чисел в C / C ++. Говорят, что при делении между двумя целыми числами, если результат не может быть выражен как целое число, его часть, которая не является целым числом, удаляется в десятичном виде.
Например, int a = 17; а / = 3; /pseudo float a, получает значение 5.6666 ../ поэтому результат равен 5. Это результат нормального деления с остатком в арифметике одновременно из-за части после точки (6666 ..), которая фактически является делением остатка (2) на 3.
Это работает на моем компьютере, но это определенно надежно, или я должен объявить с помощью float, а затем привести к int с floor для безопасности? Что лучше для исполнения и безопасно?
Заранее спасибо.
Арифметическая операция над целыми числами в C ++ не зависит от компьютера.
Если a
а также b
целые числа, a / b
всегда даст вам целое число деления и a % b
всегда даст вам остаток от целочисленного деления.
С точки зрения производительности, вы можете взглянуть на этот вопрос StackOverflow, но это, кажется, зависит от архитектуры.
Вы должны использовать a / b
а также a % b
для целочисленного деления и остатка. Как говорит Леванс, они гарантированно предоставят вам «правильные» значения независимо от вашего оборудования (по крайней мере, если a
а также b
положительны). При использовании арифметики с плавающей запятой на результат могут влиять ошибки округления, которые также могут зависеть от аппаратного обеспечения.
Таким образом, вместо целого по модулю вы можете получить два числа с плавающей запятой, а затем умножить одно число с обратным делителем на число с плавающей запятой:
17.0 * 0.33 = 5.61
затем floor () в целое число и вычтите:
5.61 - 5 ----> 0.61
затем умножьте результат с обратным 0,33:
0.61 * 3 ------> 1.83
тогда ceil () это
2 ----> this is 17%3
Это в 14 раз медленнее, чем при использовании прямого модуля, согласно бенчмаркингу пользователя «Oseiskar».