Десятичные дроби в программировании - Компьютерные вопросы
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Десятичные дроби в программировании

Регистрация
24 Июн 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
Я плохо разбираюсь в низкоуровневом программировании, но я хочу задать этот вопрос. Вот ведь на Python или других языках программирования 0.1 + 0.2 = 3.000...004 (также с умножением и т.д.). Почему десятичные дроби в программировании не записывают так: каждый символ числа (цифры, точка для десятичных дробей) в 2 байта (16 бит), кол-во битов с единицей в значении значит какое число (только первые 10 битов из 2-х байтов) например только первый бит - единица, только два первых - двойка и так до 9-тки, если все 10, то 0, а если все 16 битов, то это точка. А кол-во символов в числе, записывается в BigInt переменную (как в Java или JavaScript). Для примера я напишу число 6703.42109 (одна строка - один символ; 1-ый байт, пробел, 2-ой пробел; в скобочках буду писать значение этих байтов):

11111100 00000000 (6)

11111110 00000000 (7)

0000000 00000000 (0)

1110000 00000000 (3)

11111111 11111111 (.)

1111000 00000000 (4)

11000000 00000000 (2)

10000000 00000000 (1)

00000000 00000000 (0)

11111111 10000000 (9)
 
Регистрация
26 Янв 2013
Сообщения
75
Репутация
0
Спасибо
0
Монет
0
Это во всех языках так. Число 0.3 в двоичной системе невозможно представить абсолютно точно, вот и получается такой диковинный результат
 
Регистрация
22 Июл 2013
Сообщения
92
Репутация
0
Спасибо
0
Монет
0
Это особенность реализации чисел с плавающей точкой и от языка не зависит, а только от оборудования.
Они были так задуманы для быстрой обработки при недостатке оперативной памяти.
Сейчас возможно было бы разумно перейти на числа с фиксированной точкой но обратная совместимость не пускает.
 
Регистрация
12 Окт 2013
Сообщения
86
Репутация
-3
Спасибо
0
Монет
0
В те далёкие времена, когда вычислительные машины были большими и медленными, компьютеры, предназначенные для финансовых расчётов поддерживали аппаратную реализацию специального формата дробных чисел: двоично-десятичные числа, предназначенные для точных вычислений с десятичными дробями. В них для записи десятичных цифр, знака числа и точки использовалось по 4 бита на символ. Т.е. в 1 байт записывалось 2 символа числа.

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

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