@LanskoyGames
У модераторов первое место, но только с конца...

Почему компьютеры используют двоичные числа в мантиссе IEEE754 вместо BCD или PDP?

Почему компьютеры используют числа с плавающей точкой вместо BCD или DPD?

Это не дубликат этого вопроса, так как здесь я говорю только про плавающие числа Почему компьютеры не используют двоично-десятичный формат для вычислений?.
Приведу пример на 64 битном double в fraction 52 бита, если в этих 52 битах использовать BCD, мы получим очень точные числа без ошибок округления(13 значащих цифр, в обычном double 15-17, но будут накапливающиеся погрешности…). FPU считает IEEE 754, но тогда можно также создать и BCDU для вычислений таких BCD с sign и exponent. Но почему так не делают?

Я знаю, что в десятичной системе мы можем делить только на 2 и 5, но это будет более полезно для людей, потому что мы используем десятичную систему, и даже 1/3 будет точнее в десятичной системе, чем в двоичной, потому что в двоичной системе наименьшая разница между числами составляет 0,015625, в десятичной — 0,000001.

Модератору: Вы написали, что ответ легко ищется поиском в интернете, но нигде я не нашел ответа на мой вопрос.
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
даже 1/3 будет точнее в десятичной системе, чем в двоичной

А давайте проверим.
В BCD упаковке мы получим 3.333333333333*10-1, ошибка будет 3.(3)*10-14
В двоичном представлении получим 1.0101010101010101010101010101010101010101010101010101*2-1 = 3.33333333333333314829616256247*10-1, ошибка 1.4829616256247*10-17
То есть, ошибка в двоичном представлении в 2000 раз меньше, чем в BCD. А накапливаться ошибка будет и там и там.
Да, и 52 бита мантиссы на самом деле дают 53 бита значения, поскольку лидирующая единица всегда опускается.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev
software engineer
Потому что BDC это не представление, а уже кодирование, упаковка.
Процессор не содержит инструкций по взаимодействию с таким представлением, поэтому вместо простой арифметической операции, тебе сперва придется декодировать числа, сохранить их где-то,затем снова закодировать.
Во-вторых тебе стоит попробовать построить обычный арифметический сумматор, чтобы понять как в принципе процессор считает числа. Вся арифметика основана на двоичной системе, а точнее на 0/1. И чтобы написать сумматор для BDC, потребуется куча лишних операций по декодированию таких чисел.
В результате в некотрых (не всех случаях), Ты сэкономишь чуть-чуть памяти, но количество операций для расчета увеличится в разы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы