Методе за израчунавање квадратног корена
У нумеричкој анализи, огранку математике, постоји неколико 'алгоритама квадратног корена' или 'методе израчунавања главног квадратног корена'. За квадратни корен негативног или комплексног броја, погледајте испод. Проналажење је исто као и решавање једначине . Стога, сваки општи алгоритам проналажења корена се може користити. Њутнове методе, на пример, смањују се у овом случају такозваним Вавилонском методом.
Уопштено, ове методе дају приближне резултате. Да бисте добили већу прецизност за кореновање, већа прецизност за квадрат је потребна као и већи број корака који се мора израчунати.
Груба процена
уредиМноги алгоритми квадратних корена захтевају иницијалну вредност . Ако је почетна вредност далеко од стварног квадратног корена, алгоритам ће бити успорен. Стога је корисно имати грубу процену, што може бити врло нетачно, али лако за израчунати. Уз изражен у научној нотацији где n је цео број, квадратни корен може се проценити као
Фактори два и шест користе се јер се тако приближимо геометријској средини s од најниже и највише могуће вредности са одређеним бројем цифара: and .
За , процена је .
Када се ради у бинарном бројевом систему (као што рачунари раде интерно), изражавајући као где , квадратни корен може се представити као , будући да је геометријска средина од најнижих и највиших вредности . За бинарна апроксимација даје Ове приближне вредности су корисне за проналажење бољег почетка за итеративне алгоритме, што доводи до бржег приближавања-одређивања.
Вавилонски метод
уредиПрви алгоритам за приближавање √S је познат као 'Вавилонска метода' , назван по Вавилонцимa. Нема директних доказа који показује како су Вавилонци израчунавали квадратни корен, иако постоји доста претпоставки. Херонов метод, назван по грчком математичару првог века Херону из Александрије који је дао први експлицитан опис овог метода[1] Може се извести из (али претходи 16 века пре) Њутновог метода. Основна идеја је да ако је x прецењен за квадратни корен не-негативног реалног броја S онда S/x ће бити потцењен и тако се разумно може очекивати просек ова два броја да се обезбеди боља апроксимација (иако је формално доказ о тој тврдњи зависи од неједнакости аритметичких и геометријских средствава који показује овај просек да је увек прецењен од квадратног корена, као што је наведено у чланку о квадратном корену, што омогућава конвергенције). Тачније, ако је x наша почетна претпоставка за √S и e је грешка у нашој процени таква да S = (x+ e)2, онда можемо да проширимо биномно и решити га за
- када је .
Дакле, можемо надокнадити грешке и ажурирати нашу стару процену као
Пошто израчуната грешка није тачна, то постаје наша следећа најбоља претпоставка. Процес ажурирања је поновљен док се жељена тачност не добије. Ово је квадратни конвергенцијални алгоритам, што значи да се број исправних цифара приближавањем отприлике удвостручује са сваким понављањем. Онда наставља као:
- Почиње са произвољном позитивном почетном вредношћу x0 (што је ближе стварном квадратном корену S , то боље).
- Нека xn + 1 буде просек од xn и S/xn (Користећи аритметичку средину као да је приближна геометријска средња вредност).
- Поновити корак 2 све док се не постигне жељена тачност
Претходни кораци се могу такође представити и као:
Пример
уредиЗа израчунавање √S, где је S = 125348, до 6 значајних фигура, користите метод грубе процене изнад да добијете резултат
Стога, √125348 ≈ 354.045.
Конвергенција
уредиНека релативна грешка у xn буде дефинисана са
тада је
Онда се може показати
тако да важи
и самим тим приближавање је осигурано под условом да су и x0 и S су истовремено позитивни.
Најгори случај за приближавање
уредиАко користите грубу процену са Вавилонском методом, онда су најмање тачни случајеви у растућем редоследу:
Према томе у сваком случају,
Заокруживање грешке ће успорити приближавање. Препоручује се да се задржи барем једна додатна цифра иза жељене тачности xn тако да се резултату минимизира грешка заокруживања.
Цифра по цифру рачунање
уредиОво је метод да пронађете сваку цифру од квадратног корена у низу. То је спорије него Вавилонска метода (ако имате калкулатор који може поделити у једној операцији), али има неколико предности:
- Може бити лакше за ручне калкулације .
- Свака цифра корена која је пронађена је тачна, односно, не мора касније да буде промењена
- Ако квадратни корен има експанзију да престане, алгоритам завршава после последње цифре када је пронађена. Према томе, може се користити за проверу исправности, цео број је квадратни број.
- Алгоритам ради за било који бројевни систем, и наравно, начин на који поступа зависи од изабраног система.
Основни принцип
уредиПретпоставимо да смо у стању да пронађемо квадратни корен броја N изражавајући га као збир ' n позитивних бројева таквих да
По неколико пута применом основног идентитета
термин десна страна може се проширити као
Овај израз нам омогућава да пронађемо квадратни корен од узастопно погађане вредности s. Претпоставимо да су бројеви већ били изабрани, онда н-тог броја на десној страни од сумирања даје , где је приближна вредност квадратни корен који је до тада пронађен. Сада сваки нови погодак треба да задовољи рекурзију
тако да за све са почетком када исти квадратни корен је пронађен; ако није, онда сумирањем s даје одговарајуће приближавање квадратног корена, са као приближавање грешке.
На пример, у децималном систему бројева имамо
где су носиоци и коефицијенти . У сваком н-тој фази квадратног рачунања корена, приближан корен је пронађен, и сума је дата
Место вредности је чак и моћ од „10“, ми само треба да радимо са паром најзначајнијих цифара у преосталом периоду у свакој н-тој фази.
Очигледно је да се сличан метод користи за израчунавање квадратног корена у другим бројевим системима осим за децимални систем бројева. На пример, проналажење цифре-по-цифру квадратни корен у бинарном систему бројева је врло ефикасан, јер је вредност тражена од мањег скупа бинарних цифара {0,1}. То чини рачунање брже јер у свакој фази вредност је или за или за . Чињеница да имамо само две могуће опције за и чини процес одлучивања вредности у н-тој фази рачуна лакше. То је зато што само треба да проверите да ли за Ако је овај услов задовољен, онда узимамо ; ако не онда
Децимални (база 10)
уредиНапиши оригинални број у децималном облику. Корен ће бити написан на линији изнад. Сада раздвајање цифара у парове, почевши од децималног зареза и иде и лево и десно. Децимална тачка корена ће бити изнад децималног зареза. Једна цифра корена ће се појавити изнад сваког пара цифара тог корена.
Почевши са левим паром цифара, урадите следећу процедуру за сваки пар:
- Почевши са леве стране, спусти најзначајнији (скроз лево) пар цифара који није искоришћен (ако су се искористиле све цифре, пишите "00") и упишите их на десној страни остатка из претходног корака (за први корак, неће бити остатка). Другим речима, помножите остатак са 100 и додајте две цифре. То ће бити 'тренутна вредност' c '.
- Нађите p, y и x, као следеће:
- Нека p буде део корена који је пронађен, игноришући било децимални зарез. (За први корак, p = 0).
- Одредите највећу цифру x такву да . Користићемо нову променљиву y = x(20p + x).
- Пажња: 20p + x је просто дупло p, са цифром x која се појављује десно).
- Пажња: Можете пронаћи x погађањем шта је c/(20•p) и шта ради у пробном рачунању y, онда подешавањем x навише или наниже према потреби.
- Ставите цифру као наредну цифру корена, нпр., изнад две цифре корена које сте спустили доле. Тако да ће p бити „старије“ p пута 10 плус x.
- Одузимање y од c да се добије нови остатак.
- Ако је остатак нула и нема више цифара за спуштање, онда је алгоритам завршен. У супротном вратите се на први корак за друго понављање.
Примери
уредиНаћи квадратни корен од 152.2756.
1 2. 3 4 / \/ 01 52.27 56 01 1*1 <= 1 < 2*2 x = 1 01 y = x*x = 1*1 = 1 00 52 22*2 <= 52 < 23*3 x = 2 00 44 y = (20+x)*x = 22*2 = 44 08 27 243*3 <= 827 < 244*4 x = 3 07 29 y = (240+x)*x = 243*3 = 729 98 56 2464*4 <= 9856 < 2465*5 x = 4 98 56 y = (2460+x)*x = 2464*4 = 9856 00 00 Алгоритам је завршен: Решење је 12.34
Наћи квадратни корен од 2.
1. 4 1 4 2 / \/ 02.00 00 00 00 02 1*1 <= 2 < 2*2 x = 1 01 y = x*x = 1*1 = 1 01 00 24*4 <= 100 < 25*5 x = 4 00 96 y = (20+x)*x = 24*4 = 96 04 00 281*1 <= 400 < 282*2 x = 1 02 81 y = (280+x)*x = 281*1 = 281 01 19 00 2824*4 <= 11900 < 2825*5 x = 4 01 12 96 y = (2820+x)*x = 2824*4 = 11296 06 04 00 28282*2 <= 60400 < 28283*3 x = 2 Жељена прецизност је постигнута: Квадратни корен броја 2 је отприлике 1.4142
Бинарни бројевни систем (база 2)
уредиСвојствено цифра-по-цифру алгоритму је претрага и тест тих корака: пронаћи цифру, , када се десно дода од текућег решења , тако , где је вредност за коју се тражи корен. Проширење: . Тренутна вредност —или, обично, остатак може да се постепено-ажурира ефикасно када се ради у бинарном, као вредност ће имати један комплет бита („моћ двојке“) и операције које су потребне за рачунање и може бити замењен са бржим операцијама.
Пример
уредиОвде смо добили квадратни корен од 81, који када се претвара у бинарни даје 1010001. Бројеви у левој колони дају могућност да између тог броја и нуле се користи за одузимање у тој фази рачунања. Коначни одговор је 1001, која је у децималном број 9.
1 0 0 1 --------- √ 1010001
1 1 1 --------- 101 01 0 -------- 1001 100 0 -------- 10001 10001 10001 ------- 0
short isqrt(short num) {
short res = 0;
short bit = 1 << 14; // Други највиши бит је постављен: 1 << 30 за 32 бита
// "бит" почиње са највећом "снагом" четири <= аргумент.
while (bit > num)
bit >>= 2;
while (bit != 0) {
if (num >= res + bit) {
num -= res + bit;
res = (res >> 1) + bit;
}
else
res >>= 1;
bit >>= 2;
}
return res;
}
Експоненцијални идентитет
уредиКалкулатор обично спроводи добре навике да израчуна експоненцијалну функцију и природни логаритам, а затим израчунава квадратни корен S, користећи идентитет пронађеног помоћу својства од логаритама ( ) и експонената ( ):
Именилац одговара nтом корену. У случају изнад именилац је 2, па једначина наводи да се квадратни корен може наћи.
Бакхсхали апроксимација
уредиОвај метод за проналажење приближног квадратног корена је описан у древном индијском математичком рукопису под називом „Бакхсхали рукопис“. То је еквивалентно са два понављања из вавилонског метода почиње са N. Оригинална презентација гласи: Да бисте израчунали , пустите N2 да буде најближа савршеном квадрату да S. Затим, израчунати:
Ово се такође може записати и овако:
Пример
уредиПронађите
Ведска метода за проналажење квадратног корена
уредиВедска дуплекс метод из књиге „Ведска Математика“ је варијанта цифра по цифру методе за израчунавање квадратног корена. 'Дуплекс' је квадрат централне цифре плус дупло унакрсног производа цифара на подједнакој удаљености од центра. Дуплекс се рачуна од цифара количника (квадратних корена цифара), рачунајући до сада, али након почетних цифара. Дуплекс се одузима од дивиденди цифара пре другог одузимање за производ количника цифара временима делилац цифара. За савршене корене дуплекс и дивиденда ће добити мањи и доћи до нуле после неколико корака. За не-савршене квадрате декадну вредност квадратног корена може се израчунати до прецизности коју желимо. Међутим, како се децимална места размножавају, прилагођавање дуплекса постаје већи и дужи за израчунавање.
Основни принцип
уредиНастављамо са цифром-по-цифру рачуном, под претпоставком да желимо да изразимо број N као квадрат збира n позитивних бројева као
Одредити делиоца као и дуплекс за низ од m бројева тако да
Дакле, можемо поново изразити идентитет у смислу делиоца и дуплекса као
Сада рачунање можете да наставите од рекурзивно претпостављањем вредности , тако да
тако да за све , са почетком Када алгоритам заврши и сумира s даје квадратни корен. Ова метода је више личи на „дуге поделе“ где је дивиденда и је остатак За случај децималних бројева, ако
где , онда је почетак и делилац ће бити . такође производ у било ком m-тој фази биће и дуплекс ће бити , где дуплекси од низа . У свакој m-тој фази, видећемо да је вредност дуплекса за један мањи од производа . Тако, у реалним прорачунима уобичајено је да се одузети дуплекс вредности m-тог низа (m+1)-те фазе. Такође, за разлику од претходне цифра-по-цифру квадратног корена рачуна, где је у сваком m-тој фази, рачун се вршио тако што се најзначајнији пар цифара у преосталом периоду , метода дуплекс користи само јединствени најзначајнији цифра . Другим речима, да израчунамо дуплекс једног броја, дупло производ сваки пар са истим растојањем цифара плус квадрат центра цифре (цифара десно од десне колоне).
Број => Рачунање = Дуплекс 3 ==> 32 = 9 14 ==>2(1•4) = 8 574 ==> 2(5•4) + 72 = 89 1,421 ==> 2(1•1) + 2(4•2) = 2 + 16 = 18 10,523 ==> 2(1•3) + 2(0•2) + 52 = 6+0+25 = 31 406,739 ==> 2(4•9)+ 2(0•3)+ 2(6•7) = 72+0+84 = 156
Пример
уредиЗамислите савршен квадрат 2809 = 53 < sup > 2 </ sup >. Користите метод дуплекса да пронађе квадратни корен 2.809.
- Спусти број у групе од по две цифре .
- Дефинисати 'Делилац' , а 'Дивиденде' и 'Количник' да пронађу 'корен' .
- С обзиром 2809. Размотримо прву групу, 28.
- Најближи савршени квадрат испод те групе.
- Корен тог савршеног корена је прва цифра нашег 'корена' .
- Од 28> 25 и 25 = 5 2 , узети 5 као прву цифру у квадратном корену.
- За делиоца се двоструко ову прву цифру (2 • 5), што је 10.
- Следеће, подесите поделу оквира са колоном.
- 28: 0 9 је 'дивиденд' и 5: представља 'количник' . ( Напомена: количник треба увек да буде један двоцифрени број, и то би требало да буде таква да је дивиденда у наредној фази је не-негативна. )
- Ставите две тачке на десној страни 28 и 5 и задржите двотачке постројили вертикално.
- Израчунајте 'остатак' . 28: 25 минус: 3 :. је
- Остатак на левој страни следеће цифре да добијете нову дивиденду.
- Ево, додајте 3 до следећег дивиденди цифра 0, што чини нови дивиденду 30. делиоца 10 иде на 30 само 3 пута.
- Поновите операцију.
- Нулта остатак прилогу 9. Девет је следећи дивиденда.
- Ово обезбеђује цифре са десне стране колоне, тако да умањи дуплекс, 3 2 = 9.
- Одузимањем ове дуплекс од дивиденди 9, нула остатак резултатима.
- Десет у нуле је нула. Следећи корен цифра је нула. Следећи дуплекс 2 (3 • 0) = 0.
- Дивиденда је нула. Ово је квадратни корен, 53.
Метод две променљиве
уредиОвај метод је примењив за проналажење квадратног корена и конвергира најбоље за . Ово, међутим, има реална ограничења за компјутерску калкулацију, као основом 2 покретним зарезом и фиксне репрезентација тачке, то је тривијално да се умножавају целим бројем „моћи“ 4, и стога од стране одговарајућег броја „моћи“ 2, променом експонента или пребацивањем. Дакле, > може бити премештена у распону . Осим тога, следећи метод не користи опште подјеле, већ само додацима, одузимања, множења и поделама дужинама од два, који су опет тривијални да се спроведу. Непогодност ове методе је да нумеричке грешке се акумулирају, за разлику од једне варијабилне итеративне методе попут вавилонског један.
Почетни корак ове методе је
док је итеративни корак
Онда, (while ). Имајте на уму да приближавање , а самим тим и , је квадратна. Доказ ове методе је прилично лаган. Прво, преписати итеративну дефиницију као
- .
Онда је једноставно доказати индукцијом да
а самим тим и приближавање до жељеног резултата је обезбеђена од стране конвергенције to 0, што заузврат следи из . Ова метода је развијена око 1950. године
Итеративне методе за реципрочне квадратне корене
уредиИтеративне методе за проналажење реципрочног квадратног корена S који је . Након што је пронађен, наћи једноставним множењем: . Ове итерација укључују само множење, а не поделе. Оне су због тога брже од Вавилонског начина-методе. Међутим, они нису стабилни. Ако почетна вредност није близу узајамном квадратном корену, итерација ће да се разилазе далеко од тога, пре него да се спајају. Стога може бити корисно да се изврши итерација Вавилонском методом на грубој процени пре него што почнете да примењујете ову методу.
- Примена Њутнове методе једначини производи метод који конвергира квадратну помоћу 3 множења корак по корак:
- Друга итерација се добија Халејевом методом што је „Householder“ меtod реда два. Ова конвергира кубно, али укључује четири множења по итерацији:
Голдшмидтов алгоритам (Goldschmidt’s algorithm)
уредиНеки рачунари користе Голдшмидтов алгоритам за истовремено израчунавање and . Голдшмидтов алгоритам проналази брже него Њутнова итерација на компјутеру са више упутства. Два начина писања Голдшмидтов алгоритма су:[2]
Свака итерација:
све до је довољно близу 1, или намештеном броју итерација.
што ствара
Може се написати као:
Свака итерација: (Све 3 операције у овој петљи)
све до довољно близу 0, или намештеном броју итерација. што ствара
Taylor series
уредиАко N је апроксимација , бољи апроксимација се може наћи помоћу „Тејлоровог низа“ квадратног корена функције:
Као итеративни метод, редослед конвергенције је једнак броју коришћених термина. Са 2 термина, идентична је Вавилонској методи. Са 3 термина, свака итерација заузима скоро онолико операције као Бакхсхали приближавање, али конвергира спорије. Дакле, ово није нарочито ефикасан начин рачунања. Да би повећали стопу конвергенције, изаберите N тако да > је што је могуће мањи.
Друге методе
уредиОстале методе су мање ефикасније од оних приказаних изнад. Потпуно другачији метод за рачунање квадратног корена заснива се на „CORDIC“ алгоритму, који користи само врло једноставне операције (сабирање, одузимање, претрагу табеле, али не и множење). Квадратни корен S може се добити као решење помоћу хиперболичног координатног система у векторском систему, са следећим иницијализацијама:
Експанзија верижног разломка
уредиКвадратни ирационални бројеви (бројеви обрасца , где су a, b и c су цели бројеви), а нарочито квадратни корени целих бројева, имају периодичне верижне разломке. Понекад није циљ рачунање нумеричке вредности квадратног корена, већ његова експанзија верижног разломка. Следећи итеративни алгоритам може да се користи у ту сврху (S је било који природни број који није „савршени квадратни број“):
При томе су mn, dn, и an увек цели бројеви. Алгоритам може да се прекине на ai када ai = 2 a0,[3] што је лакше спровести. Експанзија се понавља од тада. Низ [a0; a1, a2, a3, …] је експанзија верижног разломка:
Пример, квадратни корен од 114 као верижни разломак
уредиПочиње се са m0 = 0; d0 = 1; и a0 = 10 (102 = 100 и 112 = 121 > 114 значи 10 је изабран).
Значи, m1 = 10; d1 = 14; и a1 = 1.
Онда, m2 = 4; d2 = 7; и a2 = 2.
Сада, назад на другу једначину горе. Сходно томе, једноставан верижни разломак за квадратни корен од 114 је
Његова вредност је приближно 10,67707 82520 31311 21....
Генерализовани верижни разломак
уредиБрже метод је да се процени генерализовани верижни разломак. Из формуле изведене:
и чињеница да је 114 2/3 између 102=100 и 112=121 резулрира у
што је једноставно поменути [10;1,2, 10,2,1, 20,1,2, 10,2,1, 20,1,2, ...] процењен на сваком трећем месту. Комбинацијом парова разломака добија се
што је сада [10;1,2, 10,2,1,20,1,2, 10,2,1,20,1,2, ...] процењен на треће место, а на сваких шест места након тога.
Пелова једначина
уредиПелова једначина (позната и као Брамагуптина једначина, јер је он први дао решење за ову конкретну једначину) и њене варијанте дају метод за ефикасно проналажење конвергената верижних разломака квадратних корена целих бројева. Међутим, то може бити компликовано да се изврши, и обично се не генерише сваки конвергент. Идеје иза методе су следеће:
- Ако је (p, q) решење (где су p и q цели бројеви) у једначини , онда је наставак разломка од , и као таква је одлична рационална апроксимација за њега.
- Ако су (pa, qa) и (pb, qb) решења, онда је и:
- Генерално, ако је (p1, q1) решење, онда је могуће да се направи низ решења (pn, qn) задовољавајући:
Поступак је следећи:
- Проналазе се позитивни цели бројеви p1 и q1 такви да . То је тежи део; То може да се уради било погађањем, или помоћу прилично софистициране технике.
- Како би се направио дуг списак конвергената, понавља се:
- Да би се брзо нашли већи конвергенти, понавља се:
- Ваља имати у виду да се одговарајући низ разломака поклапа са оним датим Хероновом методом почевши са .
- У истом случају, рационална апроксимација је задовољена
Апроксимације које зависе од покретне тачке
уредиБрој је заступљен покретним зарезом у формату као који се такође назива „научна нотација“.Њен корен је квадратни и из сличних формула се пријављују за кубне корене и логаритме. На први поглед, ово је било побољшање у једноставности, али претпостављањем да је потребна само апроксимација: Онда само је добро за ред величине. Даље, признају да ће неки, p, бити чудно, па је за 3141.59 = 3.14159x103 него се баве разломком базе, помножите од базе и одузмите један од њега да се направи још. Кориговани ће постати еквивалент 31.4159x102 тако да ће квадратни корен бити √31.4159 x 10.
Ако је цео део прилагођен да се узима, не може бити само вредности од 1 до 99, и који би се могао користити као индекс у табели од 99 унапред израчунава квадратни корен да заврши процену. Рачунар користи шеснаест базних што би захтевало већу табелу, али употребом базе два ће захтевати само три ставке: могући бит у цео број дела прилагођеним су 01 (може бити још тако да није било смене, сећајући се да је нормализује померајућа тачка број увек има не-нула високи-ред бројке), или ако је напајање било чудно, 10 или 11, то су прва два бита оригиналне поставке. Тако, 6.25 = 110.01 у бинарном, да нормализују 1.1001 x 22 тако да су упарени битови 01, док .625 = 0.101 у бинарном нормализује до 1.01 x 2−1 непарано тако да је прилагођавање 10.1 x 2−2 и упарени битови су 10. Обавештење да је низак редослед има одјека у високом реду. Чак снага има низак-ред мало нула и кориговани ће почети са 0, док је за непарним да мало је један и кориговани ће почети 1. Стога, када се напајање преполови, то је као да се његова мало помера како би постао први бит на поравнавању.
Табеле са само три ставке могу бити увећане укључивањем додатних делова мантисе. Међутим, са рачунарима, израчунати интерполација у табели, често је боље наћи неки једноставнији рачун који даје еквивалентне резултате. Све сада зависи од тачних детаља формата репрезентације плус који су доступни за приступ и манипулацију делова броја операција. На пример, Фортран нуди експонент (к) функција да добију „моћ“. Труд који је уложен у креирању почетног приближавања је да се надокнади чиме се избегава додатна итерација процеса пречишћавања који би био потребан за „сиромашна“ приближавања. Будући да су неки (једна итерација захтева поделу, додатак, и преполовљавање) ограничење је тешко.
Многи рачунари прате IEEE померање тачке стандард (или довољно сличне), и веома брзо приближавање квадратног корена може да се добије за покретање Њутновог метода. Техника која следи се заснива на чињеници да померање тачке формат (у бази два) апроксимира бази-2 логаритму. То је Дакле, за 32-битну пецизност броја померајуће тачке у IEEE формату (где је посебно да има пристрасност од 127 је додао за представљену форму) можете добити приближни логаритам тумачећи своју бинарну заступљеност као 32-битни цео број, то скалирање од , и уклањање пристрасности од 127, односно
На пример, 1.0 представља хексадецимални број 0x3F800000, који би представљао ако се узме као цео број. Користећи формулу изнад добијате , као што се очекивало од . На сличан начин добијате 0.5 од 1.5 (0x3FC00000).
Да бисте добили квадратни корен, поделите логаритам са 2 и претворите вредност назад. Следећи програм демонстрира идеју. Имајте на уму да најнижи бит је као експонент намерно дозвољен да пропагира у „мантисе“. Један од начина да се оправда корак у овом програму је да преузме као експонент пристрасности и као број сачуваних експлицитних битова у „мантисе“ и онда показати да
float sqrt_approx(float z)
{
int val_int = *(int*)&z; /* Исти битови али као цели бројеви */
/*
* Да би оправдали следећи код, докажите да
*
* ((((val_int / 2^m) - b) / 2) + b) * 2^m = ((val_int - 2^m) / 2) + ((b + 1) / 2) * 2^m)
*
* где
*
* b = експонент пристрасности
* m = број мантиса битова
*
* .
*/
val_int -= 1 << 23; /* Одузето са 2^m. */
val_int >>= 1; /* Подељено са 2. */
val_int += 1 << 29; /* Додај ((b + 1) / 2) * 2^m. */
return *(float*)&val_int;
}
Три математичке операције које чине језгро изнад функције могу се изразити у једној линији. Додатна подешавања могу се додати да се смањи максимална релативна грешка. Дакле, три операције, можемо записати као
val_int = (1 << 29) + (val_int >> 1) - (1 << 22) + a;
где a пристрастан за подешавање приближавање грешке. На пример, са a = 0 резултати су тачни за овлашћења до 2 (нпр., 1.0), већ за друге бројеве резултати ће бити мало превелики (нпр.,1.5 за 2.0 уместо 1.414... са 6% грешке). Са a = -0x4C000, грешке су између -3.5% и 3,5%.
Ако се апроксимација треба користити за иницијалну претпоставку Њутновог метода једначине , онда је реципрочни облик приказан у следећем одељку приоритетан.
Узајамни/реципрочни квадратни корени
уредиВаријанта ове рутине је приказана у наставку, она се може користити за израчунавање реципрочног квадратног корена, односно уместо, написао је Грег Валсх (Greg Walsh), а спроводи у SGI Indigo Гари Тароли (Gary Tarolli).[4][5]
Цео број апроксимације производи релативну грешку мање од 4%, а грешка додатно пада на 0,15% са једном итерацијом Њутнове методе на следећој линији[6] У компјутерској графици је веома ефикасан начин да се нормализује вектор.
float invSqrt(float x)
{
float xhalf = 0.5f*x;
union
{
float x;
int i;
} u;
u.x = x;
u.i = 0x5f3759df - (u.i >> 1);
/* Следећа линија може да се понови неограничен број пута за повећање тачности */
u.x = u.x * (1.5f - xhalf * u.x * u.x);
return u.x;
}
Негативни или комплексни квадратни корен
уредиАко S < 0, онда је главни квадратни корен:
Ако S = a+bi где a и b су реални и b ≠ 0, онда је главни квадратни корен:
Ово се може проверити квадрирањем квадратног корена.[7][8] Овде
је модул од S. Главни квадратни корен од комплексног броја се дефинише као корен са не-негативним реалним делом.
Види још
уредиРеференце
уреди- ^ Heath, Sir Thomas Little (1921). A History of Greek Mathematics. Clarendon Press. стр. 323—.
- ^
Markstein, Peter (2004). „Software Division and Square Root Using Goldschmidt's Algorithms”. CiteSeerX: 10
.1 .1 .85 .9648. Недостаје или је празан параметар |url=
(помоћ) - ^ Gliga, Alexandra Ioana (17. 3. 2006). On continued fractions of the square root of prime numbers (pdf). Corollary 3.3.
- ^ Rys (29. 11. 2006). „Origin of Quake3's Fast InvSqrt()”. Beyond3D. Приступљено 19. 04. 2008.
- ^ Rys (19. 12. 2006). „Origin of Quake3's Fast InvSqrt() - Part Two”. Beyond3D. Приступљено 19. 04. 2008.
- ^ Fast Inverse Square Root by Chris Lomont
- ^ {{cite book|last1=Abramowitz|first1=Milton|last2=Stegun|first2=Irene A.|title=Handbook of Mathematical Functions: With Formulas, Graphs, and Mathematical Tables| url =|year=1964|publisher=Courier Corporation|isbn=978-0-486-61272-0}
- ^ Cooke, Roger (2008). Classical algebra: its nature, origins, and uses. John Wiley and Sons. стр. 59. ISBN 978-0-470-25952-8., Extract: pp. 59
Спољашње везе
уреди- Weisstein, Eric W. „Square root algorithms”. MathWorld.
- Square roots by subtraction Архивирано на сајту Wayback Machine (3. март 2016)
- Integer Square Root Algorithm by Andrija Radović
- Personal Calculator Algorithms I : Square Roots (William E. Egbert), Hewlett-Packard Journal (may 1977) : pp. 22
- Calculator to learn the square root