У меня вопрос о выполнении деления с остатком целых чисел в C/C++. Говорят, что при операции деления между двумя целыми числами, если результат не может быть выражен как целое число, его часть, которая не является целым числом, удаляется десятичным числом. Например, int a = 17; а/= 3;/pseudo float a, получает значение 5.6666 .. /, поэтому результат равен 5. Это результат нормального деления с остатком в арифметике в то же время из-за части после точки (6666 ..), которая на самом деле разделение остатка (2) на 3. Это работает на моем компероле, но это определенно надежно или я должен объявить с поплавком, а затем бросить на int с полом для безопасного? Что лучше для perfonmance и безопасно? Спасибо заранее.C++ определенность Integer Division с остатком
ответ
Таким образом, вместо того, чтобы целое число по модулю, вы можете получить два поплавки затем умножить один поплавок с обратной делителя:
17.0 * 0.33 = 5.61
затем пол() его в целое число и вычитаем:
5.61 - 5 ----> 0.61
затем умножить результат с обратным 0,33:
0.61 * 3 ------> 1.83
затем CEIL() это
2 ----> this is 17%3
Это в 14 раз медленнее, чем при использовании прямого модуля, в соответствии с бенчмаркингом пользователя «Oseiskar».
Арифметическая операция над целыми числами в C++ не зависит от компьютера.
Если a
и b
- целые числа, a/b
всегда даст вам целочисленное частное от деления, а a % b
всегда даст вам остаток от целочисленного деления.
С точки зрения производительности вы можете взглянуть на this StackOverflow question, но, похоже, это зависит от архитектуры.
Вы должны использовать a/b
и a % b
для целочисленного деления и остатка. Как говорит Леванс, они гарантированно дают вам «правильные» значения независимо от вашего оборудования (по крайней мере, если a
и b
положительны). С арифметикой с плавающей запятой на результат могут влиять ошибки округления, которые также могут быть зависимыми от оборудования.
- 1. Round with integer division
- 2. SQL Integer Division Remainder
- 3. ARM Integer Division Algorithm
- 4. ARM Unsigned Integer Division подпрограмма
- 5. Unsigned Integer Division ARM Cortex-M0 + Assembly
- 6. Модуль Python совпадает с остатком?
- 7. C программирование: Interval Division
- 8. сгонять номера с остатком
- 9. Десятичная точка с остатком
- 10. C++ Long Division
- 11. C++ division by 0
- 12. Ошибка C++ Division?
- 13. Prolog определенность - группировка факты
- 14. Разделение с остатком в php?
- 15. Результаты Weird Division (C++/Xcode)
- 16. C# Math Issue With Division
- 17. Sentences division
- 18. Tetrahedron Division
- 19. C#/.NET: получить все окна с остатком на верхнем флаге
- 20. Определяет ли определенность реализации символа std :: string?
- 21. Проблема с остатком Codeigniter с позвоночником
- 22. C++ Integer [?]
- 23. Pandas - Multiindex Division [т. Division by Group]
- 24. TableRow division
- 25. Division оператор в PHP
- 26. BigDecimal division
- 27. String division
- 28. Python division
- 29. Php Division остатки & Массивы
- 30. C/C++ Integer Операция
Почему вы думаете, что это быстрее или лучше, чем 'a% b' каким-либо образом? – oseiskar
Я сказал, «может быть», не скамейка. –
Пример: 65536% 255 может составлять сотни циклов. Но здесь только функции пола и потолка занимают некоторое время. Другие - только умножения и вычитания. –