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

Вниз

Количество бит в байте   Найти похожие ветки 

 
Kerk ©   (2007-10-04 15:47) [0]

Прислали тут тестовое задание.. и есть там вот этот пунктик:

3. Напишите функцию, которая принимает на вход байт и возвращает кол-во установленных в нем битов.
  Сделайте несколько вариантов функции:
  а) Оптимизированной по скорости
  б) Оптимизированной по памяти
  в) Компромиссный вариант
----

Вижу оптимальным такой вариант:

function BitsInByte(B: Byte): Integer;
begin
 Result := 0;
 while B > 0 do
 begin
    Result := Result + (B and 1);
    B := B shr 1;
 end;
end;


Это видимо оптимизировано по памяти.. еще меньше памяти использовать невозможно. Какой же тогда оптимизированный по скорости? Ну можно забить массив (1, 2, 4, 8 .... ) и по нему в цикле пробивать and"ом. Это памяти ест чуть больше, но не факт, что работает быстрее моего первого варианта. А компромиссный-то вариант какой? Что-то я запутался. Хелп плиз.


 
Сергей М. ©   (2007-10-04 15:50) [1]

По-моему, в строчке


> Result := Result + (B and 1);


ты нарисовал полную хню)


> Какой же тогда оптимизированный по скорости?


MBo(c) неоднократно предлагал такой вариант.


 
Kerk ©   (2007-10-04 15:52) [2]

Как мне тут верно подсказывают, по скорости - использовать таблицу. :)
А компромиссный какой? :)


 
shuang   (2007-10-04 15:55) [3]

>А компромиссный-то вариант какой?
с постоянной маской и рекурсией


 
Сергей М. ©   (2007-10-04 15:55) [4]


> по скорости - использовать таблицу


Емли xlat поможет, тот правильно подсказывают.


> компромиссный какой?


Смотря что подразумевать под "оптимизированный по памяти)..


 
sniknik ©   (2007-10-04 15:56) [5]

> Какой же тогда оптимизированный по скорости?
function BitsInByte(B: Byte): Integer;
const
 mas: array[0.. ] of integer = (0, 1, ... );
begin
result:= mas[b];
end;


 
Kerk ©   (2007-10-04 15:58) [6]

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


 
Kerk ©   (2007-10-04 15:59) [7]


> sniknik ©   (04.10.07 15:56) [5]

Да да.. Я в [2] про это и сказал :)
Осталось компромиссный придумать


 
Сергей М. ©   (2007-10-04 16:01) [8]

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


 
sniknik ©   (2007-10-04 16:04) [9]

> в) Компромиссный вариант
function BitsInByte(B: Byte): Integer;
begin
 result:= byte(b and 1 > 0) + byte(b and 2  > 0) + byte(b and 4 > 0) + ...;
end;


 
Kerk ©   (2007-10-04 16:04) [10]

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


 
Kerk ©   (2007-10-04 16:05) [11]


> sniknik ©   (04.10.07 16:04) [9]

А чем он компромиссный?


 
Сергей М. ©   (2007-10-04 16:06) [12]

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


 
sniknik ©   (2007-10-04 16:07) [13]

кстати еще надо будет посмотреть, как бы "компромиссный" не занял меньше памяти чем "оптимальный по памяти"... (слишком мало операций, не займут ли они меньше памяти чем организация цикла... по CPU посмотри)


 
sniknik ©   (2007-10-04 16:11) [14]

> А чем он компромиссный?
как чем? работать должен медленнее чем индексная выборка но быстрее чем цикл (они вообще "напряжены", можно кстати цикл while на for заменить он "легче").
и по памяти (размер получающегося кода) должен быть тоже посередине.


 
Kerk ©   (2007-10-04 16:19) [15]


> sniknik ©   (04.10.07 16:11) [14]

Если заменю while на for, то цикл гарантированно выполнится 8 раз..а while выполнится от 0 до 8 раз

Пойду в CPU смотреть :)


 
Dib@zol ©   (2007-10-04 16:25) [16]

function BitsOn(B:BYTE):BYTE;
asm
 XOR BH, BH;
 @1:
 MOV BL, B;
 SHR B, 1;
 AND BL, 1;
 ADD BH, BL;
 CMP B, 0;
 JNZ @1;
 MOV Result, BH;
