@Brilliancepride

В каких случаях логичней чтобы получить половину умножать на 1/2, а в каких делить на 2?

Часто вижу, что для того, чтобы разделить какое-то число, используют дробь 1/2, то есть умножают на 1/2, но очень редко вижу, чтобы использовали деление на 2, разве делить на 2 не более логично, элегантно и понятней для взгляда?
  • Вопрос задан
  • 276 просмотров
Решения вопроса 5
@res2001
Developer, ex-admin
Есть такие микроконтроллеры, где нет аппаратного деления. Оно там реализовывается программно и работает оооочень долго. Вот прям заметно дольше. И если деление на константу идет в цикле, то в таком случае выгоднее один раз перед циклом вычислить 1/2, а затем умножать на результат деления. 1/2 тут для примера, конечно.
С подобными процами лично сталкивался и был неприятно удивлен фактом такой просадки производительности на делении.
В общем случае, даже на современных настольных процах от интел или амд операция деления выполняется дольше умножения. Счет идет на несколько процессорных тактов. Иногда это может играть роль.

Если же речь о целочисленном делении на 2, то тут эта операция заменяется сдвигом вправо на 1 бит, что работает быстрее и умножения и деления. Впрочем подобные вещи компилятор сам в состоянии сделать при включенной оптимизации.
Ответ написан
Комментировать
Никогда если честно не видел, чтобы умножали на 0.5 там, где нужно поделить на 2.

В теории, если у тебя очень глупый компилятор, то умножение на 0.5 будет быстрее, чем деление на 2.

Ещё это может иметь смысл, если у тебя есть число типа int, и ты хочешь его поделить на два, и чтобы в результате получилось число типа double. Тогда умножение на 0.5 будет компактнее, чем приведение типов явно.

В общем нужно смотреть на конкретную ситуацию. А математического смысла за этим не стоит
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Возможно это не от математики а от практики программирования идет. Когда работают в вещественных числах (float, double) то умножают на 0.5.

А если какой-то особый случай и надо работать с рациональными дробями вида 3/15, 7/11 то подключают тип Rational и в нем получают более точный результат базовой арифметики чем например double.
Ответ написан
Комментировать
Griboks
@Griboks
В старых книгах высота шрифта была фиксирована. Поэтому для деления дробью приходилось уменьшать шрифт числителя примерно до 60%. Если у вас большая формула, то наглядней было бы записать её 100% шрифтом, домножив в конце на 1/2.
Ответ написан
@Mercury13
Программист на «си с крестами» и не только
ЦЕЛЫЕ ЧИСЛА / ФИКСИРОВАННАЯ ЗАПЯТАЯ
·0,5 в фиксированной запятой нет никакого смысла. /2 и арифметический сдвиг >>1 ведут себя немного по-разному на отрицательных числах, и как сейчас оптимизируют /2 с сохранением точности до бита — я не в курсе (Godbolt показывает пекло какое-то на пять команд — и оно быстрее, чем div?).

ДРОБНЫЕ ЧИСЛА
С /2 и ·0,5 никакой разницы, но второе быстрее. Если коэффициент не умещается в компьютерное дробное (⅓, например) — если нет никакого сакрального смысла в точности до бита, можно множить.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
otdameskapizm
@otdameskapizm
Помог ответ? Отметь решением...
Может они делят на 2, просто решают числитель умножить на 1 для красоты? Хмм....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы