Деление на два - Division by two

В математике , деление на два или сократить вдвое также называется посредничество или dimidiation . Трактовка этой операции как операции, отличной от умножения и деления на другие числа, восходит к древним египтянам, чей алгоритм умножения использовал деление на два в качестве одного из основных шагов. Некоторые математики даже в шестнадцатом веке продолжали рассматривать деление пополам как отдельную операцию, и в современном компьютерном программировании ее часто продолжают рассматривать отдельно . Выполнить эту операцию просто в десятичной арифметике , в двоичной системе счисления, используемой в компьютерном программировании, и в других системах с четными числами .

Двоичный

В двоичной арифметике деление на два может выполняться с помощью операции сдвига битов, которая сдвигает число один на место вправо. Это форма оптимизации снижения прочности . Например, 1101001 в двоичном формате (десятичное число 105), смещенное на одну позицию вправо, будет равно 110100 (десятичное число 52): бит младшего разряда, 1, удаляется. Точно так же деление на любую степень двойки 2 k может выполняться путем сдвига вправо k позиций. Поскольку битовые сдвиги часто выполняются намного быстрее, чем деление, такая замена деления сдвигом может быть полезным шагом в оптимизации программы . Однако ради переносимости и удобочитаемости программного обеспечения часто лучше писать программы с использованием операции деления и доверять компилятору для выполнения этой замены. Пример из Common Lisp :

 (setq number #b1101001)   ; #b1101001  —  105
 (ash number -1)           ; #b0110100  —  105 >> 1 ⇒ 52
 (ash number -4)           ; #b0000110  —  105 >> 4 ≡ 105 / 2⁴ ⇒ 6

Приведенное выше утверждение, однако, не всегда верно , когда дело с делением подписанных двоичных чисел. Сдвиг вправо на 1 бит делит на два с округлением в меньшую сторону. Однако в некоторых языках деление двоичных чисел со знаком округляется до 0 (что, если результат отрицательный, означает округление в большую сторону). Например, Java является одним из таких языков: в Java -3 / 2оценивается -1как, тогда как -3 >> 1оценивается как -2. Таким образом, в этом случае компилятор не может оптимизировать деление на два, заменив его битовым сдвигом, когда дивиденд может быть отрицательным.

Двоичная с плавающей запятой

В двоичной арифметике с плавающей запятой деление на два может выполняться путем уменьшения показателя степени на единицу (если результат не является субнормальным числом ). Многие языки программирования предоставляют функции, которые можно использовать для деления числа с плавающей запятой на степень двойки. Например, язык программирования Java предоставляет метод java.lang.Math.scalbмасштабирования до степени двойки, а язык программирования C предоставляет функцию ldexpдля той же цели.

Десятичный

Следующий алгоритм предназначен для десятичных чисел. Однако его можно использовать в качестве модели для построения алгоритма взятия половины любого числа N в любой четной основе.

  • Запишите N , поставив слева ноль.
  • Просмотрите цифры N в перекрывающихся парах, записывая цифры результата из следующей таблицы.
Если первая цифра Даже Даже Даже Даже Даже Странный Странный Странный Странный Странный
И вторая цифра 0 или 1 2 или 3 4 или 5 6 или 7 8 или 9 0 или 1 2 или 3 4 или 5 6 или 7 8 или 9
Напишите 0 1 2 3 4 5 6 7 8 9

Пример: 1738/2 =?

Напишите 01738. Теперь займемся поиском результата.

  • 01: четная цифра, за которой следует 1, напишите 0.
  • 17: нечетная цифра, за которой следует 7, напишите 8.
  • 73: нечетная цифра, за которой следует 3, напишите 6.
  • 38: нечетная цифра, за которой следует 8, напишите 9.

Результат: 0869.

Из примера видно, что 0 - четное число .

Если последняя цифра N является нечетной цифрой следует добавить 0,5 к результату.

Смотрите также

  • Одна половина
  • Медиана , значение, которое разделяет набор значений данных на два равных подмножества.
  • Биссектриса , разделение геометрического объекта на две равные половины
  • Димидиация , геральдический метод соединения двух гербов путем разделения их рисунков на две части.

использованная литература