end;

Ъ?


 
sniknik ©   (2007-10-04 16:26) [17]

> Если заменю while на for
ну не просто же так, логику тоже подправить...

function BitsInByte(B: Byte): Integer;
var i: byte;
begin
 Result := 0;
 for i:= 1 to 8 do
   Result:= Result + byte(B and i > 0);
end;


 
sniknik ©   (2007-10-04 16:36) [18]

[17]
упс... неправильно.

ну, неважно, ты понял. смысл в том что прогнать цикл for лишний раз менее "напряжно", чем постоянная проверка в while.


 
homm ©   (2007-10-04 16:41) [19]

> [18] sniknik ©   (04.10.07 16:36)

Вчитайся в [15]


 
Anatoly Podgoretsky ©   (2007-10-04 16:44) [20]

> sniknik  (04.10.2007 16:26:17)  [17]

Компромисом будет


Result:= Result + byte(B and 1 > 0);
Result:= Result + byte(B and 2 > 0);
Result:= Result + byte(B and 4 > 0);
Result:= Result + byte(B and 8 > 0);
Result:= Result + byte(B and 16 > 0);
Result:= Result + byte(B and 32 > 0);
Result:= Result + byte(B and 64 > 0);
Result:= Result + byte(B and 128 > 0);


 
Dib@zol ©   (2007-10-04 16:51) [21]

> [20] Anatoly Podgoretsky ©   (04.10.07 16:44)

Ну если уж пошла такая пьянка, то компромисс это вот что:

Result:= Result + B and 1 + B and 2 + B and 4 + B and 8 + B and 16 + B and 32 + B and 64 + B and 128;


 
sniknik ©   (2007-10-04 16:52) [22]

> Вчитайся в [15]
вчитался... и в чем противоречие? все вроде так как и сказал.

> Компромисом будет
ага. см. [9].


 
sniknik ©   (2007-10-04 16:56) [23]

> Ну если уж пошла такая пьянка, то компромисс это вот что:
ошибка т.к. 0 + 0 + .... + 128 and 128 = 128, а вовсе не 1 как нужно по условию.


 
oxffff ©   (2007-10-04 17:01) [24]


> Anatoly Podgoretsky ©   (04.10.07 16:44) [20]
> > sniknik  (04.10.2007 16:26:17)  [17]
>
> Компромисом будет
>
>
> Result:= Result + byte(B and 1 > 0);
> Result:= Result + byte(B and 2 > 0);
> Result:= Result + byte(B and 4 > 0);
> Result:= Result + byte(B and 8 > 0);
> Result:= Result + byte(B and 16 > 0);
> Result:= Result + byte(B and 32 > 0);
> Result:= Result + byte(B and 64 > 0);
> Result:= Result + byte(B and 128 > 0);


Можно улучшить используя ASM

BSF—Bit Scan Forward


 
sniknik ©   (2007-10-04 17:03) [25]

> Можно улучшить используя ASM
если улучшиш то это будет не компромиссный а оптимальный вариант. т.что улучшать нельзя... ;)


 
homm ©   (2007-10-04 17:18) [26]

> [22] sniknik ©   (04.10.07 16:52)
> вчитался... и в чем противоречие?

Цикл While работает «пока», а цикл for работает от и до. Колическво шагов, приводящих к резкльтату в цикле for всегда равно 8-и, в while число шаков зависит от исходных данных, и для нуля, равно нулю.


 
clickmaker ©   (2007-10-04 17:20) [27]


> Количество бит в байте

блин, нельзя же так пугать...


 
Kerk ©   (2007-10-04 17:23) [28]

Спасибо, видимо это все то, что нужно :)
Думаю, асм привлекать не стоит.. все-таки про делфи тест


 
Германн ©   (2007-10-04 17:25) [29]


> clickmaker ©   (04.10.07 17:20) [27]

Ну и что? В военное время количество может быть и не равным 8!!


 
Kerk ©   (2007-10-04 17:25) [30]


> homm ©   (04.10.07 17:18) [26]

В среднем while выполнится 4-5 раз


 
homm ©   (2007-10-04 17:30) [31]

> [30] Kerk ©   (04.10.07 17:25)
> В среднем while выполнится 4-5 раз

