Главная страница
Навигация по странице:

  • Десятичная цифра Двоичное значение

  • кр гаряев. Чарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе. Книга принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании


    Скачать 6.11 Mb.
    НазваниеКнига принадлежит Контакты владельца Культовая книга талантливого преподавателя стала для многих первым уверенным шагом в программировании
    Анкоркр гаряев
    Дата19.10.2022
    Размер6.11 Mb.
    Формат файлаpdf
    Имя файлаЧарльз Петцольд - Код_ тайный язык информатики-Манн, Иванов и Фе.pdf
    ТипКнига
    #743064
    страница26 из 28
    1   ...   20   21   22   23   24   25   26   27   28
    Число
    битов
    Диапазон целых
    положительных чисел
    Диапазон целых
    отрицательных чисел
    8
    От 0 до 255
    От –128 до 127 16
    От 0 до 65 535
    От –32 768 до 32 767 32
    От 0 до 4 294 967 295
    От –2 147 483 648 до 2 147 483 647
    Однако на этом мы и остановились. Помимо целых чисел математики так- же различают рациональные числа, которые могут быть представлены в каче- стве отношения двух целых чисел. Это отношение также называется дробью.

    388
    Код
    Например, дробь ¾ — рациональное число, отношение чисел 3 и 4. Это число также можно записать в виде десятичной дроби: 0,75. Десятичная дробь оста- ется отношением двух чисел, в данном случае 75/100.
    В главе 7 рассказывалось, что в десятичной системе счисления цифры сле- ва от десятичного разделителя являются множителями целых положительных степеней числа 10, а цифры справа — множителями целых отрицательных степеней числа 10. В одном из примеров я показал, что число 42 705,684 равно:
    4 × 10 000 +
    2 × 1000 +
    7 × 100 +
    0 × 10 +
    5 × 1 +
    6 : 10 +
    8 : 100 +
    4 : 1000.
    Обратите внимание на знаки деления. Затем я представил эту последова- тельность операций без деления:
    4 × 10 000 +
    2 × 1000 +
    7 × 100 +
    0 × 10 +
    5 × 1 +
    6 × 0,1 +
    8 × 0,01 +
    4 × 0,001.
    И наконец, отобразил это число, используя степени числа 10:
    4 × 10 4
    +
    2 × 10 3
    +
    7 × 10 2
    +
    0 × 10 1
    +
    5 × 10 0
    +
    6 × 10
    –1
    +
    8 × 10
    –2
    +
    4 × 10
    –3

    Глава 23. Фиксированная точка, плавающая точка
    389
    Существуют рациональные числа, которые не так легко представить в виде десятичной дроби, например ⅓. Если вы разделите 1 на 3, то получите следующее.
    0,33333333333333333333333333333333333333333333333333333…
    И так до бесконечности. Подобная дробь называется периодической и за- писывается 0,(3). Несмотря на то что запись числа ⅓ в виде десятичной дро- би выглядит неуклюже, это число по-прежнему является рациональным, по- скольку это отношение двух целых чисел. Вот еще один пример: отношение
    1
    /
    7
    можно записать в виде десятичной дроби.
    0,1428571428571428571428571428571428571428571428571428571…
    Или 0,142857.
    Иррациональные числа — это числа, которые нельзя выразить в виде от- ношения двух целых чисел, значит, десятичная дробь продолжается бесконеч- но без повторяющихся последовательностей цифр. К числам такого типа от- носится квадратный корень из 2.
    √2 ≈ 1,41421356237309504880168872420969807856967187537695…
    Квадратный корень из 2 — решение следующего алгебраического уравнения:
    x
    2
    – 2 = 0.
    Если число не является решением какого-либо алгебраического уравне- ния с целочисленными коэффициентами, оно называется трансцендентным.
    (Все трансцендентные числа иррациональны, однако не все иррациональные числа трансцендентны.) К трансцендентным числам относится число π, пред- ставляющее отношение длины окружности к ее диаметру и приблизительно равное следующему.
    3,1415926535897932846264338327950288419716939937511…
    Еще одним трансцендентным числом является e, к которому стремится выражение:
    (1 + 1n)
    n

    390
    Код при n, стремящемся к бесконечности. Данное число приблизительно равно следующему.
    2,71828182845904523536028747135266249775724709369996…
    Все числа, о которых мы говорили, то есть рациональные и иррациональ- ные, называются действительными, или вещественными. Это обозначение отличает их от мнимых — квадратных корней из отрицательных чисел. Комп-
    лексные числа — это комбинации мнимых и вещественных чисел. Несмотря на свое название, мнимые числа существуют и используются, например при решении некоторых сложных задач по электронике.
    Мы привыкли считать, что числовой ряд непрерывен. Если вы дадите два рациональных числа, я определю, какое число находится между ними. Для это- го достаточно найти их среднее арифметическое. Однако цифровые компьюте- ры не могут работать с континуумами. Биты могут быть равны либо 0, либо 1, меж ду которыми нет больше никаких значений. Так что цифровые компьютеры могут иметь дело только с дискретными значениями. Количество дискретных значений, которые вы можете представить, напрямую связано с количеством доступных битов. Например, в ячейках емкостью 32 бита можно хранить поло- жительные целые числа в диапазоне от 0 до 4 294 967 295. При необходимости сохранить значение 4,5 придется пересмотреть этот подход и действовать иначе.
    Можно ли представить дробные значения в двоичном формате? Да, мож- но. Вероятно, самый простой подход — использование двоично-десятичного кода (BCD). Как говорилось в главе 19, кодировка BCD позволяет записать десятичные числа в двоичном формате. Для кодирования каждой десятичной цифры (0, 1, 2, 3, 4, 5, 6, 7, 8 и 9) требуется четыре бита.
    Десятичная цифра
    Двоичное значение
    0 0000 1
    0001 2
    0010 3
    0011 4
    0100 5
    0101 6
    0110 7
    0111 8
    1000 9
    1001

    Глава 23. Фиксированная точка, плавающая точка
    391
    Формат BCD особенно полезен в компьютерных программах, которые ра- ботают с денежными суммами. Самые очевидные примеры — программы для банков и страховых компаний; многие дробные числа в них предусматривают не более двух знаков после десятичного разделителя.
    Как правило, для хранения двух BCD-цифр достаточно одного байта.
    Такая система записи иногда называется упакованным кодом ВСD. В такой кодировке не используется дополнение до двух. По этой причине в случае упакованного кода BCD для указания того, является ли число положитель- ным или отрицательным, обычно требуется дополнительный бит, называе- мый знаковым битом. Поскольку для хранения BCD-значения удобно вы- делять целое число байтов, под бит знака обычно отводится четыре или восемь бит памяти.
    Предположим, что сумма денег, которой должна оперировать ваша ком- пьютерная программа, никогда не превысит ±10 миллионов долларов. Другими словами, вам требуются значения от –9 999 999,99 до 9 999 999,99. Можно выде- лить по пять байт памяти для каждой сохраняемой суммы в долларах. Напри- мер, число –4 325 120,25 можно представить посредством пяти байт.
    00010100 00110010 01010001 00100000 00100101
    В шестнадцатеричном формате это эквивалентно следующей записи.
    14h 32h 51h 20h 25h
    Обратите внимание: крайняя левая тетрада равна 1, то есть число явля- ется отрицательным. Это знаковый бит. Если бы число было положительным, то крайняя левая тетрада была бы равна 0. Для представления каждой цифры в числе требуется по четыре бита, а прочитать их можно непосредственно по шестнадцатеричным значениям, поскольку они совпадают с десятичными.
    Для представления значений в диапазоне от –9 999 999,99 до 9 999 999,99 вам понадобится шесть байт: пять байт для десяти цифр и еще целый байт для знакового бита.
    Такой формат записи дробных чисел называется записью с фиксирован-
    ной точкой, поскольку после десятичного разделителя всегда следует опреде- ленное количество цифр, в нашем примере две. Важно: данные о положении этого разделителя не хранятся вместе с числом. Программам, работающим с числами в таком формате, необходимо сообщить, где находится этот разде- литель. Вы можете создавать числа с любым количеством десятичных знаков, а также использовать их в одной и той же компьютерной программе. Однако

    392
    Код любая часть программы, выполняющая над числами арифметические опера- ции, должна знать, где находится десятичный разделитель.
    Формат с фиксированной точкой хорошо работает только в том случае, если вы уверены, что числа не превысят размеры выделенных под них яче- ек памяти, что вам не потребуется увеличивать количество десятичных зна- ков. Использование этого формата совершенно неуместно в ситуациях, когда числа могут стать слишком большими или маленькими. Предположим, вам нужно зарезервировать область памяти для хранения расстояний. Пробле- ма в том, что эти расстояния могут значительно варьироваться. Расстояние от Земли до Солнца составляет 150 000 000 000 метров, а радиус атома водоро- да — 0,00000000005 метра. Для хранения значений в формате с фиксированной точкой, принадлежащих этому диапазону, придется выделить 12 байт памяти.
    Возможно, мы сможем придумать более удобный способ хранения таких чисел, если вспомним, что ученые и инженеры выражают числа с помощью сис темы, называемой научной нотацией (экспоненциальная запись).
    Научная нотация особенно полезна для представления очень больших и очень маленьких чисел, поскольку предусматривает использование степени числа 10, следовательно, позволяет обойтись без длинных строк нулей. В на- учной нотации следующие числа записываются следующим образом.
    490 000 000 000 4,9 × 10 11 0,00000000026 2,6 × 10
    –10
    В этих двух примерах числа 4,9 и 2,6 называются дробной частью, или
    мантиссой (хотя этот термин более уместен для логарифмов). Однако я буду придерживаться компьютерной терминологии, называя этот фрагмент науч- ной нотации значащей частью числа.
    Порядок — это степень, в которую возводится число 10. В первом приме- ре порядок равен 11, во втором — –10. Порядок показывает, на сколько мест был сдвинут десятичный разделитель в значащей части числа.
    Существует соглашение, по которому значащая часть числа должна при- надлежать интервалу от 1 (включительно) до 10. Несмотря на то что следую- щие числа равны, первый вариант представления является предпочтительным:
    4,9 х 10 11
    = 49 х 10 10
    = 490 х 10 9
    = 0,49 х 10 12
    = 0,049 х 10 13
    Такая форма научной нотации иногда называется нормализованной *.
    * А также экспоненциальной записью или записью с мантиссой. Прим. науч. ред.

    Глава 23. Фиксированная точка, плавающая точка
    393
    Обратите внимание: знак показателя степени говорит только о порядке числа, но не о том, является ли оно отрицательным или положительным. Вот как выражаются отрицательные числа в научной нотации:
    –5,8125 × 10 7 соответствует –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 × 2 2
    +
    0 × 2 1
    +
    1 × 2 0
    +
    1 × 2
    –1
    +
    1 × 2
    –2
    +
    0 × 2
    –3
    +
    1 × 2
    –4

    394
    Код
    Отрицательные степени числа 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 × 2 2
    Интересное следствие этого правила: слева от двоичного разделителя в нор- мализованном двоичном числе с плавающей точкой может стоять только 1.
    У большинства современных компьютеров и программ, использующих числа с плавающей точкой, применяется стандарт, введенный в 1985 году
    Инс титутом инженеров электротехники и электроники (Institute of Electrical and Electronics Engineers, IEEE) и признанный Американским националь- ным институтом стандартов (American National Standards Institute, ANSI), —
    ANSI/IEEE Std 754–1985, стандарт IEEE для двоичной арифметики с плавающей
    точкой. В кратком описании этого стандарта, занимающем всего 18 страниц, хорошо изложены основы кодирования двоичных чисел с плавающей точкой.
    Стандарт IEEE предусматривает два основных формата: число одинарной
    точности, занимающее в памяти четыре байта, и число двойной точности, занимающее восемь байт.
    Сначала рассмотрим число одинарной точности. Оно состоит из трех час тей: один бит отводится для знака (0 используется для положительного числа, а 1 — для отрицательного), восемь бит — для порядка, а 23 бита — для дробной значащей части числа, в которой самый младший бит — край- ний справа.

    Глава 23. Фиксированная точка, плавающая точка
    395 1 знаковый бит (s)
    8 битов порядка (e)
    23 бита дробной значащей части (f)
    Итого 32 бита, или четыре байта. Поскольку в значащей части нормали- зованного двоичного числа с плавающей точкой слева от двоичного раздели- теля всегда стоит 1, соответствующий ей бит не включается при сохранении числа в формате IEEE. Сохраняется только 23-битная дробная часть. Несмо- тря на то что для хранения значащей части числа используется только 23 бита, считается, что точность равна 24 битам. Чуть позже мы разберемся в том, что это значит.
    Значение 8-битного порядка находится в диапазоне от 0 до 255. Такой по- рядок называется смещенным. Для нахождения истинного значения порядка с учетом знака необходимо вычесть из него число, называемое смещением. Для чисел одинарной точности с плавающей точкой смещение порядка равно 127.
    Значения порядка 0 и 255 используются в особых случаях, о которых рас- скажу чуть позже. Если значение порядка принадлежит диапазону от 1 до 254, то число, представленное конкретными значениями s (бит знака), e (порядок) и f (дробная часть), равно:
    (–1)
    s
    × 1,f × 2
    е − 127
    Выражение (–1)
    s
    используется для определения знака числа. Если s рав- но 0, то число положительное (поскольку любое число в степени 0 равно 1), если s равно 1, то число отрицательное (поскольку –1 в степени 1 равно –1).
    Следующая часть выражения 1,f представляет 1, за которой следует дво- ичный разделитель и 23-битная дробная значащая часть. Все это умножается на 2, возведенное в степень, значением которой является разность храняще- гося в памяти 8-битного смещенного порядка и числа 127.
    Я не упомянул о способе выражения такого распространенного числа, как 0. Похоже, о нем мы и забыли. Для этого предусмотрено несколько осо- бых случаев:
    ȣ если e равно 0, f равно 0, то число равно 0; как правило, для представления числа 0 во все 32 бита записываются нули, однако бит знака может быть равен 1, и в этом случае число интерпретируется как отрицательный
    ноль; бит может обозначать очень маленькое отрицательное число, для представления которого с одинарной точностью доступных цифр и по- рядков недостаточно;

    396
    Код
    ȣ если e равно 0, а f не равно 0, то число является действительным, но не нор- мализованным:
    (–1)
    s
    × 0,f × 2
    –127
    ;
    обратите внимание на 0 слева от двоичного разделителя значащей части;
    ȣ если e равно 255, а f равно 0, то число символизирует положительную или отрицательную бесконечность — в зависимости от знака s;
    ȣ если e равно 255, а f не равно 0, то значение считается «не числом» и обо- значается аббревиатурой NaN (Not a Number — «не число»); NaN может указывать на неизвестное число или на результат недопустимой матема- тической операции.
    Наименьшее нормализованное положительное или отрицательное дво- ичное число, которое можно представить с одинарной точностью в формате с плавающей точкой, следующее:
    1,00000000000000000000000
    ДВА
    × 2
    –126
    В этом числе после двоичного разделителя следуют 23 двоичных нуля.
    Наибольшее нормализованное положительное или отрицательное двоичное число, которое можно представить с одинарной точностью в формате с пла- вающей точкой, следующее:
    1,11111111111111111111111
    ДВА
    × 2 127
    В десятичной системе счисления эти два числа приблизительно равны
    1,175494351 × 10
    –38
    и 3,402823466 × 10 38
    . Именно этими числами ограничива- ется диапазон чисел с плавающей точкой одинарной точности.
    Вероятно, вы помните, что десять двоичных цифр примерно эквивалент- ны трем десятичным цифрам. Под этим подразумеваю, что двоичное число, состоящее из десяти единиц, которое соответствует числу 3FFh в шестнадца- теричном формате и 1023 в десятичном, приблизительно равно числу из трех девяток, то есть 999. Таким образом:
    2 10
    ≈ 10 3
    Из этого соотношения следует, что 24-битное двоичное число одинар- ной точности в формате с плавающей точкой приблизительно эквивалентно

    Глава 23. Фиксированная точка, плавающая точка
    397
    десятичному числу, состоящему из семи цифр. По этой причине считается, что число одинарной точности в формате с плавающей точкой имеет точность до 24 битов, или около семи десятичных знаков. Что это значит?
    Точность числа с фиксированной точкой очевидна. Например, денежная сумма, выраженная в виде числа с фиксированной точкой, имеющего два де- сятичных знака, определена с точностью до цента. Однако о числах с плаваю- щей точкой мы не можем сказать ничего подобного. В зависимости от значе- ния порядка число с плавающей точкой может иметь точность до долей цента или до десятков долларов.
    Правильнее было бы сказать, что число одинарной точности с плаваю- щей точкой имеет точность до одной части из 2 24
    (одной части из 16 777 216, примерно до шести частей из 100 миллионов). Что это значит
    1   ...   20   21   22   23   24   25   26   27   28


    написать администратору сайта