Код:
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
Зборуваш за нешто како ова ? или ?
--- надополнето: Oct 16, 2011 10:29 PM ---
m?
ја иам решавано на лаб. многу оддамна, и овој начин ти е премногу конфузен човече, не се бара од тебе да биде оптимален кодот, не е поентата да најдеш решение од интернет, поентата е сам да најдеш решение, оптимизација ќе учите у втора-трета...ај ако ми текне која беше финтата за имплементирање на sqr root ќе ја пишам
--- надополнето: Oct 16, 2011 10:40 PM ---
Него сеа најдов , и ние така сме ја решавале
“Квадратниот корен претставува комплексна операција, и иако е најчесто имплементирана
на хардверско ниво, постојат останати начини за добивање на соодветната вредност. Во
програмирањето на игри се користи следниот метод (базиран на Њутновиот) за добивање
на инверзен квадратен корен (1/sqrt(x)):
• Се зема бројот x како променлива во децимален запис (float)
• Бројот y се добива со множење на x со 0.5F
• Co integer репрезентација на x (која ќе ја добиете со употреба на cast операторот)
треба да ја поместите едно место на десно, и да ја одземете од магичната
константата 5f375a8616
• Променетата integer репрезентација на x треба да ја конвертирате повторно во float
• Резултатот го добивате преку изразот (1.5F – (y*x*x))
Ваша задача е да го имплементирате алгоритмот за добивање на инверзен квадратен
корен.“
така да, проверка си праиш со цели корени и гледаш дали е точно
за 4 - 2
за 9 - 3
за 16 - 4
итн