В среднем цикл выполнится 6,9765625 раз, но для нуля — ноль :)


 
Jeer ©   (2007-10-04 17:49) [32]

На выбор:

function CountOne(x: byte): byte;
begin
 Result := 0;
 while (x<>0) do begin
   x := (x-1) and x;
   Inc(Result);
 end;
end;

function CountOne_1(x: byte): byte;
begin
 x := x - ((x shr 1) and $55);
 x := (x and $33) + (x shr 2) and $33;
end;

function CountOne_2(x: byte): byte;
begin
Result := 0;
while x > 0 do begin
  if (x mod 2) = 1 then
    Inc (Result);
  x := x shr 1;
end;
end;

function CountOne_3(x: byte): byte;
begin
Result := x;
while x <> 0 do begin
   x := x shr 1;
   Result := Result - x;
end;
end;


 
sniknik ©   (2007-10-04 17:50) [33]

homm ©   (04.10.07 17:18) [26]
нет, я про противоречие в моих словах, зачем мне надо было вчитываться в [15]?
чем частный случай с 0 опровергает слова
> смысл в том что прогнать цикл for лишний раз менее "напряжно", чем постоянная проверка в while.
если бы надо было считать "взведенные" биты только в нуле то цикл был бы вообще не нужен, было бы
function BitsInByte(B: Byte): Integer;
begin
 Result:= 0;
end;
(также как и значение B, и сама функция)
ну раз это не так, то всетаки
> прогнать цикл for лишний раз менее "напряжно", чем постоянная проверка в while.


 
Jeer ©   (2007-10-04 18:01) [34]

Еще вариант:

function CountOne_4(x: byte): byte;
var y: LongWord;
begin
  y := x;
  y := y * $08040201;
  y := y shr 3;
  y := y and $11111111;
  y := y * $11111111;
  Result := y shr 28;
end;


 
homm ©   (2007-10-04 18:06) [35]

> [33] sniknik ©   (04.10.07 17:50)
> прогнать цикл for лишний раз менее "напряжно", чем постоянная
> проверка в while.

Понятно. Мне показалось, что это утверждение дано на основе не верных предпосылок.
Значит я просто не согласен с этим утверждением.


 
tesseract ©   (2007-10-04 22:18) [36]


> Понятно. Мне показалось, что это утверждение дано на основе
> не верных предпосылок. Значит я просто не согласен с этим
> утверждением.


А зря - в For  вычисление происходит один раз, в while/repeat каждую итерацию.


 
homm ©   (2007-10-04 22:26) [37]

> [36] tesseract ©   (04.10.07 22:18)
> А зря - в For  вычисление происходит один раз, в while/repeat
> каждую итерацию.

Что? О_о Какие вычисления? Или хочешь сказать для вяснения следующей итерации в for не нужна операция сравнивания? Если есть сомнения, можно глянуть в генерируемый код, в обоих случаях переход держится на ставнении и jnz.


 
sniknik ©   (2007-10-04 23:18) [38]

> Или хочешь сказать для вяснения следующей итерации в for не нужна операция сравнивания?
нужна, но предварительных команд нужно меньше

> Если есть сомнения, можно глянуть в генерируемый код,
берем код
var
 i, n: integer;
begin
 n:= 0;
 for i:= 1 to 100 do
   n:= n + Random(10);

 Label1.Caption:= IntToStr(n);

 n:= 0;
 i:= 99;
 while i <> 0 do begin
   n:= n + Random(10);
   i:= i - 1;
 end;

 Label2.Caption:= IntToStr(n);
end;
глядим
для for выход
dec ebx  
jnz -@0f

для while
dec ebx  
test ebx, ebx
jnz -@11


 
homm ©   (2007-10-04 23:20) [39]

> [38] sniknik ©   (04.10.07 23:18)
> берем код

Что-то ты какой-то странный код взял, речь была о конкретном коде :)
Тем не менее, одна из 8-и итераций займет куда больше времени, нежели одна лишняя инструкция на while.


 
sniknik ©   (2007-10-04 23:36) [40]

> Тем не менее, одна из 8-и итераций займет куда больше времени, нежели одна лишняя инструкция на while.
ну... по поводу слишком малого количества операций я уже высказывал сомнения (не наглядно)... тут спорить глупо.
другое дело если подобный цикл очень длинный или сам по себе используется в другом цикле (ну типа для вычислений суммы "взведенных" битов в массиве из миллионов байт (взяли и применили написанную функцию)). вот тут может сказаться.


 
Германн ©   (2007-10-05 02:11) [41]

<offtop>
Бедный Kerk! Такое количество решений! Да ещё вскорости после сотрясения мозга :-(


 
oxffff ©   (2007-10-05 09:18) [42]


> Германн ©   (05.10.07 02:11) [41]
> <offtop>
> Бедный Kerk! Такое количество решений! Да ещё вскорости
> после сотрясения мозга :-(


function FindBitCount(a:integer):integer;
asm
xor edx,edx;
@Continue:
 bsf ecx,eax;
 jz @done
 inc ecx;
 shr eax,cl;
 inc edx
 jmp @Continue;
@done:
 mov eax,edx;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(inttostr(FindBitCount(123)));
end;


 
Rouse_ ©   (2007-10-05 09:42) [43]

Мдя, че народ с ассемблером творит? Он же для того и дан чтоб использовать его возможности а не только реализовывать алгоритм :)

function BitCount(const Value: Byte): Byte;
asm
 clc
 @@: adc ah, 0
 shr al, 1
 jnz @@
 adc ah, 0
 shr ax, 8
end;


 
oxffff ©   (2007-10-05 09:54) [44]


> Rouse_ ©   (05.10.07 09:42) [43]
> Мдя, че народ с ассемблером творит? Он же для того и дан
> чтоб использовать его возможности а не только реализовывать
> алгоритм :)


А может про  bsf почитать?
Мой пример для 4 байтов, а не для одного. ;)


 
Rouse_ ©   (2007-10-05 09:55) [45]


> А может про  bsf почитать?

А может условие задачи прочитать, где говорится про байт? :)


 
oxffff ©   (2007-10-05 10:03) [46]


> Rouse_ ©   (05.10.07 09:55) [45]
>
> > А может про  bsf почитать?
>
> А может условие задачи прочитать, где говорится про байт?
>  :)


Побитовый сдвиг vs bsf и shr.
Думаю bsf будет шустрее.
Ну и clc для тоже первой итерации тоже Мдя. ;)


 
Rouse_ ©   (2007-10-05 10:20) [47]


> Думаю bsf будет шустрее.

А ты не думай - у тебя компьютер для этого есть, чтоб замерить производительность :)

> Ну и clc для тоже первой итерации тоже Мдя. ;)

Ты по всей видимости считаешь что Carry Flag при входе в функцию перманентно очищается? :) LOL :)))


 
oxffff ©   (2007-10-05 10:21) [48]


> Rouse_ ©   (05.10.07 09:55) [45]
>
> > А может про  bsf почитать?
>
> А может условие задачи прочитать, где говорится про байт?
>  :)


Твой алгоритм медленный да еще и бажный. Сделай так

var a:integer;
begin
a:=32434211234342;
showmessage(inttostr(BitCount(a)));

Получи в результате 165

Так что полный Мдя.


 
oxffff ©   (2007-10-05 10:25) [49]


> Ты по всей видимости считаешь что Carry Flag при входе в
> функцию перманентно очищается? :) LOL :)))


не надо тут LOL.
Ты не понял, у тебя лишний холостой инкремент.  Поправь алгоритм.


 
Rouse_ ©   (2007-10-05 10:28) [50]


> Твой алгоритм медленный да еще и бажный

Чудак, мой алгорит решает задачу в рамках задачи :)
Считает кол-во взведенных бит в байте, а не в Integer. В корайнем случае ничкто не мешает сделать вызов and ax, $FF
А по поводу скорости - замеряй, твой тормозит :)


 
Rouse_ ©   (2007-10-05 10:29) [51]

А, инкремент - согласен, тут ступил :)

function BitCount(const Value: Byte): Byte;
asm
 and ax, $FF
 clc
 shr al, 1
 @@: adc ah, 0
 shr al, 1
 jnz @@
 shr ax, 8
end;


 
Rouse_ ©   (2007-10-05 10:30) [52]

блин, теперь точно CLC не нужен :)))


 
oxffff ©   (2007-10-05 10:33) [53]


> and ax, $FF


Кто я чудак? Ты что милейший?

