Закръгляване на числата в компютрите
Изборът на бройната система и дължината на битовата мрежа на компютъра, както и формата на представяне на числата в машината, зависят от необходимата точност на изчислението. Точността на изчисленията се определя и от грешката при извършване на аритметични операции. При машините с фиксирана точка операциите събиране и изваждане, при условие че няма преливане, се извършват точно.
Източници на грешка при добавяне на числа с плаваща запетая са изместване на мантисата на едно от числата надясно при подравняване на поръчките, изместване на мантисата надясно при нормализиране на резултата и също така изкуствено задаване на нула като резултат, когато поръчките са отрицателно препълнени.
По този начин причините за изчислителните грешки в компютъра могат да бъдат:
1) неточност при определяне на първоначалните данни, участващи в операцията;
2) използването на приблизителни методи за изчисление;
3) закръгляване на резултатите от елементарни операции, което от своя страна може да доведе до появата на натрупани грешки;
4) повреди в работата на компютъра, които могат да бъдат отстранени чрез въвеждане на система за наблюдение на изпълнението на операциите.
Закръгляване на числа
Грешки при закръгляване възникват при превод на числа от една бройна система в друга и след това представяне в битовата мрежа на машината, както и при получаване на числа вътре в машината с по-голяма битова дълбочина от допустимата, например при умножение.
Закръгляването (знак ) се нарича оптимално, ако за който и да е номер на машина [A] A=[A] е вярно. Нека [A]1 и [A]2 са две последователни машинни номера, тогава с оптимално закръгляване на реалното число A, така че [A]1
Има следните видове симетрично закръгляване:
1. Закръгляване към нула, когато реално число се закръгля до най-близкото машинно число до нула.
2. Закръгляване от нула, когато се извършва закръгляване до номер на машина, който е по-далеч от нула от реалното число А.
3. Закръгляване чрез събиране, когато закръгляването се извършва до най-близкото число.
Като параметри, по които ще се сравняват методите на закръгляване, ще използваме максималната стойност на модула на грешката, т.е. max, където =A-[A], и математическото очакване на грешката при закръгляване .
Нека числата в машината са представени в директен код с фиксирана запетая преди най-значимата цифра, т.е. A=a-1. а-н. Нека в резултат на каквито и да е действия върху номерата на машината вътре в машината се образува число [A] с k=n+t цифри. Очевидно е, че най-простият метод за закръгляване е да се изхвърли частта от числото [A], която се състои от допълнителни цифри, т.е. битове с числа a-n-1, a-n-2. Тогава стойността на абсолютната грешка при закръгляване е:
Тогава max=p -n (1-p -t). Ако приемем, че появата на числа с абсолютна стойност А, но с различни знаци е еднакво вероятна и всички стойности на изхвърлената част от числото със същия знак са еднакво вероятни, то математическото очакване на грешката в този случай е 0, т.е. =0.
Обикновено вероятността за поява на числа с различни знаци по време на закръгляването не е една и съща, следователно е интересно да се закръглят абсолютните стойности, т.е. всъщност числа от един и същи знак. В този случай max не се променя, но =2 -1 p -n (1-p -t)
Това означава, че при работа с числа от един и същи знак грешката при отрязване е систематична, което води до натрупване на грешката.
2. Закръгляване от нулата.
Изпълнението на този метод изисква анализ на допълнително появяващите се цифри до нула и след това изхвърлянето им с добавяне на останалата част от единица към абсолютната стойност, акограницата не е равна на нула.
Тогава [A]=(аip i + р -n )
Това добавяне може да доведе до разпространение на пренасяне през всички цифри на числото, което обикновено изисква операция за събиране. В допълнение към допълнителните разходи за време, това може да доведе до препълване на битовата мрежа. Следователно методът е по-труден за изпълнение, въпреки че основните му характеристики са абсолютно същите като при отрязването.
3) Закръгляване по недостатък.
Прилагането на този метод се основава на анализа на знака за закръгляване на числото. Ако [A]> 0, тогава закръгляването се състои в изхвърляне на допълнителни битове. Ако [А] 0 този метод съвпада с отрязването, а ако А i +р -n )
Когато =0, то се закръгля към нула, в противен случай се закръгля в посока далеч от нулата. Стойността на максималната грешка в този случай е max-2 -1 р -n .
В случай на равновероятно появяване на числа с различни знаци и равномерно разпределение на вероятностите за поява на различни стойности на изхвърлената част от числото, математическото очакване на грешката при закръгляване е равно на нула. Въпреки това, когато се закръглят числа с един и същи знак, стойността на е различна от нула. Следователно, при закръгляване на числа с един и същи знак, този метод дава системни грешки при закръгляване, макар и по-малко, отколкото при отрязване.
6) Подобрено закръгляване чрез допълнение.
Решението за коригиране на запазената част от числото A се взема въз основа на анализа на стойността на всички битове от неговата отсечена част Ao= a-n-1. а-н-т, не само по-старата. Параметърът се определя съгласно следните правила:
=2 -1 p -n H=0 за дори a -n
H при Ao \u003d 2 -1 p -n H \u003d 1 за нечетно
В този случай стойността max=2 -1 p -n, т.е. остава същото. Въпреки това, систематичните грешки са сведени до нула, т.к с еднаква вероятност за поява на четна и нечетна стойност на второстепеннотона изхвърлянето на складираната част, стойностите на Ch=0 и Ch=1 са еднакво вероятни, т.е. =0. По този начин подобреният метод дава добро закръгляване при числа с еднакъв знак, но това се постига за сметка на сложността на изпълнението.
7) Опростено закръгляване чрез допълнение
При прилагане на методи за закръгляване чрез събиране, поради появата на пренасяне при сумиране на записаната част от число със закръгляща единица, е необходимо да се извърши операция събиране, което изисква допълнително време, т.е. намалява реалната скорост на компютъра и може да доведе до препълване на битовата мрежа.
Няма да има разпространение на трансфери, ако корекцията бъде отменена при a-n=p -1. За p=2 този метод на закръгляване се състои в принудително най-малкият бит от запазената част от числото да бъде зададен на единица, ако най-значимият бит от отхвърлената част е 1.
Освен това, ако в незакръгления резултат a-n=1, тогава той не се променя при закръгляване, а максималната грешка при изхвърляне Ao max=р-n(1-p -t ). Ако a-n=0, задаването му на единица въвежда грешки max=1/2p-n(1-p -t).
При равновероятното появяване на нула и единица в най-малката цифра на съхранената част за числата със знакова променлива, отново получаваме симетрично разпределение на грешките с =0. За числа с еднакъв знак 0.
8) Вероятностно закръгляване
За такова закръгляване е необходимо наличието на генератор на произволни числа (0 или 1), единицата от изхода на който се добавя към най-младата цифра от съхранената част от числото. Грешката на закръгляване с равновероятно разпределение на стойностите на изхвърлената част е случайна променлива с нулево математическо очакване.
По този начин най-простият метод за закръгляване е отрязването, което не изисква допълнително време и оборудване. въпреки тована практика най-важното е точността на изчисленията, която се определя от стойността на max. Само за три начина на закръгляване чрез допълнение max е близо до половината от единицата на най-малката цифра на номера на машината, т.е. е най-малката. Най-бързият от тях е опростеният метод, най-точният е подобреният. Следователно предпочитанието към един или друг метод на закръгляване трябва да се дава само след анализ на изискванията за скорост и грешки при изчисление на конкретна машина.
Правилата за закръгляване на положителните числа и в трите известни кода са еднакви. Въпреки това, закръгляването на отрицателни числа, записани в обратни кодове, има редица характеристики.
ОК. При закръгляване чрез добавяне абсолютната стойност винаги се закръгля, следователно трябва да се извади една от допълнителната цифра (DR) на отрицателна дроб, т.е. добавете обратния код към закръглената дроб - 1cr = 1,11. 10, където в ДР е изписано числото 0. Веригата за цикличен трансфер също трябва да покрива този DR.
Добавете код 1.111. 10 и възстановяването на цикличната трансферна верига е много неудобно. Следователно отрицателните дроби обикновено се закръглят, след като се преобразуват от обратния към директния код.
Не знам. Разграничават се два случая.
1) Ако има поне една единица отдясно на DR, тогава към DR се добавя единица за закръгляване, след което всички цифри, започвайки с допълнителната, се изхвърлят.
2) Ако в DR има единица и тази единица е най-ниската в числовия код, тогава всички цифри, започвайки с допълнителната, просто се изхвърлят. Невъзможно е да добавите единица към DR, т.к това ще изкриви резултата.