Главная страница
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.035 c
2-1173854350
Wood
2007-03-14 09:39
2007.04.08
TADOCommand


2-1174373951
БЫЛ
2007-03-20 09:59
2007.04.08
string в var Buf


1-1171458551
Влад
2007-02-14 16:09
2007.04.08
Математическое округление чисел и другое


3-1168854708
alexey_mas
2007-01-15 12:51
2007.04.08
Передача указателя на подключение к базе в DLL


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