- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
function Dist(dx, dy: integer): integer;
begin
//result := trunc(sqrt(sqr(dx)+sqr(dy)));
dx := abs(dx);
dy := abs(dy);
if dx>dy then begin
dy := dy shr 1 - dx shr 3;
if dy >= 0 then result := dx+dy else result := dx;
end else begin
dx := dx shr 1 - dy shr 3;
if dx >= 0 then result := dx+dy else result := dy;
end;
end;
movaxbx 02.07.2012 23:34 # +1
TarasB 03.07.2012 09:43 # +1
Есть ещё кармаков fastDist, погуглите сами. Он чуть быстрее этого, но по точности нааамного хуже.
HaskellGovno 03.07.2012 10:11 # 0
TarasB 03.07.2012 10:36 # 0
if (dx>dy) return dx+dy/2; else return dy+dx/2;
roman-kashitsyn 03.07.2012 10:27 # 0
TarasB 03.07.2012 10:36 # 0
roman-kashitsyn 03.07.2012 10:40 # 0
TarasB 03.07.2012 10:45 # 0
Можешь даже вывести на экран множество точек, для которых функция даст меньше 1000.
HaskellGovno 03.07.2012 12:10 # 0
roman-kashitsyn 03.07.2012 12:14 # +5
TarasB 03.07.2012 13:06 # 0
> Уж лучше я
bormand 03.07.2012 13:31 # +1
HaskellGovno 03.07.2012 15:06 # +1
TarasB 03.07.2012 15:10 # +2
Lure Of Chaos 03.07.2012 16:11 # +4
TarasB 03.07.2012 16:39 # +1
Lure Of Chaos 03.07.2012 16:41 # +3
запустил код, пошел пить кофе\чай, пришел - ура, выполнилось!
defecate-plusplus 03.07.2012 16:42 # +2
а то сравнение cmath vs taras даже с /O2 /SSE2 в пользу последнего
да и по точности в среднем 1% от эталонного
TarasB 03.07.2012 16:46 # +2
Вообще у ней внутре - почти правильный 12-угольник.
TarasB 03.07.2012 10:39 # 0
Но там в самом конце получается говно, которое хуже моего варианта по всем параметрам.
defecate-plusplus 03.07.2012 11:40 # 0
roman-kashitsyn 03.07.2012 11:49 # +2
TarasB 03.07.2012 11:54 # +1
В исполнении компилятора будет как-то так:
if (x>0) then y := x sar 3 else y := (x+7) sar 3;
Чтобы например -4 div 8 давало 0, в соответствии с убогой интеллоарифметикой.
Подробнее тут: http://www.gamedev.ru/code/forum/?id=138759
bormand 03.07.2012 15:41 # 0
Где в edi лежит значение a, а в eax получаем ответ.
Для unsigned такой проблемы конечно же нет. И там сгенерится тупой сдвиг.
HaskellGovno 14.08.2012 22:53 # 0
3.14159265 15.08.2012 15:19 # +4
Не переживай, скоро опять в школу.
"Снова в школу, снова в школу, снова в школу."