«Настоящее» вещественное число не может быть представлено в памяти классического компьютера
- Учитывая, что вещественных чисел бесконечно много, было бы странно пытаться их представить в конечной памяти компьютера. Строго говоря, даже все натуральные числа представить нельзя.
Георгий Курячий да ладно бы все. Самый обычный корень из двух представить нельзя…
Часто эти числа записываются в виде 1,2345·exp₁₀³
- Никогда такой записи не видел.
Георгий Курячий В учебниках видал, гуглится
Представим число 155.625 в виде двоичного числа с плавающей точкой, для этого разложим заданное число по двоичным разрядам:
- Чисто практически удобнее найти степень двойки, умножение на которую даст целое число (или просто нужное количество цифр после точки), умножить на нее, перевести _целое_ число в двоичную систему (это сумеет и обычный калькулятор) и поставить точку в нужном месте. Кстати, отсылка на числа с фиксированной точкой...
Георгий Курячий Только надо дополнительно доказывать, отчего так можно.
Не так давно я об этом на Хабре упоминал: https://habr.com/ru/companies/yadro/articles/889598/
никакого дополнительного кода, как при хранении целых чисел, не используется — от него мало толку.
- Потому что неявная единица до точки. При сложении и вычитании число надо двигать влево-вправо. А как это сделать для отрицательных чисел с неявной единицей? К тому же, большинство операций с дробными числами (умножение, деление, тригонометрия) сложные, и небольшой выкрутас со сложением, вычитанием особо не скажется.
Можно попробовать обучить сам процессор работать с вещественными числами — это, возможно, будет медленнее
- По скорости будет ровно тоже самое, схемотехника-то одинаковая. Тут скорее компромисс выделения "специальных" fpu-регистров под специальные нужды. Смешивать ли обычные вычисления с дробными, сохранять ли лишние регистры. Но в целом идея использовать регистры универсальным способом кажется более удобной.
- Вот только для разрядностей double и выше - числа перестают помещаться в обычные РОН.
Замечание: стоит вспомнить, что равенство вещественных — довольно сомнительное сравнение.
- Там в моей статье есть код на Си, иллюстрирующий эту проблему.
Д/З
- Как вариант - программа для запаковки - распаковки дробных чисел на знак, мантиссу и порядок. Или float-to-string подпрограммы.
