Форум: "Основная";
Текущий архив: 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.045 c