LOL.
Твой алгоритм 19 байт работает с byte.

Мой код 17 байт работает c integer и шустрее.

Зритель сделает вывод сам, кому из нас незачет.


 
oxffff ©   (2007-10-05 10:36) [54]


> Rouse_ ©   (05.10.07 10:30) [52]
> блин, теперь точно CLC не нужен :)))


Теперь 18 байт. Но [53].

Ладно. Хватит писками мериться. :)
А то со стороны наверно полный LOL.
Звиняй если чем обидел.


 
oxffff ©   (2007-10-05 10:40) [55]


> Rouse_ ©   (05.10.07 10:29) [51]
> А, инкремент - согласен, тут ступил :)
>
> function BitCount(const Value: Byte): Byte;
> asm
>  and ax, $FF
>  clc
>  shr al, 1
>  @@: adc ah, 0
>  shr al, 1
>  jnz @@
>  shr ax, 8
> end;


Вот по размеру хоть идентично. 17 байт.


 
Rouse_ ©   (2007-10-05 10:41) [56]


> Мой код 17 байт работает c integer и шустрее.


Ну это то просто проверить :)

function BitCount(const Value: Byte): Byte;
asm
 and ax, $FF
 shr al, 1
 @@: adc ah, 0
 shr al, 1
 jnz @@
 adc ah, 0
 shr ax, 8
end;

function FindBitCount(a:integer):integer;
asm
xor edx,edx;
@Continue:
bsf ecx,eax;
jz @done
inc ecx;
shr eax,cl;
inc edx
jmp @Continue;
@done:
mov eax,edx;
end;

procedure TForm29.FormCreate(Sender: TObject);
var
 I: Integer;
 V1, V2: DWORD;
begin
 V1 := GetTickCount;
 for I := 0 to 200000000 do
   BitCount(123);
 Memo1.Lines.Add(IntToStr(GetTickCount - V1)); // 5300 - моя победила :)
 V2 := GetTickCount;
 for I := 0 to 200000000 do
   FindBitCount(123);
 Memo1.Lines.Add(IntToStr(GetTickCount - V2)); //6000
end;



> Звиняй если чем обидел.

Да ты что, какие блин обиды? :) Мыж спорили а не ругались :)


 
oxffff ©   (2007-10-05 10:53) [57]


>  5300 - моя победила :)


А вот тут ты лукавишь. Попробуй так

procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
V1, V2: DWORD;
begin
V1 := GetTickCount;
for I := 0 to 20000000 do
  BitCount(128);
Memo1.Lines.Add(IntToStr(GetTickCount - V1)); // 5300 - моя победила :)
V2 := GetTickCount;
for I := 0 to 20000000 do
  FindBitCount(128);
Memo1.Lines.Add(IntToStr(GetTickCount - V2)); //6000
end;

Мой код разгромил твой в 5 раз.

УРА!!!!!!!!!!!!!!!


 
oxffff ©   (2007-10-05 11:01) [58]


> Мой код разгромил твой в 5 раз.
>
> УРА!!!!!!!!!!!!!!!


Мой код считает в 5 раз быстрее для четырех байтов, чем  твой для одного. Итого в 20 раз byte per byte.

Это разгром!!!! УрА!!!!!!! Четыре раза


 
Суслик ©   (2007-10-05 11:03) [59]

на си:


x = (x & 0x55555555) + ((x >>  1) & 0x55555555)
x = (x & 0x33333333) + ((x >>  2) & 0x33333333)
x = (x & 0x0F0F0F0F) + ((x >>  4) & 0x0F0F0F0F)
x = (x & 0x00FF00FF) + ((x >>  8) & 0x00FF00FF)
x = (x & 0x0000FFFF) + ((x >> 16) & 0x0000FFFF)


для 32-битного числа.


 
oxffff ©   (2007-10-05 11:07) [60]


> Суслик ©   (05.10.07 11:03) [59]


offtop.
Дмитрий я последовал твоему совету. Меня приняли.
Спасибо тебе. :)
Осталось подключить безлимитный инет.


 
Суслик ©   (2007-10-05 11:15) [61]


> [59] Суслик ©   (05.10.07 11:03)

это из книги "Алгоритмические трюки для программистов" Генри Уоррен, мл.
Оригинальное название "Hackers"s Delight" Henry S. Warren, Jr.

