Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

asm   Найти похожие ветки 

 
Ильичев С.А. ©   (2005-10-20 13:21) [0]

Скажите пожалуйста что быстрее.
Или как-то по другому можно?

1.

 function DivTwoAndCeil(const X: Integer): Integer;
 begin
   Result := X div 2;
   if X mod 2 > 0 then inc(Result);
 end;

2.

 function DivTwoAndCeil(X: Integer): Integer; assembler;
 asm
   MOV EAX, X
   MOV ECX, EAX
   SHR EAX, 1
   AND ECX, 1
   ADD EAX, ECX
   MOV Result, EAX
 end;


 
Digitman ©   (2005-10-20 13:33) [1]

function DivTwoAndCeil(X: Integer): Integer;
asm
  AND EAX, 1
end;


 
Digitman ©   (2005-10-20 13:38) [2]

пардон ...

из-за имени ф-ции смысл ее затеи понятен не сразу ..

function DivTwoAndCeil(X: Integer): Integer;
asm
 SHR EAX, 1 //или SAR EAX, 1 при необходимости соблюсти знак
 JNC @@exit
 INC EAX
@@exit:
end;


 
Anatoly Podgoretsky ©   (2005-10-20 13:38) [3]

Быстрее не вызывать функцию


 
Ильичев С.А. ©   (2005-10-20 13:40) [4]

2 Digitman ©   (20.10.05 13:33) [1]
не то =)

мне надо
f(0) = 0
f(1) = 1
f(2) = 1
f(3) = 2
f(4) = 2
f(5) = 3
f(6) = 3
...


 
Digitman ©   (2005-10-20 13:52) [5]


> Ильичев С.А. ©   (20.10.05 13:40) [4]


как это "не то" ?)

убедись сам :

procedure TForm1.Button3Click(Sender: TObject);
var i: integer;
begin
 for i := 0 to 6 do
   memo1.Lines.add(inttostr(divtwoandceil(i)));
end;


 
Ильичев С.А. ©   (2005-10-20 14:05) [6]

2 Digitman ©   (20.10.05 13:52) [5]
за [2] большое спасибо
а в [4] первую срочку внимательнее


 
Anatoly Podgoretsky ©   (2005-10-20 14:15) [7]

Y := X DIV 2 + X MOD 2;


 
MBo ©   (2005-10-20 14:35) [8]

Inc(X)
X div 2


 
evvcom ©   (2005-10-20 14:38) [9]

asm
 SHR EAX, 1
 ADC EAX, 0
end;


 
Cyberdeamon   (2005-10-31 23:22) [10]

<CO DE>


 
Cyberdeamon   (2005-10-31 23:23) [11]

Удалено модератором


 
icWasya ©   (2005-11-01 09:31) [12]

function DivTwoAndCeil(const X: Integer): Integer;
begin
  Result := (X+1) div 2;
end;


 
Fenik ©   (2005-11-01 17:34) [13]

function DivTwoAndCeil(const X: Integer): Integer;
begin
Result := (X+1) shr 1;
end;



Страницы: 1 вся ветка

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.095 c
11-1111913330
MInd_fl
2005-03-27 12:48
2005.11.20
Record?


2-1130491512
DEScc
2005-10-28 13:25
2005.11.20
description


14-1130398023
ZeroDivide
2005-10-27 11:27
2005.11.20
Приходится ли вам заниматься физической работой?


2-1130746379
syte_ser78
2005-10-31 11:12
2005.11.20
как подключить dll?


2-1131098827
Максим
2005-11-04 13:07
2005.11.20
Поедание память





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский