# Особенности представления и работы с действительными числами
Десятичный мир
Для начала представим себе, что данные в компьютерах хранятся в ячейках-"битах", каждое из которых может принимать 10 разных значений.
В таком случае очень легко хранить положительные целые числа: каждое число по цифрам записывается в ячейки памяти.
Реальный процессор может выполнять арифметические с такими числами, но есть проблема:
чем больше цифр в числах, которые он сможет складывать за одну операцию (
В реальности используется несколько подходов к хранению знака числа, вернее даже к хранению просто целых чисел.
Самый "популярный" в данный момент называется "дополнение до двойки" (
Итак, ровно в этом состоит идея: для хранения отрицательного числа используется положительное число .
Неотрицательные числа от 0000000000
до 4999999999
хранятся как есть.
А числа от 5000000000
до 9999999999
отдаются отрицательным числам,
причём превращается в , превращается в , и так далее,
превращается в... в .
Заметим, что отрицательных чисел "поместилось" на одно больше, чем положительных.
Вот примеры:
сложим и .
Далее
Сложим и .
В чём выгода такого подхода? Во-первых, используются все возможные значения (если знак хранить в первой цифре, то будут "потеряны" 80% чисел). Во-вторых, с таким подходом отрицательные числа ничем не отличаются от положительных и не требуется усложнения схем для организации арифметических операций с ними. По модулю отлично работают все арифметические операции, поэтому работать будут и вычитание, и умножение.
В реальных чипах используется двоичная система счисления, но в остальном всё устроенно именно так. Один бит — это двоичная цифра. И существуют числа разной длины — в 8, 16, 32 и 64 двоичных цифры. Это зависит от реальных чипов.
Итак, мы научились хранить целые числа. А как хранить действительные числа?
Можно, например, хранить десять цифр целой части и десять цифр дробной. Идея очень простая, но не очень полноценная. Обычное число Авогадро записать уже не получится.
Можно было хранить числитель и знаменатель дроби (рационального числа). Но кроме множества проблем это не решает проблемы с (ведь придётся хранить очень большое число, а, значит, нужно хранить много цифр).
Но если нужно уметь работать с числами вида , то может быть прямо так и хранить?
Скажем, хранить 15 цифр числа (плюс 1 цифра на знак) и 3 цифры степени (плюс снова 1 цифра на знак степени), в сумме 20 цифр, или "стандартное" длинное число.
В этом случае станет возможно работать с числами от до с точностью 15 значащих цифр.
Значащие цифры в такой записи называются
Заметим, что число Авогадро в виде может быть записано по-разному: и как , и как , и как ,
и даже парой совсем неудобных способов: , .
Желательно выбрать из всех таких представлений одно (каноническое).
Кажется заманчивым хранить мантиссу в виде обычного целого числа, например хранить число Авогадро в виде .
Но это не очень хорошо: в такой записи числа очень неудобно сравнивать: например попробуйте сравнить число Авогадро с числами , , или .
Чтобы числа было удобно сравнивать (и ещё по нескольким причинам), используют следующий подход.
Положительное число всегда можно домножить на такую степень десятки, чтобы целая часть лежала от 1 до 9.
Ровно такое представление и используют для записи, оно называется
Сравнивать числа в такой записи очень просто: например, если числа положительны, то нужно сначала сравнить показатели степени, а в случае, если они равны, сравнить мантиссы.
Кстати, мы ещё пропустили число 0. Его обычно хранят в виде , тогда для сравнения его с другими числами не потребуется дополнительных ухищрений.