Там вся книга из таких вот хитрых решений :)


>  [60] oxffff ©   (05.10.07 11:07)

не офтопь - почта есть.


 
Rouse_ ©   (2007-10-05 12:16) [62]


> А вот тут ты лукавишь. Попробуй так

Хе, класс :))) Но 255 рулит по любому :))))


 
oxffff ©   (2007-10-05 12:39) [63]


> Rouse_ ©   (05.10.07 12:16) [62]
>
> > А вот тут ты лукавишь. Попробуй так
>
> Хе, класс :))) Но 255 рулит по любому :))))


Опять лукавиш. У тебя проверяет байт, а меня у 4 байта.
Так что умножай свой результат на четыре. :)

Вот так будет справедливое сравнение .

procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
V1, V2: DWORD;
begin
V1 := GetTickCount;
for I := 0 to 200000000 do
 begin
  BitCount(255);
  BitCount(255);
  BitCount(255);
  BitCount(255);
 end;
Memo1.Lines.Add(IntToStr(GetTickCount - V1)); // 5300 - моя победила :)
V2 := GetTickCount;
for I := 0 to 200000000 do
  FindBitCount($FFFFFF);
Memo1.Lines.Add(IntToStr(GetTickCount - V2)); //6000
end;

Так что здесь тоже победа за мной.

Тебя может спасти только inline. Да и только ручками.

Но на "неплотных" единичках разрыв будет в разы.


 
oxffff ©   (2007-10-05 12:48) [64]


>  FindBitCount($FFFFFF);


FindBitCount($FFFFFFFF);

Но тогда ты лидируешь в 2 раза . А inline сделает разрыв больше.

Спешу согласиться, что на плотных единичках твой код будет быстрее
, тогда как мой быстрее будет на неплотных единичках.
Оно  и понятно
bsf+shr+inc vs shr+adc

Но на "неплотных" единичках разрыв будет в разы.


 
oxffff ©   (2007-10-05 12:49) [65]


> Но на "неплотных" единичках разрыв будет в разы.


А на плотных отставание в разы. :)


 
Jeer ©   (2007-10-05 13:00) [66]

oxffff ©   (05.10.07 11:01) [58]
Rouse_ ©   (05.10.07 10:41) [56]

Попробуйте Jeer ©   (04.10.07 18:01) [34] и удивляйтесь.


 
Суслик ©   (2007-10-05 13:02) [67]


> [66] Jeer ©   (05.10.07 13:00)
> oxffff ©   (05.10.07 11:01) [58]
> Rouse_ ©   (05.10.07 10:41) [56]
>
> Попробуйте Jeer ©   (04.10.07 18:01) [34] и удивляйтесь.


а лучше [59]


 
oxffff ©   (2007-10-05 13:21) [68]


> Jeer ©   (05.10.07 13:00) [66]
> oxffff ©   (05.10.07 11:01) [58]
> Rouse_ ©   (05.10.07 10:41) [56]
>
> Попробуйте Jeer ©   (04.10.07 18:01) [34] и удивляйтесь.
>


А чему собственно?

при значении 0

1625 (Rouse)
1344 (oxffff)                <-
1734 (Jeer)

при значении 128

7204 (Rouse)
2296 (oxffff)                 <-
4844 (Jeer)

при значении 31

3953 (Rouse)                <-
9609 (oxffff)              
4828 (Jeer)

при значении 255

7188 (Rouse)
15812 (oxffff)
5078 (Jeer)                        <-


 
Суслик ©   (2007-10-05 13:40) [69]

а при значении 3242432 ?

может суслик (лень проверять, если честно)


 
Jeer ©   (2007-10-05 14:21) [70]

Какие-то неправильные у вас компьютеры:

0:
1172
881
881

128:
6740
1993
1842

31:
4246
7551
1833

255:
6660
11717
1832


 
Leonid Troyanovsky ©   (2007-10-05 14:30) [71]


> Суслик ©   (05.10.07 13:40) [69]

> может суслик (лень проверять, если честно)

Раз в 10 суслик быстрее oxffff.
На диапазоне 0..MAXINT

--
Regards, LVT.


 
oxffff ©   (2007-10-05 14:35) [72]


> Jeer ©   (05.10.07 14:21) [70]
> Какие-то неправильные у вас компьютеры:


