Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.043 c
8-1153895658
Delphi6
2006-07-26 10:34
2007.04.08
Delphi: Библиотека или dll для работы с фотографиями


15-1173813639
MsGuns
2007-03-13 22:20
2007.04.08
Гребенщиковский "Аэростат"


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


15-1173940554
Alkid
2007-03-15 09:35
2007.04.08
Правила русского языка


2-1174385675
Adios
2007-03-20 13:14
2007.04.08
URL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский