Бинарные, плавающие и современные компьютеры


Я много читал о поплавках и компьютерных операциях с плавающей запятой. Самый большой вопрос, который я вижу, когда читаю о них, - почему они так неточны? Я понимаю это потому, что двоичные числа не могут точно представлять все реальные числа, поэтому числа округляются до "наилучшего" приближения.

Мой вопрос в том, зная это, почему мы все еще используем двоичный код в качестве основы для компьютерных операций? Конечно, использование большего базового числа, чем 2, повысит точность операции с плавающей запятой экспоненциально, не так ли?

Каковы преимущества использования двоичной системы счисления для компьютеров в отличие от другой базы, и была ли когда-либо опробована другая база? Или это вообще возможно?

10 27

10 ответов:

Компьютеры построены на транзисторах, которые имеют состояние "Включено" и состояние "выключено". Это соответствует высокому и низкому напряжению. Почти все цифровые интегральные схемы работают в этом двоичном режиме.

Игнорируя тот факт, что транзисторы просто работают таким образом, использование другой базы (например, базы 3) потребовало бы, чтобы эти схемы работали в состоянии промежуточного напряжения (или нескольких), а также 0V и их самого высокого рабочего напряжения. Это более сложно, и может привести к проблемам на высоких частотах - как вы можете сказать, является ли сигнал просто переходом между 2V и 0V, или на самом деле на 1V?

Когда мы спускаемся на уровень с плавающей точкой, мы (как nhahtdh упоминали в своем ответе) отображаем бесконечное пространство чисел на конечное пространство хранения. Это абсолютная гарантия того, что мы потеряем некоторую точность. Одно из преимуществ IEEE floats, однако, заключается в том, что точность зависит от величины значения.

Обновление: Вы следует также проверить Tunguska, троичный эмулятор компьютера. Он использует base-3 вместо base-2, что делает некоторые интересные (хотя и умопомрачительные) концепции.

Прежде всего: вы не можете представить все действительные числа, даже если используете, скажем, основание 100. Но ты уже знаешь это. Во всяком случае, это означает: неточность всегда будет возникать из-за "неспособности представить все действительные числа".

Теперь поговорим о "что могут принести вам высшие основания, когда вы занимаетесь математикой?": высшие основания приносят точно "ничего" с точки зрения точности. Почему?

Если вы хотите использовать базу 4, то 16-значное число базы 4 обеспечивает точно 416 разные ценности.

но вы можете получить то же самое количество различных значений из 32-значного числа base 2 (232 = 416).

Как уже говорилось в другом ответе: транзисторы могут быть либо включены, либо выключены. Таким образом, ваши недавно разработанные регистры base 4 должны быть абстракцией над (base 2) ON/OFF "битами". Это означает: используйте два "бита" для представления базовой цифры 4. Но вы все равно получите ровно 2N уровней, Потратив N 'бит' (или N / 2 основание-4 цифры). Вы можете получить лучшую точность, только потративбольше битов, а не увеличивая базу . В какой базе вы "воображаете / абстрагируете" свои числа (например, как printf может печатать эти числа base-2 в base-10) на самом деле просто вопрос абстракции, а не точности.

По существу, мы сопоставляем конечное пространство бесконечному множеству действительных чисел. Так что это даже не проблема базы в любом случае.

Основание 2 выбрано, как сказал Полином, по причине реализации, так как легче дифференцировать 2 уровня энергии.

Мы либо выбрасываем больше пространства, чтобы представить больше чисел / увеличить точность, либо ограничиваем диапазон, который мы хотим кодировать, или их смесь.

Он сводится к получению максимальной отдачи от доступной области чипа.

Если вы используете переключатели включения/выключения для представления чисел, вы не можете получить больше точности для каждого переключателя, чем с представлением base-2. Это просто потому, что N переключателей могут представлять 2^N величин независимо от того, что вы выбираете эти значения, чтобы быть. Были ранние машины, которые использовали базу 16 цифр с плавающей запятой, но каждая из них требовала 4 двоичных Бита, Поэтому общая точность на бит была такой же, как и база 2 (на самом деле несколько меньше из-за крайних случаев).

