Искусство программирования на Си (984073), страница 74
Текст из файла (страница 74)
Но, как видно из получаРассмотрим число О, катарае в 8-битовом дваичиом иредстиалеиии ровно 00000000. Если один из операндов имеет тип довЫе, прсобрар р р смога ответа, это уже слишком поздно: операция делезовазь другой операнд в тип доцЫе. ния над целыми !ислами дает целое число нуль, Дааалиеиие да сдииииы Дапалиеиие да двух Если один.из операндов имеет тип Поа(, преобразо- который потом преобразуется в тип доцЫе н присваи- -0 соответствует 11111111, т.е. существует как +О, так и -0 Меняем значения битов на противоположное, получаем вать другой операнд в тип йоа(. вается левой части выражения. 11!11111 м добавляем единицу, получаем00000000 и „, „,„..., ...,„..., ...,,-...,-,.
„„,-.;, „,.;;;.,„,.: -„...„,.-,„з ам -. -,м а .а,з ам а; .;м а,м дииеииитеиыеие течатичееиие раиЗе~ы Ареефметииа ириииии имии еттитеты млечин 1 ° — $ 1 Часть Ш Глава 24 Мантиссу можно считать дробной частью, представ- Олин из форматов чисел с плавающси точкои в )ВМ ошибку потери значимости (ссзи длина нашей экспо- трех битов точности. В действительности некоторыс ленной в двоичном виде. Самый значащий бит имеет 8)мезп 390 (и аналогичных вычислительных машинах) ненты меньше 32 тыс. битов) и потерю точности (ссли операции приводят к потере лееньшего количества бизначсние 2', или 1/2, следующий бит — 2-', или 1/4, и состоит из! бита на поле знака, 7 битов на поле экспо- длина экспоненты меньше 32 тыс.
битов). тов, но всегда лучше предполагать наихудший вариант. тш. Экспонента представляет собой степень осиоиииих Ь, нснты и 24 битов на поле мантиссы. Основание числа на которую необходимо умножить мантиссу, чеобы с плавающей точкой составляет 16, что означает, что вы Нормализация Точность операции над числами с получить требуемое значение. Если с — значение харак- можете гарантировать точность только 21 бита из 24 плавающей точкой '!исло 0.001953125 (или 1/512) может быть прсдставлетеристикн (которая является целым числом), а т — (этот момент булет рассмотрен в следующем разделе значение мантиссы (которая всегда меньше единицы), "Нормализация"). Поэтому максимальная точность но несколькими способами: Какова же действительная точность операций над чисто значение числа с плавающей точкой равно еи'(г.
представляемых чисел булет единица, деленная на 2", 16 ех1/2 лами с плавающей точкой? Н> и что это значит? Предположим, что в данном т.с нз число. чуть превышающее два миллиона. 16 'х1/32 На современных вычислительных машинах при пропримере основание равно 16 Именно такое значение 7 битов поля экспоненты (характеристики) интср- 16"х1/512 ведении вычислений может производится расширение выбрали инженеры при разработке компьютера, и вы нс претируются как 8-бнтовое число со знаком, поэтому мантиссы, поэтому аппаратное обеспечение в дсйсзвиможете изменить это число. Следовательно, в рассмат- диапазон экспоненты составляет от -64 до +63 Это даст 16 'х(/8192 тельности не теряет того количества битов точности, ривасмом случае значение числа с плававшей точкой числа от хеинимкзьного 16ыдо максимального 16'", или и т.д.
которое указывалось ранее но вы не можетс полагчть будет равно р и/6, т.е. число 112.0 будет представлено прибзизительно от 8.6х10 " до 7.2х10"'. Поскольку Из всех этих представлении первым приведено пред- ся на то, что у вас в данном отношении современное в виде двоичной пробной части .11100000 и экспонен- мантисса может иметь любое дробное значение почти ставление, в котором мантисса максимальна. Если по- аппаратное обеспечение. Лучше просто вьшснить это.
ты 2, поскольку 112.0=(7/16)'16' Число 112.25 будет от 1 ло 1/16, то минимальное число составляет в дей- смотрсть на это значение в двоичном виде, то можно Каким образом? представлено в виде лвоичной дробной части (мантис- ствительности 5.4х10'". увидеть, что в первом представлении количество ведусы) .1! 101000 и экспоненты 2. Если формат имеет больше битов в кажлом поле, то ших нулей минимально Такое значение называется иор- ПР двп И тО4НОС И ЧИ ЕЛ "" а с плав ющей Доаигкитееочые тематическиерагдееы Лрифиетпка ороиэеигении то«ности ! ! Чаг ьщ Глава 24 РЬТ ВООНОВ,РЬТ ВЛО1Х,РЬТ ИЛИТ О1С,РЬТ О16) 1 Таблица 24.4.
Пределы точности для арифметики чисел с плавающей точкой. рггпгт( РЬТ Н1Й ЕХРчаа РЬТ Н1Н 10 КХР=адхп',РЬТ Н1Н ЕХР Рьт нти )о ехР); Нмл Значение рг1пат 1"РЬт ИЛХ ЕХРчао РЬт ИЛХ 10 ЕХР=14 и",РЬТ ИЛХ ЕХР, Р ' 1" чао РЬт ИЛХ 10 ЕХР-ааув",РЬТ ИЛХ ЕХР, Рьт поынов Модель округления чисел с плавающей точкой при сложении.
РЬТ НЛХ 10 ЕХР); рггпат(.РЬт млх=ае РЬт КР51Ьон=те РЬт Нти=аетп.,РЬТ НЛХ, -1 — не определена, РЬТ КР51ЬОН,РЬТ Н1Н); 0 — к нулю, ргапас( ' ОопЫе ргесгв1оп г1п" ) 1 рг1пст( ОВь нлнт 016=14 Овь О16=141п ОВЬ НЛНТ 016,ОВЬ О16); 2 — к лоложительнои бесконечности, рггпст( ОВЬ Н1Н КХР аа ОВЬ И1Н 10 КХР=141п ,ОВЬ М1Н ЕХР, 3 — к отрицательнои бесконечности. ОВЬ Н1Н 10 ЕХР); рггпа11*ОВЬ МЛХ ЕХР=аа ОВЬ ИЛХ 10 ЕХРчаа)п",ОВЬ НЛХ КХР, РЬТ ПАО!Х Экспонента в представлении чисел с плавающей точкой. Это може~ быть значение 2 или 1Б, а также ОВЬ НЛХ 10 ЕХР); любое другое значение, ко~орое заложили инженеры. Должно быть не менее 2. ргьпс(("ОВЬ НЛХ=ае ОВЬ КРКЬЬОИ=хе ОВЬ И!И=хе(п ,ОВЬ ИЛХ, РЬТ МАНТ О!С Количество цифр основания в представлении чисел с плавающей точкой (Иоа(, доцЫе, !опд допЫе).
ОВЬ ЕР51ЬОН,ОВЬ Н1Н); ОВЬ МАйт 010 рг1пат(" Ьопд ОопЫе ргесгагопе)п ); ЬОВЬ МАНТ 01С рггпат(*ЬОВЬ ИЛит ОТО=14 ЬОВЬ 016=141п ° , ГЬТ 0(С Точность в десятичных позициях в представлении чисел с плавающей точкой (Иова, Ооцб!е, 1опд 1ОВЬ НЛМТ О16,ЬОВЬ 016); ОВЬ О!С ОопЫе) Должно быть, ло крайней мере, б для Иоа! и 10 для Оооо!е и !опд ОопЫе.
ргьптт('ЬОВЬ Н1Н КХР=аа ЬОВЬ М1Н 10 ЕХР=а41в",ЬОВЬ Н1Н ЕХР, ЬОВЬ Н1Н 10 ЕХР)1 ЬОВЬ 016 ргьпат("ьовь нлх КХР=ац ьовь млх 10 ехр=ао)п",ьовь млх ехР, РЬТ М!и ЕХР Минимальная экспонента в представлении чисел с ллавающеи точкой с основанием РЬТ ЙА01Х (Иова, ЩЩ— Дини<лиме<ьние тематические раздет Лри«'мгмих и ирои Часть !П Таблица 24лд Примеры пределов для целых Таблица 24.8. Примеры пределов для чисел с Уход наблюдается в том случае, когда округление в ном г<редстаачснии ему соответствует 1234. Если в кончисеп. плавающей точкой типа (опя с(оцЫе.
сериях вычислений приводит к постепенному все боль- кретной среде тнп зйог( !п1 имеет длину 16 битов и мы шему счешснию вычисленного значения от действитсль- помешаем данное значение в переменную типа яйог1 !п(, Имя Значение Пмя Знач<ниг ного. Например, если А=0.55555555, а В=!.О, то впал- то чожно ли ожидать, что гле-то в памяти компьютера сйаг Ьл 8 ЮЫ <паш Шд 53, 64 не возможно, что А+В будет округлена до 1.5555556. находятся два последовательных байта, младший из сваг <пах 127 МЫ Ф9 15, 18, 19 Если из полученного числа вычесть В, то получится которых имеет значение 12, а старший — 34? сваг гп<п -127, -128 <дб! пхп ехр гЮ21, -16381 значение, немного отличающееся от значения А, с ко- Увы, нет. На некоторых типах вычислительных маислаг гпах 255 !0Ы пМп 1О ехр -307, -4931 торого мы начинали: 0.5555556.
Следовательно, ?А+В) — шин значения будут храниться в виде 12 ( 34, а на нсцсйаг гп<п -255, -256 Х(Ы п<зх ехр 1024, 16384 В А нс будет нулевым Поэтому цикл которых — в виде 34 ( 12. Эти представления называ- ются ат младшего к старшему и ат старшего к младшему зслаг и<ах 127 МЫ пах 10 ехр 308, 4932 1пе 1< (соответственно О(8-енд<ан и Гиде-гнаТан по книге "Путе- доиЫе Л=0.55555555; вс аг пип - !Еб! азах 1 797Б93е+ 308, Мам доиЫе 8=1.01 шествия Гулливера' Джонатана Свифта). ебг1 и<ах 327Б7 !с Ы ерв<|оп 2 220446е-16, 2.121398е-314, доиЫе С=О.О; А как насчет болылих чисел, которые занимают 32 вйг< пип -32767, -32768 5 342539е-318, 1 618855е-319 (к=О|(1<32000);х++) бита" Если в вашей среде тип !овв <п1 занимает 32 бита <п1 гпах 2147483647, 32767 ИЫ тт 2 225074е-308, 3.464203е-310, ( и вы устанавливаетс значение переменной типа (оив (п( <п| гп<п -2147483Б47, -2147483648, -32767, -32766 5 284429е-315, 7.588354е-320 + (л + в)) — В) — 0.55555555; равныч 305419896, то каким образом это зна <ение бу- 2147483647 опд и<ах дст храниться в памяти компьютера? Указанное значс- Всс пять сред работали на одном и том жс процсс- может в результате дать некоторое ошибочное значение.
нне в шестналцатиричной форме имеет вил 12345678, <опд т<п -2147483647, -2147483648 соре (п!е|, но под управлением разных операционных Чтобы определить, будет ли ухал оказывать влияние и в зависимости от архитектуры вычислительной маши 6 фя Доноенио<ееьниетеиатниеет ераи<ееи Ар и(хает и на арен< та < ьноб тон нити ч ив! Глава 24 порядка 10 см, что соответств>ст точности чуть выше, Двсвтичнов првдстввлвние для этой цели идеально использовать массив типа вйог( Фпатьпа мвк вввсгвгон гдово чем 1/10<а, т.е некоторые значения мы знаем довольно <Пг. 1ат сд<Ы ( сваг ' аОпе, сваг ' аТио, В обычном десятичном представлении мы используем сваг ь атьгее ) точно.
Точность составляет десять знаков после точки. Поскольку людям нс о <ень просто воспринимать десять различных символов, упорядоченных по значи- ( Известно, что количество молекул в 12 граммах уг- числа, представленныс в системе счисления с таким Тат 1дтатяв = О; люсти (справа налево), начиная с елиниц (10"), затем лсрода составляет около 6.02217'10", но это число об- основанием, то вместо него можно использовать осно- 1аг саггу = О; слелуют десятки (10'), затем сотни (10<), затем тысячи ладаст точностью только до 1<<1(Р, т.с. ошибка состав- ванис !0000, тогла каждый элемент массива будет со- гат г = О< ( 1 0') и т.д. 1ат 3 = О; ласт, по крайней мере, елиниц> в одном миллионе д .