Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет superhuman ([info]superhuman)
@ 2017-05-04 23:04:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Заборол дополнительный код. Действительно, код сложения остаётся таким же элегантным, как и для беззнаковых целых, а вычитание исключается вовсе.

Как можно догадаться? Без ничего - неясно, как. Но если начать с гипотезы, что некое представление отрицательных чисел (тем же битовым рядом) позволяет складывать невариабельным алгоритмом положительные и отрицательные числа и получать корректный ответ, то всё просто. Начать можно с инвертации (обратного кода), например, но выходит не то.

Вообще, лучше начать не с обращения произвольных чисел, а конкретно с единицы. Должно выполняться свойство 1 + -1 = 0, т.е. 1(0) + ?..? = (0) - в записи битов слева направо, естественно. Чтобы в нулевом бите получить 0, нужно добавить к единице 1, т.е. 1(0) + 1?..?, однако перенос даст единицу в первом бите, которую тоже надо анниглировать, т.е. 1(0) + 11?...?. И так далее, т.е. 1(0) + (1) = (0). Переполнение остаётся, ну и ладно, и неважно.

И сразу видно, что у отрицательных чисел в старших разрядах - периодическая единица. В сравнении с неотрицательными, где периодический ноль. Остальное - дело техники: единицу в периоде можно получить только инвертацией нуля в периоде. А на примере -1 видно, что нужно ещё накинуть один инкремент.

И, о чудо, а + -а = 0, и даже a + b даёт правильный результат для любых а и b. И никакого вычитания не нужно, и алгоритм сложения чётче, своп регистров не нужен, как для signed magnitude. Ибо в столбик работает вне зависимости, где стоит большее, сверху или снизу. Даже умножение практически без изменений переносится. Ну, для слов фиксированной длины ничего бы не менялось, вообще, но бесконечность этих последовательностей (= реализация на списках) вносит коррективы; здесь старший бит = бесконечный период.


(Добавить комментарий)


(Анонимно)
2017-05-05 00:29 (ссылка)
это было бы смешно, если бы не было так грустно

(Ответить) (Ветвь дискуссии)


[info]phantom
2017-05-05 09:24 (ссылка)
Не пойму, это робот, которому базу расширили? Или аноним, вечно недовольный чем-то? Сложно понять, когда стереотипными фразами.

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2017-05-05 09:54 (ссылка)
Похоже, что это ебнутый анон-копипастор.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]phantom
2017-05-05 10:53 (ссылка)
Похоже на робота. Сегодня мотал ленту, заметил ту же структуру коммента. Типа "это было бы ..., если бы не ..." - так что кто-то до корчевателя "дорос".

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2017-05-05 12:23 (ссылка)
из ебнутого анона, который может написать бота, и просто ебнутого анона, более вероятен последний

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2017-05-05 12:25 (ссылка)
это было бы ебануто, если бы не было так ботно

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]phantom
2017-05-05 12:29 (ссылка)
Это было бы, если бы только не.

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2017-05-05 16:53 (ссылка)
я бы выебал тебя в рот, но могу и в жопу

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]phantom
2017-05-07 13:08 (ссылка)
Это вряд ли, ты же бесхуй.

(Ответить) (Уровень выше)