Вниз
Скачать: 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.028 c
2-1174245460
Lik3r
2007-03-18 22:17
2007.04.08
TSearchRec как узнать файл или директория?


15-1173460202
Zhjaeve
2007-03-09 20:10
2007.04.08
Касательно языка


15-1173901069
default
2007-03-14 22:37
2007.04.08
Alcohol52%


15-1174043636
REA
2007-03-16 14:13
2007.04.08
Какой должен быть язык


3-1169109557
GrBob
2007-01-18 11:39
2007.04.08
Упраление соединениями на MS SQL Server




   Наверх