Вторник, 15 Октября 2019, 07:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Tips & Tricks & Effects & Оптимальные Алгоритмы
Tips & Tricks & Effects & Оптимальные Алгоритмы
AkyltistДата: Суббота, 19 Декабря 2009, 08:20 | Сообщение # 1
заслуженный участник
Сейчас нет на сайте
================================== ==================================
В данную тему выкладываем самые оптимальные алгоритмы (математические, геометрические,
физические, графические) не забываем про качество алгоритмов

================================== ==================================

Любой флуд в теме будет наказываться очень жестоко.

- [Intro]

- [Mathematical Functions]
------{Функция Оптимального вычисления арккосинуса}
------{Функция Оптимального вычисления арксинуса}
------
------
------

- [Geometric Functions]
------
------
------

- [Physical calculations]
------
------
------

- [Algorithms graphics]
------
------
------

-[Cryptographic Algorithms]
------
------
------

------------------------------------------------------------------------------------------------------
Правила публикации:
1. Аккуратное оформление
2. Длинные алгоритмы заносим в spoiler
3. Очень длинные заливаем на надежные хостинги, но при этом в посте составляем качественное описание
4. Желательны скачки по прямым ссылкам

AkyltistДата: Суббота, 19 Декабря 2009, 08:21 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
Функция Оптимального вычисления арккосинуса
0000 { арккосинус [обозначение: arccos] ---------------------------------------}
0001 function ArcCos( x:extended):extended; assembler;
0002 var
0003   sw:word;
0004 asm
0005 fld [x] {x}
0006 xor al,al
0007 mov ah,byte ptr [x+9]
0008 shl ah,1
0009 jnc @plus
0010 fchs { x<0; x:=-x }
0011 inc al { al:=1 }
0012 @plus:
0013 { fld1}
0014 db 0CDh, 35h, 0e8h {1,x}
0015 fld st(1) {x,1,x}
0016 fmul st,st(2) {x**2,1,x}
0017 fsub {1-x**2,x}
0018 fsqrt {sqrt(1-x**2),x}
0019 fcom st(1)
0020 fstsw [sw]
0021 fwait
0022 mov ah,byte ptr [sw+1]
0023 sahf
0024 jnb @l1
0025 fxch {x,sqrt(1-x**2)}
0026 fpatan {arccos(x)}
0027 shr al,1 { x был <0 ? }
0028 jnc @end
0029 { fldPi}
0030 db 0CDh, 35h, 0eBh {Pi,arccos(abs(-x))}
0031 fsubrp st(1),st {arccos(x)}
0032 jmp @end
0033 @l1:
0034 fpatan
0035 shr al,1 { x был <0 ? }
0036 { fld1}
0037 db 0CDh, 35h, 0e8h {1,arctan(1/x)}
0038 fchs {-1,arctan(1/x)}
0039 { fldPi}
0040 db 0CDh, 35h, 0eBh {Pi,-1,arctan(1/x)}
0041 fscale {Pi/2,-1,arctan(1/x)}
0042 fstp St(1) {Pi/2,arctan(1/x)}
0043 jnc @lp1
0044 fadd {arccos(x)=Pi/2-arctan(1/x)}
0045 jmp @end
0046 @lp1:
0047 fsubrp st(1),st {arccos(x)=Pi/2-arctan(1/x)}
0048 @end:
0049 end;

дает прирост 30% производительностипо сравнению со стандартной от Borland
t,mks c сопроцессором t,ms без сопра, но c эмулятором
extended double real single extended double real single TYPE
409 406 572 413 19.3 20.1 20.1 20.0 NEW FUNC
745 748 904 745 23.2 24.0 24.9 24.0 STANDART
55% 54% 63% 55% 83% 84% 84% 84% % compor.
AkyltistДата: Суббота, 19 Декабря 2009, 11:45 | Сообщение # 3
заслуженный участник
Сейчас нет на сайте
Функция Оптимального вычисления арксинуса
0000 { арксинус [обозначение: arcsin] -----------------------------------------}
0001 function ArcSin( x:extended):extended; assembler;
0002 var
0003  sw:word;
0004 asm
0005 fld [x] {x}
0006 xor al,al
0007 mov ah,byte ptr [x+9]
0008 shl ah,1
0009 jnc [color=red]@plus
0010 fchs { x<0; x:=-x }
0011 inc al { al:=1 }
0012 @plus:
0013 { fld1}
0014 db 0CDh, 35h, 0e8h {1,x}
0015 fld st(1) {x,1,x}
0016 fmul st,st(2) {x**2,1,x}
0017 fsub {1-x**2,x}
0018 fsqrt {sqrt(1-x**2),x}
0019 fcom st(1)
0020 fstsw [sw]
0021 fwait
0022 mov ah,byte ptr [sw+1]
0023 sahf
0024 jnb @l1
0025 fxch {x,1}
0026 fpatan {arctan(1/x)}
0027 { fld1}
0028 db 0CDh, 35h, 0e8h {1,arctan(1/x)}
0029 fchs {-1,arctan(1/x)}
0030 { fldPi}
0030 db 0CDh, 35h, 0eBh {Pi,-1,arctan(1/x)}
0031 fscale {Pi/2,-1,arctan(1/x)}
0032 fstp St(1) {Pi/2,arctan(1/x)}
0033 fsubrp st(1),st {Pi/2-arctan(1/x)}
0034 jmp @2
0035 @l1:
0036 fpatan
0037 @2:
0038 shr al,1 { arctan(x):=-arctan(-x) }
0039 jnc @end
0040 fchs
0041 @end:
0042 end;

дает прирост 30% производительностипо сравнению со стандартной от Borland
t,mks c сопроцессором t,ms без сопра, но c эмулятором
extended double real single extended double real single TYPE
382 395 562 392 19.3 20.1 21.0 20.0 NEW FUNC
706 708 876 706 23.2 24.0 24.9 24.0 STANDART
54% 56% 64% 55% 83% 84% 84% 84% % compor.
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Tips & Tricks & Effects & Оптимальные Алгоритмы
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2019 Рейтинг