Читать книгу "Код. Тайный язык информатики - Чарльз Петцольд"
Шрифт:
Интервал:
Закладка:
Предположим, что сумма денег, которой должна оперировать ваша компьютерная программа, никогда не превысит ±10 миллионов долларов. Другими словами, вам требуются значения от –9 999 999,99 до 9 999 999,99. Можно выделить по пять байт памяти для каждой сохраняемой суммы в долларах. Например, число –4 325 120,25 можно представить посредством пяти байт.
В шестнадцатеричном формате это эквивалентно следующей записи.
Обратите внимание: крайняя левая тетрада равна 1, то есть число является отрицательным. Это знаковый бит. Если бы число было положительным, то крайняя левая тетрада была бы равна 0. Для представления каждой цифры в числе требуется по четыре бита, а прочитать их можно непосредственно по шестнадцатеричным значениям, поскольку они совпадают с десятичными.
Для представления значений в диапазоне от –9 999 999,99 до 9 999 999,99 вам понадобится шесть байт: пять байт для десяти цифр и еще целый байт для знакового бита.
Такой формат записи дробных чисел называется записью с фиксированной точкой, поскольку после десятичного разделителя всегда следует определенное количество цифр, в нашем примере две. Важно: данные о положении этого разделителя не хранятся вместе с числом. Программам, работающим с числами в таком формате, необходимо сообщить, где находится этот разделитель. Вы можете создавать числа с любым количеством десятичных знаков, а также использовать их в одной и той же компьютерной программе. Однако любая часть программы, выполняющая над числами арифметические операции, должна знать, где находится десятичный разделитель.
Формат с фиксированной точкой хорошо работает только в том случае, если вы уверены, что числа не превысят размеры выделенных под них ячеек памяти, что вам не потребуется увеличивать количество десятичных знаков. Использование этого формата совершенно неуместно в ситуациях, когда числа могут стать слишком большими или маленькими. Предположим, вам нужно зарезервировать область памяти для хранения расстояний. Проблема в том, что эти расстояния могут значительно варьироваться. Расстояние от Земли до Солнца составляет 150 000 000 000 метров, а радиус атома водорода — 0,00000000005 метра. Для хранения значений в формате с фиксированной точкой, принадлежащих этому диапазону, придется выделить 12 байт памяти.
Возможно, мы сможем придумать более удобный способ хранения таких чисел, если вспомним, что ученые и инженеры выражают числа с помощью системы, называемой научной нотацией (экспоненциальная запись).
Научная нотация особенно полезна для представления очень больших и очень маленьких чисел, поскольку предусматривает использование степени числа 10, следовательно, позволяет обойтись без длинных строк нулей. В научной нотации следующие числа записываются следующим образом.
В этих двух примерах числа 4,9 и 2,6 называются дробной частью, или мантиссой (хотя этот термин более уместен для логарифмов). Однако я буду придерживаться компьютерной терминологии, называя этот фрагмент научной нотации значащей частью числа.
Порядок — это степень, в которую возводится число 10. В первом примере порядок равен 11, во втором — –10. Порядок показывает, на сколько мест был сдвинут десятичный разделитель в значащей части числа.
Существует соглашение, по которому значащая часть числа должна принадлежать интервалу от 1 (включительно) до 10. Несмотря на то что следующие числа равны, первый вариант представления является предпочтительным:
4,9 х 1011 = 49 х 1010 = 490 х 109 = 0,49 х 1012 = 0,049 х 1013.
Такая форма научной нотации иногда называется нормализованной[31].
Обратите внимание: знак показателя степени говорит только о порядке числа, но не о том, является ли оно отрицательным или положительным. Вот как выражаются отрицательные числа в научной нотации:
–5,8125 × 107 соответствует –58 125 000;
–5,8125 × 10–7 соответствует –0,00000058125.
В компьютерах вместо формата с фиксированной точкой используется формат с плавающей точкой, который идеально подходит для хранения малых и больших значений, поскольку основан на научной нотации. Однако применяемый в компьютерах формат с плавающей точкой подразумевает запись в научной нотации двоичных чисел, поэтому нам необходимо выяснить, как выглядят дробные числа в двоичном формате.
Все гораздо проще, чем может показаться. В десятичной записи числа цифры справа от десятичного разделителя соответствуют отрицательным степеням числа 10. В двоичной записи цифры справа от двоичного разделителя (который выглядит так же, как и десятичный) соответствуют отрицательным степеням числа 2. Давайте преобразуем двоичное число в десятичное.
101,1101 1 × 4 +
0 × 2 +
1 × 1 +
1 ÷ 2 +
1 : 4 +
0 : 8 +
1 : 16
Операции деления можно заменить умножением на отрицательные степени числа 2:
1 × 22 +
0 × 21 +
1 × 20 +
1 × 2–1 +
1 × 2–2 +
0 × 2–3 +
1 × 2–4.
Отрицательные степени числа 2 можно также рассчитать путем последовательного деления 1 на 2:
1 × 4 +
0 × 2 +
1 × 1 +
1 × 0,5 +
1 × 0,25 +
0 × 0,125 +
1 × 0,0625.
В результате этого вычисления находим, что десятичный эквивалент двоичного числа 101,1101 равен 5,8125.
В десятичной научной нотации нормализованная значащая часть числа должна быть больше или равна 1, но меньше 10. Таким же образом в двоичной научной нотации нормализованная значащая часть числа должна быть больше либо равна 1, но меньше числа 10, которое соответствует 2 в десятичной системе счисления. Выразим число в двоичной научной нотации.
101,1101 1,011101 × 22
Интересное следствие этого правила: слева от двоичного разделителя в нормализованном двоичном числе с плавающей точкой может стоять только 1.
У большинства современных компьютеров и программ, использующих числа с плавающей точкой, применяется стандарт, введенный в 1985 году Институтом инженеров электротехники и электроники (Institute of Electrical and Electronics Engineers, IEEE) и признанный Американским национальным институтом стандартов (American National Standards Institute, ANSI), — ANSI/IEEE Std 754–1985, стандарт IEEE для двоичной арифметики с плавающей точкой. В кратком описании этого стандарта, занимающем всего 18 страниц, хорошо изложены основы кодирования двоичных чисел с плавающей точкой.
Внимание!
Сайт сохраняет куки вашего браузера. Вы сможете в любой момент сделать закладку и продолжить прочтение книги «Код. Тайный язык информатики - Чарльз Петцольд», после закрытия браузера.