Если вы выбираете основание, которое не является степенью 2, точность, очевидно, теряется. Например, вам нужно 4 бита для представления одной десятичной цифры, но 6 из доступных значений этих 4 бит никогда не используются. Эта система называется двоично-десятичной и до сих пор используется время от времени, обычно при вычислениях с деньгами.

Многоуровневая логика могла бы эффективно реализовывать другие базы, но, по крайней мере, при современных чиповых технологиях, она оказывается очень дорого реализовать более 2-х уровней. Даже квантовые компьютеры проектируются, предполагая два квантовых уровня: квантовые биты или кубиты. Природа мира и математика-вот что делает ситуацию с плавающей точкой безнадежной. Существует иерархия действительных чисел целочисленных - > рациональных - > алгебраических - > трансцендентальных. Существует замечательное математическое доказательство, диагонализация Кантора, что большинство чисел, то есть" большая бесконечность", чем другие множества, Трансдендентальны. И все же, несмотря ни на что система с плавающей запятой, которую вы выберете, все равно будет иметь низкие рациональные числа без идеального представления (т. е. 1/3 в базе 10). Это наша Вселенная. Никакое количество умного аппаратного обеспечения не изменит его. Программное обеспечение может использовать и использует рациональные представления, сохраняя числитель и знаменатель в виде целых чисел. Однако с этими у вашего программиста связаны руки. Например, квадратный корень не является "закрытым"."Sqrt (2) не имеет рационального представления.

Там было исследование с помощью алгебраических чисел повторений и" ленивых " повторений произвольных реалов, которые производят больше цифр по мере необходимости. Большинство работ этого типа, по-видимому, относятся к вычислительной геометрии.

Ваш первый абзац имеет смысл, но второй не является секвитером. Большая база не будет иметь значения для точности.

Точность числа зависит от объема памяти, которая используется для него - например, 16 - битное двоичное число имеет ту же точность, что и базовое число 2 x 256-оба занимают одинаковое количество информации.

Смотрите обычную ссылку с плавающей точкой . для большей детализации - и это обобщает на все основания.

Да, компьютеры имеют были построены с использованием других баз - я знаю о тех, которые используют базу 10 (десятичную) cf wikipaedia

Да, есть / были компьютеры, которые используют не двоичные (т. е., кроме базовых 2 представлений и аритметических): десятичные компьютеры .

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

Я не ээ, поэтому все, что я скажу ниже, может быть совершенно неверным. Но...

Преимущество двоичного кода состоит в том, что он очень четко отображает различия между включенными/выключенными (или, точнее, высоким/низким напряжением) состояниями в реальных цепях. Попытка различить несколько напряжений, я думаю, представляет собой немного большую проблему.

Это может полностью исчезнуть, если квантовые компьютеры выйдут из лаборатории.

Есть 2 проблемы, возникающие из-за использования двоичных чисел с плавающей запятой для представления математических вещественных чисел-ну, есть, вероятно, гораздо больше проблем, но 2 достаточно на данный момент.

  1. все компьютерные числа конечны, поэтому любое число, которое требует бесконечное число цифр не может быть точно представлено на компьютер, независимо от выбранного базового числа. Так что это касается pi, e, и большинство других реальных чисел.
  2. Какая бы база ни была выбрана, она будет иметь трудности, представляющие (конечно) некоторые дроби. Основание 2 может аппроксимировать только любую дробь с коэффициентом 3 в знаменателе, но основание 5 или основание 7 тоже.
За эти годы были построены компьютеры со схемой, основанной на устройствах с более чем 2 состояниями. Старый Советский Союз разработал серию компьютеров с 3-х состояниями устройств, и по крайней мере один американский производитель компьютеров в свое время предложил компьютеры с использованием 10-ти состояний устройств для арифметики.

Я подозреваю, что двоичный представление победило (пока) потому, что оно просто, как рассуждать, так и реализовывать с помощью современных электронных устройств.

Я голосую за то, чтобы мы перешли к рациональной системе хранения чисел. Два 32-битных интергера, которые будут оцениваться как P/q. умножение и деление будут действительно дешевыми операциями. Да, будут избыточные оценочные числа (1/2 = 2/4), но кто действительно использует полный динамический диапазон 64-битного двойника в любом случае.

Я не инженер-электрик и не математик, поэтому примите это во внимание, когда я сделаю следующее заявление:

Все числа с плавающей запятой можно представить в виде целых чисел.