Давайте пригласим независимых тестеров. :)


 
oxffff ©   (2007-10-05 14:38) [73]


> Leonid Troyanovsky ©   (05.10.07 14:30) [71]
>
> > Суслик ©   (05.10.07 13:40) [69]
>
> > может суслик (лень проверять, если честно)
>
> Раз в 10 суслик быстрее oxffff.
> На диапазоне 0..MAXINT
>
> --
> Regards, LVT.


Да ладно вам.
На "неплотных" единичках bsf сделает свое дело.  
А плотных согласен с вами будет быстрее.


 
Jeer ©   (2007-10-05 15:00) [74]


> oxffff ©   (05.10.07 14:35) [72]


> Давайте пригласим независимых тестеров. :)


Да тут целый форум бездельников - пробуйте, тем более - тяпница.:)


 
REA   (2007-10-05 15:13) [75]

Asm BT еще вроде есть, но это в лоб


 
homm ©   (2007-10-05 22:15) [76]

на равномерном диапазоне 0..255:
953
2907
453

Jeer всех сделал.


 
Anatoly Podgoretsky ©   (2007-10-05 22:25) [77]

Все эти тесты показывают их непредсказуемость, зависимость от характера данных. Я уже давно, зная эту особенность, не обращаю на них внимания. Всегда можно написать тест, который покажет превосходство.


 
homm ©   (2007-10-05 22:40) [78]

> [77] Anatoly Podgoretsky ©   (05.10.07 22:25)

Какой может быть характер у данных при тупом переборе значений от 0 до 255 ???


 
oxffff ©   (2007-10-05 23:09) [79]


> на равномерном диапазоне 0..255:


Это как?


 
Leonid Troyanovsky ©   (2007-10-05 23:09) [80]


> homm ©   (05.10.07 22:40) [78]

> Какой может быть характер у данных при тупом переборе значений
> от 0 до 255 ???

Характер же зашел дальше, т.е. вплоть до MAXINT.

--
Regards, LVT.


 
Суслик ©   (2007-10-06 00:14) [81]

не братцы, давайте 4х байтовые числа использовать.
тут я круче буду


 
Anatoly Podgoretsky ©   (2007-10-06 00:18) [82]

> Суслик  (06.10.2007 00:14:21)  [81]

Вот вот, один байтами оперирует, а другой кардиналами.


 
homm ©   (2007-10-06 00:34) [83]

> [82] Anatoly Podgoretsky ©   (06.10.07 00:18)
> один байтами оперирует, а другой кардиналами

А нужно скальпелем ;)


 
Anatoly Podgoretsky ©   (2007-10-06 00:37) [84]

> homm  (06.10.2007 00:34:23)  [83]

Я еще молчу про оперирования тиками, да на разных процессорах, хотя тесты на РСДН четко показали как меняются результаты при смене процессора.
Если уж мерить, то в тактах процессора, и не в циклах, а однократное прохождение теста, цикл только для перебора параметров.


 
guestfromwww   (2007-10-06 01:24) [85]

Кто, где и какую берёт траву?


 
Anatoly Podgoretsky ©   (2007-10-06 01:25) [86]

> guestfromwww  (06.10.2007 01:24:25)  [85]

Вопрос весьма интересный, только к теме не имеет отношения.


 
Германн ©   (2007-10-06 01:41) [87]

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


 
Kerk ©   (2007-10-08 01:23) [88]

Ну вы блин даете :)


 
Германн ©   (2007-10-08 01:26) [89]


> Kerk ©   (08.10.07 01:23) [88]

Ты всех заразил "сотрясением мозгов" :-)



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

Форум: "Основная";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.68 MB
Время: 0.067 c
15-1196017801
Cyrax
2007-11-25 22:10
2007.12.23
JavaScript: "не выпускаем" пользователя из поля ввода, пока...


2-1195824372
Student00
2007-11-23 16:26
2007.12.23
вызов процедур из модуля, delphi


2-1196233150
zeman
2007-11-28 09:59
2007.12.23
Class not found


2-1196273237
Kaliostro
2007-11-28 21:07
2007.12.23
Работа с DBase IV через ADO


1-1190854398
FearG0
2007-09-27 04:53
2007.12.23
Адреса функций в памяти





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