Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

FastRound(). Жуть какая :)   Найти похожие ветки 

 
DevilDevil ©   (2007-03-12 10:54) [0]

const RNDconst : double = 6755399441055744.0;

function FastRound(X : double) : integer;
asm
  fld  qword ptr [esp+8]
  fadd RNDconst
  fstp qword ptr [esp+8]
  mov  eax,      [esp+8]
end;


По идее, надо бы сначала в TASMе откомпилировать, чтобы от лишних команд избавиться.


 
Сергей М. ©   (2007-03-12 10:58) [1]

Где ты эту жуть узрел ?
И где здесь "лишние команды" ?


 
DevilDevil ©   (2007-03-12 11:00) [2]

1) просто слишком необычный способ
2) в дебагере


 
DevilDevil ©   (2007-03-12 11:03) [3]

А вообще нашёл здесь:
http://www.gamedev.ru/tip/?id=134

Сначала не верил, решил проверить. Работает блин! :)

на асм перевёл сам.

P.S. Round() в Delphi намного больше делает.


 
REA   (2007-03-12 11:06) [4]

Больше или дольше?


 
DevilDevil ©   (2007-03-12 11:11) [5]

> REA   (12.03.07 11:06) [4]

Больше операций выполняются Дольше.


 
Сергей М. ©   (2007-03-12 11:23) [6]


> Round() в Delphi намного больше делает


Вот его код:

procedure       _ROUND;
asm
       SUB     ESP,8
       FISTP   qword ptr [ESP]
       FWAIT
       POP     EAX
       POP     EDX
end;


И что здесь есть, по-твоему, "намного больше" ?


 
DevilDevil ©   (2007-03-12 11:43) [7]

> Сергей М. ©   (12.03.07 11:23) [6]

Вот опозорился... с Trunc() перепутал... :)


 
DevilDevil ©   (2007-03-17 00:09) [8]

> Сергей М. ©   (12.03.07 11:23) [6]

Ну хорошо, получайте!

const FloatConsts : array[boolean] of single = (-0.5, +0.5);

function FastTrunc(X : single) : integer;
asm
  mov  eax, X
  shr  eax, 31
  fld  dword ptr [FloatConsts + eax*4]
  fadd  X
  fistp X
  mov eax, X
end;


а на Delphi это выглядит примерно так:

function FastTruncDelphi(X : single) : integer;
begin
  Result := Round(X + FloatConsts[pinteger(@X)^<0]);
end;


 
ПЧЁЛ   (2007-03-17 00:14) [9]

DevilDevil ©   (17.03.07 0:09) [8]

Падаем ниц..


 
DevilDevil ©   (2007-03-17 13:10) [10]

> ПЧЁЛ   (17.03.07 00:14) [9]
> Падаем ниц..


Гы. Это я сам придумал! :)



Страницы: 1 вся ветка

Текущий архив: 2007.04.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.042 c
6-1161536281
-=Germe$=-
2006-10-22 20:58
2007.04.08
....


15-1173855658
nasty196
2007-03-14 10:00
2007.04.08
panel zada4


1-1171091588
blackdak
2007-02-10 10:13
2007.04.08
запуск приложения


15-1173949095
Calibr
2007-03-15 11:58
2007.04.08
Список процессов?


4-1163699129
Wadim
2006-11-16 20:45
2007.04.08
Как заморозить программу SuspendedThread?