ПредишенСледващото

Почти всеки език за програмиране дава възможност да се използват при изчисленията на дробни числа. Когато става въпрос за софтуер, внедряване на числени методи, или каквито и да било други компютърни изчисления, важният въпрос е вътрешен представителството на номера, с които да работят на програмиста. От това зависи най-вече по отношение на точността на изчисленията, както и тяхната скорост.

Числата с плаваща запетая

Числата с плаваща запетая - често срещана форма на представяне на реалните числа в компютъра. Основните параметри на тази форма на представяне е основата на мощност (база) и точност (прецизност). В този случай винаги се изисква, че нивото база е цяло четно число. Ако броят на 0.1 е представена като. Въпреки това е ясно, че при определени параметри, някои цифри не могат да присъстват със сигурност. Например, и със същия брой от приблизително 0.1 е представена под формата (както в двоичното представяне на броя 0.1 има безкрайна форма).

По принцип, когато се дават параметри представлява броя на запис тип

Когато този брой се нарича мантисата се състои от позиции. В бъдеще, в рамките число с плаваща точка, ние ще разберем реалните числа да бъдат представени точно в смисъла на тази форма.

Има и други две важни параметри - максималната и минималната експоната $ "/> и" />. По този начин, за фиксираните параметри, можем да си представим -e_ + 1 \ вдясно) \ бета ^ р $ "/> различни номера, като се вземат предвид знака.

Представяме друго споразумение. Досега представителството на плаваща запетая не е уникален. Например, при 0.1 и броят може да бъде представена както и как. Представителство на броя на ръководни длъжности, от които стои цифрата е различна от нула, което наричаме нормализирана. Използването на стандартизирани формуляри решава проблема с не-уникалност на представяне на числа с плаваща запетая. (Въпреки това, този режим повдига интересен въпрос - как се представят 0)

машина епсилон

Както е известно, има два вида грешки в изчисленията - абсолютни и относителни (грешки в изчисленията). Съгласно относителната грешка е съотношението на

при което - стойност, получена чрез закръгляване, и - изчисляване на точната стойност.

Представете си, че поради закръгляване на реалния брой е броят. Лошия случай закръгляване съответства на абсолютна грешка, равна на къде. мантисата резултат закръгляване позиция. в мантисата на абсолютната позиция на грешката.

Когато се опитате да напишете неравенство за относителната грешка, съответстваща на по-горе абсолютна грешка, че е лесно да се стигне до

Стойността "/> наречен Епсилон машина (машина епсилон). По този начин може да се твърди, че когато закръгляване дробно число най-близо към него поплавък грешка роднина закръгляването не надхвърля епсилон на машината.

Има и друга дефиниция. Машина епсилон може да се определи като най-малкото положително число, което се добавя към устройството дава отличен резултат от единство. Читателят е поканен да се провери съответствието на тези дефиниции на техните собствени.

Стандартът IEEE

Има два различни IEEE стандарт за числа с плаваща запетая. IEEE 754 - двоичен стандарт изисква, за един-прецизен (единично) и двойна точност (двойно). Също така в IEEE 754 Standard точно договаряне за ползване бита за представяне на числа в единична и двойна точност. Стандартната IEEE 854 може да се настрои до 10 или 2. Това е и не казва нищо за разпределението на бита между мантисата и степен.

Концепцията на IEEE стандарт се използва за обозначаване на свойствата, присъщи на двете от тези стандарти.

Нивото на база

Изборът на степента на база 10 не изисква специални обяснения. Десетична система - система, познати на човека. В случай на двоична система е необходимо да се обсъдят някои от достойнството, присъщо в него. Ние се съгласихме да използвате нормализирана форма на номера. Ако в старши позиция може да бъде само 1. Това ни позволява да не съхранявайте на паметта и по този начин се получават допълнителен бит за мантисата. В този случай, казват те, че стандартът използва скрита малко (скрита битова).

Нека се върнем към въпроса за представителството на нула в нормализирана форма. Нула съответства на нула степен и мантиса -1 "/>. Така нула е представен като.

точност

Стандартът IEEE предлага 4 различни точност: единична (еднократна), двойно (двойно), единичен продължителен (единичен продължителен) и двойно разширение (двойно-продължителен). IEEE 754 здраво преговаря броя на битовете на единични и двойни прецизност. Това означава, че на всички компютри с IEEE 754, броят на битовете в представителството на номера с едно-прецизен и двойна точност фиксиран. Bit разширена точност номер не е строго фиксирана. Подобрени формати са предназначени да се увеличи размерът малко в мантисата и експонентата. В таблицата по-долу са показани параметрите на различни точност в IEEE стандарт.


Представете си, че имаме програма. Докато работи в тази програма от известно време се опитва да извлече корен от -4. Ако стандартът не разполага с излишни ценности и всички последователности от битове, за да изразят съответния брой, а след това няма да има изход добро, отколкото да се спре работата на програмата със съобщение за грешка.

За такива случаи в стандарта IEEE, има специални стойности.

NaN (не е число), използван от IEEE стандарт за обработка ситуации видове екстракция корен на отрицателно число.

Ние даваме малка таблица, която показва случаите на NaN замяна.

Операциите, които връщат NaN

В случаите, когато е налице NaN

