1

Что значит, что в компьютере операция сложения не аддитивна?

Kromster
  • 13,809
  • 1
    а откуда такое предположение? – Grundy Dec 13 '16 at 16:14
  • 1
    Ну, при работе с плавающей арифметикой это действительно так. Сумма двух чисел может быть не равна их сумме :) – Zealint Dec 13 '16 at 16:31
  • 2
    А что означает слово «аддитивный» в вашем случае? Я знаю только свойства коммутативности, ассоциативности, наличия нейтрального и обратного элемента. – VladD Dec 14 '16 at 08:51

1 Answers1

4

Я подозреваю, что подобная формулировка не совсем корректна, потому что не ясно, что значит "в компьютере" и что значит "операция сложения". Но отвечу, как понял.

Каким бы ни был компьютер, его память ограничена. Если речь идёт о числах в регистрах процессора, то всегда существует максимальное число, а если прибавить к нему единицу, мы получим минимальное число, а вовсе не то, что ожидали. Скажем, у нас есть 8 бит со знаком. Максимальное число будет 0x7F = 127, прибавим единицу, получим 0x7F+1 = 0x80 = -128. Нарушено свойство аддитивности.

Далее, в плавающей арифметике ещё хуже. Самый простой пример: сложив большое и маленькое числа вместе, получим не их сумму, а снова получим большое число. Скажем, 1e30+1e-30=1e30.

То же можно сказать о длинной арифметике. Рано или поздно память кончится - и попытка сложить два числа завершится неудачей... однако тут уже вопрос философский, считать эту неудачу нарушением аддитивности или нет.

etki
  • 36,151
Zealint
  • 3,958
  • Какое отношение эти рассуждения имеют к аддитивности? Вы рассмотрели строго обратный процесс. – Akina Dec 13 '16 at 18:28