Анимация
JavaScript
|
Главная Библионтека / S е / 1 8 23 1 11 52 Знаковый бит равен О для положительных чисел и 1 для отрицательньк. Смещенный показатель степени е и дробная часть / представляют собой величины, старший бит которых находится слева. Числа с плавающей точкой кодируются в соответствии со стандартом ШЕЕ так, как показано ниже. ЧИСЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ Бог создал целые числа; все остальные - дело рук человеческих. Леопольд Кронекер (Leopold Кгопескег) Выполнение операций над числами с плавающей точкой с помощью целочисленной арифметики и логических команд - предложение далеко не лучщее. Особенно это относится к правилам и форматам стандарта ШЕЕ Standard for Binary Floating-Point Arithmetic, ШЕЕ Std. 754-1985, общеизвестного как "ШЕЕ-арифметика". В этой арифметике имеется число NaN (not а number, не число) и бесконечности, которые представляют собой частные случаи практически для всех операций. В ней есть плюс ноль и минус ноль, которые должны быть эквивалентны при сравнении, кстати имеющем в ШЕЕ-арифметике четвертый возможный результат- "неупорядочено". Старший значащий бит дроби в "нормальных" числах явно не участвует, но участвует в "денормализован-ных" и "субнормальных" числах. Дробные части представлены в виде обычных чисел со знаком, в то время как показатели степени - в смещенном виде. На все это, конечно, есть свои причины, но в результате получаются программы, заполненные условными переходами, которые очень сложно эффективно реализовать. В данной главе предполагается, что читатель немного знаком со стандартом ШЕЕ, так что о нем будет сказано предельно коротко. 15.1. Формат IEEE Ограничимся рассмотрением чисел одинарной и двойной точности (32 и 64 бита), описанных в ШЕЕ 754. В стандарте представлены также "расширенный одинарный" и "расширенный двойной" форматы, но их описание весьма неточно в связи с тем, что ряд деталей зависит от реализации (например, ширина показателя степени не определена стандартом). Ниже показаны одинарный и двойной форматы чисел с плавающей точкой. Формат Формат с одинарной точностью с двойной точностью
В качестве примера рассмотрим кодирование числа л в формате с одинарной точностью. В соответствии с [38], в двоичном представлении л =» 11.0010 0100 0011 1111 ОНО 1010 1000 1000 1000 0101 10100011 0000 10... Эта величина находится в диапазоне "нормализованных" чисел, представленном третьей строкой приведенной выше таблицы. Старший единичный бит числа л опускается, поскольку ведущий единичный бит не хранится при кодировании нормализованных чисел. Чтобы двоичная точка размещалась в правильном месте, показатель степени е -127 должен быть равен 1, так что е = 128. Таким образом, представление числа л выглядит как о 10000000 10010010000111111011011 или в шестнадцатеричной записи: 40490FDB, где дробь округлена до ближайшего представимого числа. Числа, для которых \ <е< 254, называются "нормализованными". Старший бит таких чисел не хранится явно. Ненулевые числа с е = 0 называются "денормализованными", и их старший бит хранится в представлении числа в явном виде. Такая схема иногда называется схемой с "постепенной потерей значимости" (gradual underflow). В табл. 15.1 приведены некоторые крайние значения из различных диапазонов чисел с плавающей точкой. "Максимальное целое" в приведенной таблице означает наибольшее целое число, такое, что все целые числа, не превосходящие его по абсолютному значению, представимы в виде чисел с плавающей точкой точно; следующее за ним число уже должно быть округлено. Таблица 15.1. Некоторые предельные значения чисел с плавающей точкой
Для нормализованных чисел единица в последней позиции представляет собой относительное значение в диапазоне от l/2" до 1/2 (примерно от 5.96x10-* до 1.19x10-) для одинарной точности и от l/2" до l/2" (примерно от 1.11x10"" до 2.22x10"") для двойной точности. Максимальная "относительная ошибка" при округлении к ближайшему числу составляет половину приведенной величины. Диапазон целых чисел, точно представимых в формате с плавающей точкой, составляет от -2"* до +2" (т.е. от-16777216 до +16777216) для одинарной точности и от -2" до +2" (от -9007199254740992 до +9007199254740992) для двойной точности. Конечно, некоторые целые числа вне этого диапазона также могут быть представлены точно, например большие степени 2; однако указанные диапазоны являются максимальными диапазонами, все числа которых представимы точно. Замена деления на константу умножением может быть вьшолнена с полной (ШЕЕ) точностью только для чисел, для которых соответствующие множители могут быть точно представлены в формате с плавающей точкой. Это степени 2 от -127 до 127 для одинарной точности и от -1023 до 1023 для двойной. Заметим, что числа 2"" и 2-°" являются денормализованными, так что их использования лучше избегать на машинах, которые недостаточно эффективно реализуют операции над денормализованными числами. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 [ 76 ] 77 78 79 80 81 82 83 84 85 86 87 |