Бинарные, плавающие и современные компьютеры
Я много читал о поплавках и компьютерных операциях с плавающей запятой. Самый большой вопрос, который я вижу, когда читаю о них, - почему они так неточны? Я понимаю это потому, что двоичные числа не могут точно представлять все реальные числа, поэтому числа округляются до "наилучшего" приближения.
Мой вопрос в том, зная это, почему мы все еще используем двоичный код в качестве основы для компьютерных операций? Конечно, использование большего базового числа, чем 2, повысит точность операции с плавающей запятой экспоненциально, не так ли?
Каковы преимущества использования двоичной системы счисления для компьютеров в отличие от другой базы, и была ли когда-либо опробована другая база? Или это вообще возможно?
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 достаточно на данный момент.
За эти годы были построены компьютеры со схемой, основанной на устройствах с более чем 2 состояниями. Старый Советский Союз разработал серию компьютеров с 3-х состояниями устройств, и по крайней мере один американский производитель компьютеров в свое время предложил компьютеры с использованием 10-ти состояний устройств для арифметики.
- все компьютерные числа конечны, поэтому любое число, которое требует бесконечное число цифр не может быть точно представлено на компьютер, независимо от выбранного базового числа. Так что это касается pi, e, и большинство других реальных чисел.
- Какая бы база ни была выбрана, она будет иметь трудности, представляющие (конечно) некоторые дроби. Основание 2 может аппроксимировать только любую дробь с коэффициентом 3 в знаменателе, но основание 5 или основание 7 тоже.
Я подозреваю, что двоичный представление победило (пока) потому, что оно просто, как рассуждать, так и реализовывать с помощью современных электронных устройств.
Я голосую за то, чтобы мы перешли к рациональной системе хранения чисел. Два 32-битных интергера, которые будут оцениваться как P/q. умножение и деление будут действительно дешевыми операциями. Да, будут избыточные оценочные числа (1/2 = 2/4), но кто действительно использует полный динамический диапазон 64-битного двойника в любом случае.