Искусство программирования на Си (984073), страница 75
Текст из файла (страница 75)
. дер<кать в точности по четыре десятичные цифры чисДля тел, кому интересны существующие рззговор- В этом случае точность составляет только пять знаков. ла, которое мы прелставлясм, что будет удобно при 1'=ихк тдвсгвгов-1<('>=О)< †) ные языки, арабские цифры, которые мы используем, В полдень 1 июня 1995 г. население Европы, по распечатке и/или чтении таких значений. Можно .<ак( в арабском написании пишутся справа назево. Млздшая некоторым оценкам, составляло 498 миллионов. но это жс использовать массив типа 1опй 1пт, полагаясь на то, 3 = '(авве+1) + '(аТио+г! + цифра числа вес так же располагается справа, з старшая— число известно только с точностьнз до трек миллионов, что что элемент такого массива может содержать значение, саггу — 'О' — 'О'; слева. Когдз мы читаем послсловательность цифр в тсксагг = ' I 1О; хуже, чем 1/100.
Здесь точность — только два знака. которос не меньше 2147483647, и выбрать в качестве саггу = 3 / стс, то, для того чтобы узнзть, какое зна <ение имеет Расстояние от Земли до созвездия Андромеды со- основания число 1000000000 (один миллиард). Кажлая старшая цифра, нужно нзчать просмотр с конца (с *(аТЬгевив) = 3 + 'О': ставляст, по разным оценкам, от 2 до 5 миллионов све- познция будет состоять из девяти десятичных цифр. младшей цифры) числа, з затем вернуться к старшей товых лет, т.е. между 1.9'! Оч и 4.7'1Оч метров, цри этом Ниже будет приведен код, который в качестве осно- гетага 1всагвв< цифре. Быстро скажите вслух число 968374215.
Нзвсрошибка составляет 250%. ванна при представлении чисел использует 10000. 1 нос, вы начази отсчет с конца и подсчитали, что 9 означает "левятьсот миллионов", а не "девяносто милли- Строки символов Более подробно приведенная функция описана в Раэличные методы представления онов' пли "девять миллиардов" файле СЬ24А<Ы.с на ьХ<сЬ-гэйтс издательства "диаСофт" Глава 24 Щ~ Лы1ачиитечииые т<матичоккио рокс<вы Арифметика проикоачоиои точи<<то Част ГЛ Листинг 24.4. Умножение в системе счисления с основанием 10000.
((аОПЕ=ыВОЬЬ) [] (аТЕОыыяОЬЬ) ]] (аАПВЕЕГ=ыявьь)] Фгпс1пве <вг411Ь.Ь> Ие1гпе ВА55 10000 [бесьпе яояТ ВА55 100 ( аЬв(авве[0)) + аЬв(аТеп[0]) + 1> Иесгпе 1ят 1пс аЛ11ссасе(1, рр1пс); Г( (1цыс) гпс ра1гвп11[р1у ( 1ВТ 10пе, 1ВТ гТес, 1ВТ * рАввеег) ( гясагпв = 1; 1нт Тясаспв = 0; ( Тсг (Х=авв(атис(0))Р(Х>0)ГХ вЂ ) Тсг ()=аЬв(аопе(0])г(]>0);)†) в = ра[гвп)Г[р1у ( аОпе[)], аТес[Х], е); р1пс[г + 1 — Х вЂ” ]) += е[1]~ гт (1Опе>явят ВЛяя) ртпц ' — Х вЂ” 1] += е[Ю]1 ) >алетер = голе / яоят Ваяя; 10 (((попе[0)>0)вв(атис[0)<0)) ) ((попе(0)<0]ай(атее(0]>0))) е1ве ртпцо] - — ртпцо)1 а = авсгаа11ве (рр1п1, аАпввег)) ° Донаините<ы«ые темати«егкие ран<мы Арифметика«тн и<на <«нанта««акти Щ~~ < Часть и< Глава 24 Общие арифметические функции В четырех функциях, приведенных в табл.
24.9, ис1=г+а; пользуются несколько вспомогательных функций, опи) В файлах СН24АЬай.с и СН24АОК.с на «Уеб-сейте из- саине кото ых и иведено в табл 24 )б 11 (в<О) датсл "" "Диасофт" содеРжа"Я ПРогРаммы длл вьь В фай е СН24АОК2ас повторень< все пред'.а ен(еавогаа11(О) = — (*авогва1) (О); полнениЯ четыРех основных аРифметических операций ные выше функции и, кроме того, имеется возможность Ггее(еавпвогпм1)< над свеРхбольшими целыми числами. ПеРвый файл работы с числами с десятичной точкой (те с нецелы'авлвогаа1 ИОЬЬ; (СН24АЬабис) содержит верный, но неполный код, ко- ми числами).
) торый предлагается вам для самостоятельной доработ- В всех казанных файтах <Ьункции аА44, аВвй<гас1, геспгп 1асаепв< ки в качестве упражнения в целях рассмотрения возни- аМО)бр)у, ар)тй)е, сазсМцЫйу, сазсО(тй)е и аОН)Чогма)це ) каюших при этом проблем. В файле СН24АОК.с выделяют память, которую поль юватель должен освобоприведено полное решение всех этих проблем. дить. ОписаниЯ имеюшихсЯ в этих пРограммах фУнкций <райх Сйча(е.с солержит набор фу кции я выпол( ненил простых арифмети <еских операций над типом 1ИТ « р1пе = ИОЬЬ; довйе.
Описание этих функции приведено в табл. 24.11. гпс г О; Таблица 24.9. Арифметические операции над большими целыми числами. р1пе = са11ос ( вааео1 (1вт), хеоппг + 1); Итя функции Описание функции 11 (р1пС==ИОЬЬ) аА04 Складывает большое число (слагаемое) с другим большим числом и выделяет память под сумму ( аВиьпвс< Вьмитает большое число (вычигаемое) из другого большого числа (уменьшаемого) и выделяет память Ирсгпр доаеанитееение тематичеекаерозгами Лрифметика нраимооиеаи точнаети 1 Часть Ш Глава 24 т Имл функции Описание функции Функция Ирбе(Епв(та!епсв качестве аргументов тре- литься, что операции выполняются с требуемой точноИРЗатеАООЗепвпме Складывает слагаемое, заданное с определенной точностью, с другим слагаемым, также бует двух параметров, ажд ' Р , к ый из кото ых является укэ- стью, т.е.
каким образом можно определить точность заданным с определенной точностью, даве сумму, вычисляя ее точность, выдает при зателем нэ тип бовЫе. Если аргументы равны между получ о пол енного после выполнения операции результата? В необходимости сигналы об ошибках. собой (что определяется функцией Ирсшр), то значение файлах СЬ24Ба1е.с и СЬ24Яа(е.с на ЬуеЬ-сайте издательИрва1едоп Складывает слагаемое с другим слагаемым, дает сумму. Дпя выполнения вычислений вызывает параметра с меньшим абсолютным значением будет ства "ДиаСофт" содержится полный набор функций для функцию ИРЗатеАббвепз(бгие.
устан становлено равным значению параметра с большим выполнения арифметических операций над значения- ИрватеЗцЬ(гас(Зепв(тые Вычитает вычитаемое, заданное с определенной точностью, из уменьшаемого, заданного с абсолютным зназением ми типа 4опЫе. Эти функции можно без труда распроопределенной точностью, дает разность, вычисляя ее точность, выдает при необходимости странить на тип 1опй 4овЫе. Коды функций приведены сигналы об ошибках. Для выполнения вычислений вызывает функцию ИрватеАббвепвйнче. Испоп И о11ьзование стандартных типов в листинге 24.5, но присутствующие в файлах на %еЬИрва1евоЬИаст Вычитает вычитаемое из уменьшаемого, дает разность.
Для выполнения вычислений вызывает санте "ДиаСофт" комментарии в этом листинге не прифункцию ИрватеЗцыгас(Зевай(ие. Если нам нельзя отходить от встроенных типов Иоа1, водятся. Сравнивает два числа с плавающей точкой с наиболылей доступной для данного типа 4овЫе и Еппй 4оцЫе, то каким образом мы можем убеточностью. ИРЗе(ЕПима(епт Если переменные, данные в качестве аргументов, равны с некоторой точностью числу и Листинг 24.5. Функци дп нг .. нк ии я выполнения арифметических операций нэд значениями типа с(оцЫе с (ипсипон, обычно обозначает предел точности), то значения обеих переменных заданной точностью. устанавливаются равными большему по модулю значению.
Если значения переменных не 11пс1вде <ве41о.Ь> Равны, функция возвРащает РАСЗЕ. 11пс1вае <в(чва1.Ь> запс1вэе <ваСЬ. Ь> Названия некоторых переменных внутри указанных ° Указатель на переменную типа йовЫе, которая по эхас1вэе <11в11в.Ь> 11пс1вее <11оас.Ь> Рви)В ' Арифметика мроизеольмой томмтти Дома амит витые теиатззмееют разделы 1 Часть (й Глава Ев Е1рьоса1оеповргесьеьоп ОВЬ еРБ1ЬОН ) ЕаЬв( ЕьроеповЕпасог ); тетитп ( Е1рвеСитпуа1ие ); И [ овь ериььои > еьрь а[оспа Ргеств' ) ЕЬРЬоса1Оеиовр стаьоп - ОВЬ ЕРБЕЬОИЕ 6оиЫе 11РБауеОЕч16е (6оиЫе Е1риивега1ог, И [ Е1роеповьиасогргесьв1оп > Е1РЬоса1оеповргеств1оп 6оиЫе Е1роеповьпасог) Е1рьоса10еповртесьв1оп 11роеповтпатотргесзвтопс ЕЬРЬоса1иеви1тртесьв1оп = ( 11рьоса1иивргес[вьоп ( 6оиЫе Е1риесигпуа1ие = О.О; ЕаЬв ( 11роеповьпавог ) ) ь ( Е1рьоса10еиовргесьв1оа * Е1рвеСигпЧа1ие = Е1риауе01ч[6еБепв111че [11риивегасог, 0.0, ЕаЬВ ( Е1рйиветасог ) ); 11роепов1пасог, 0.0, И [ Е1рьосаьиеви11ргесьвзоп с ОВЬ ЕРБ1ЬОН ) ИОЬЬ, РВЬБЕ, НОЬЬ)) Е1рьоса1иеви1СРгесьв1оп = ОВЬ КРБ1ЬОИЕ гасите [Е1риеСигпуа1ие); *РЕ1риеви1сргеста1оп = Е1рьоса1веви11ргесьвьоп) ) ) 6оиЫе Е1РБауейи11[р1РБепв111че ( 6оиЫе Е1ру1гвсйи111Р11сап6, *риггогиа1ве6 6оиЫе ЕЬРР1гвсйи111Р11сапиргесьв1оп, ( Е1рсвр ( Е1риивегасог ==*, Е1РЕето ) 6оиЫе 11РБесоп6Ни1ттр1тсап6, гесигп ( 11рвеситпуа1ие ); 6оиЫе Е1РБесопбйи11тр11сапбргестыоп, тЕ ( Е1рсвр ( Е1роепов[пасот, == , 11ргего ) ) 6оиЫе * р[1риеви1СРгестыоп, Епт КатвеЕггог, 1пс * РВггогиа1ве6 ) И [ РЕ1рвеви11ргесьвьоп != НОЬЬ ) ( и етика нроизаольнои точновни 62~ Яоаагните гьные тематические раздагы 1 Глава 24 Часть и1 Епп Каьпейггог, Е1ррьгвсйп1ИР11сапбРгесгыоп; Епп * рйггогйа1пе * рй огйа1пеб ) е1ае "РЕ1рйепп1ЕРгесйыоп Е1рЯесопбйп121РИсапбргес151оп; бопЫе ПрйепсгпЧа1пе бопЫе Е1РЕего геьпгл ( Е1рйеппгпча1пе ); бопь1е Е1рЬоса1йепп12ргесгайоп — 0.0; ) бопЫе Е1рЬоса1РЕгесргесьп1оп О.