Най-Нан не е уточнено малко представителство, каква стойност трябва да мантисата. Единственото ограничение - не трябва да бъде нула. Този факт се използва за предаване на определена система за информация чрез мантиса. Така че има много различни видове ценности Нан - всеки за неговия случай.

Да предположим, че се изчисли стойността на израз, например. Да приемем, приема стойността NaN. В този случай, общата стойност на израза е равна на NaN. Ако ние считаме, дългосрочно, при изчисляването на които има NaN, информацията от системата в мантисата трябва да съответства на NaN, след което е възникнало първо място. Изключение е, например, добавяне на два NaN. В този случай, мантисата ще се срещне с един от тях, а не непременно на първия.

Нека дадем добър пример демонстрира значението на това специално значение. Да предположим, че имаме програма за изчисляване на нулите. Ние искаме да го изпълни така, че да не се изисква интервал за търсене като входен аргумент. Това изпълнение може да доведе до проблем - какво ще стане ако програмата се опитва да изчисли стойността извън обхвата на дефиницията на функцията? По-специално, програмата може да се опита да вземе корен квадратен от -4. Ако програмата генерира съобщение за грешка и да се спре работата си, че би било безполезно за нас. NaN съществуване ни дава възможност да го върне в резултат на изчисляване на корен квадратен и продължи да работи.

безкрайност

Infinity съществува, за да се справят с такива ситуации, като преливане и се дели на нула. На преливник, може да се върне максимално може да се представят броя с плаваща запетая. Това решение обаче не винаги е оправдано. Много по-изгодно е да се знае, че тя преля, както и да предприеме необходимите мерки, получена като резултат. Налице е положителна и отрицателна безкрайност. При получаване на, че има начин да се определи причината, поради която е възникнала грешката - поради препълване или поради деление на нула. Тази информация е достъпна в държавата на знамето.

Аритметика използване ясно интуитивен: чрез разделяне на стойността на крайния резултат е нула; при добавяне или изваждане на крайната стойност на резултатът ще бъде, съответно.

Ние даваме малък пример за безкраен аритметика.

Да кажем, че ние работим с функцията

Тази функция за запис не е много добро. Когато SQRT \ бета ^ / 2> "/> SQRT \ бета ^ / 2>" /> ще доведе до преливане, а резултатът е 0. Това е неточно в знаменателя като резултат трябва да бъде върната на поръчката. Препишете в друга форма.

Тази формула няма да е толкова скоро да доведе до преливане. В произход тя също така ще вземе правилната стойност, тъй като "/> ще закръгли нула.

Този пример показва, че основното предимство на използването на безкрайно аритметика: използването на често заобикаля проверка множество крайни случаи.

Нулева със знак

Нулева съответства на нула мантиса и експонента -1 "/>. В зависимост от стойността на бита знак може да бъде. Нека да докаже тези специални входни стойности.

За да започнете, се интересно наблюдение: в стандарта IEEE се определя това. Това се прави, така че когато условните отчети на формата не възникнат несигурност. Но това не означава, че стандартът не прави разлика между тези две стойности. Когато се умножи номера с нули с признаци или чрез разделяне нули с признаци за броя на знаците се определя в съответствие с обичайната аритметика знака. Например, и.

Да приемем, че на земята няма да е знак. След това, когато няма да има несигурност с изчисляването на изразяването на стойност. Несигурността се крие във факта, че "/> и" /> ще бъде равен на 0. В същото време, необходимо за правилното логично стойност. С други думи,

Като се има предвид съществуването на безкрайност знаци с единственото решение на проблема е да въведете нули със знаци.

Нека дам един пример.

Помислете за функцията. Да предположим, че - много малко отрицателно число. Ако тя е закръглена нула, тогава резултатът ще бъде, че, разбира се, погрешно. В IEEE стандарт не възникне такъв проблем. В този случай, заоблени и връща стойността NaN.

денормализирани номера

Последният специален IEEE стандарт стойност се денормализирани номера.

Помислете за пример. Нека U = -98 "/> Цифрите и - .. плаваща запетая, които се различават от минималния брой може да се представят повече от 10 пъти Тези числа имат една интересна особеност на тяхната разлика е нула, въпреки че те не са равни Това е .. защото закръглена нула. бихме искали да ни познати на самоличността

винаги доволни. Без тази идентичност е доста трудно да се пишат програми, които работят с дробни числа. Е трябвало да бъде в програмния код включва редица проверки и условни конструкции.

Въвеждане на не-нормализирани номера решава проблема.

Въпросът е, че когато степенният показател, равен на "/> мантисата трябва да се нормализират. Ето защо, кога и = -98" /> не е минималният брой може да се представят. също валиден номер с плаваща запетая.

Достъп до формата, в различни компилатори

В папката включва инсталационната директория има стандарт VC Хедър "float.h", която описва основните параметри на форматите плуват, двойно и дълго двойно. Има и Header "limits.h", която разкрива редица функции за работа със специални ценности.

Borland компилатор (3.1)

В същото включва директория е Хедър "float.h"

GCC компилатор (3.4)

Инсталационната директория (ЮЕсАр / ИЪ / ССЗ /.) има всичко точно същото включва папка с Хедър. Той има "float.h" файл.

Позоваването

Подкрепете проекта - споделете линка, благодаря!