Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: -0.881 c
15-1173637743
SkySpeed
2007-03-11 21:29
2007.04.08
Правильно ли решён пример по теории вероятн., если нет, то как?..


2-1173899922
Василиус
2007-03-14 22:18
2007.04.08
Добрый ночер


8-1154603965
AbrosimovA
2006-08-03 15:19
2007.04.08
Кто-нибудь откроет секрет PowerDVD


15-1174169491
MikePetrichenko
2007-03-18 01:11
2007.04.08
Весеннее обострение?


15-1173122947
DeadMeat
2007-03-05 22:29
2007.04.08
64 битная *.dll




   Наверх