Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

XOR для массива


Страницы:   1 2 3 4

MikeZ ©   (2006-06-04 16:30:00) 

Всем день добрый!

Надо сделать XOR для чисел, являющихся элементами массива.
Сейчас делаю a[i] xor b[i], перебирая так весь массив.

Есть ли какой-нибудь способ делать это по-красивее и, главное, побыстрее.


Pavia   (2006-06-05 21:23:00) [21]

Kolan ©
3 уровень плюс не стандартная плюс регистры.
Стандарт паскаля мы уже разобрали там про это ни слова.

Сейчас под рукой только D7. Хотя кодил на всех начиная с D4 и зоканчивая D7. D8 Не вынес и снес, глючная больно.


tesseract   (2006-06-05 21:17:00) [22]


> Какой же это косяк? Просто стандарт языка. Насчет FreePascal
> тоже сомневаюсь, что там "такого нет". Все-таки, такое поведение
> переменной-счетчика цикла еще из Паскаля идет, а они ведь
> поддерживают совместимость.

Кстати кроме break и exit возможно и изменение состояния счётчика, после выхода из цикла он может быть меньше макс значения , больше макс значения  или равен макс значению.
Borland заявляет, что не факт что текущее состояние дел сохраниться в следующих выпусках (из книги по D5 если не ошибаюсь).


Kolan   (2006-06-05 21:12:00) [23]


> Выдал 5

С оптимизацией?


Pavia   (2006-06-05 21:09:00) [24]

В доках не видно на практика код
var
I: Integer;
begin
for I := 1 to 5 do;
ShowMessage(IntToStr(I))
end
Выдал 5


begin...end   (2006-06-05 21:09:00) [25]

> Pavia ©   (05.06.06 21:04) [40]

> Я лично решил на Free Pascal перебираться. Там этого касяка
> нет.

LOL, уважаемый.


Джо   (2006-06-05 21:05:00) [26]

> [40] Pavia ©   (05.06.06 21:04)
> Джо
> Я лично решил на Free Pascal перебираться. Там этого касяка
> нет.

Какой же это косяк? Просто стандарт языка. Насчет FreePascal тоже сомневаюсь, что там "такого нет". Все-таки, такое поведение переменной-счетчика цикла еще из Паскаля идет, а они ведь поддерживают совместимость.


Pavia   (2006-06-05 21:04:00) [27]

Джо
Я лично решил на Free Pascal перебираться. Там этого касяка нет.
Что-то я много на спамил. Все закругляюсь.


Джо   (2006-06-05 20:58:00) [28]

> [36] Pavia ©   (05.06.06 20:48)
> Немного поразмыслив пришол к выводу,

Да не нужно тут размышлять, не нужно. Достаточно следовать тому, что говорят сами разработчики компилятора и не искать скрытого смысла там, где его нет :)


begin...end   (2006-06-05 20:52:00) [29]

> Pavia ©   (05.06.06 20:48) [36]

> значение будет не определенно только в том случае если мы
> выйдим используя Break или exit

LOL, уважаемый.

var
 I: Integer;
begin
 for I := 1 to 5 do
   if I = 3 then Break;
 ShowMessage(IntToStr(I))
end


Pavia   (2006-06-05 20:50:00) [30]

Про это я знаю. Сам пару раз на тыкался. ;-)


Pavia   (2006-06-05 20:48:00) [31]

Немного поразмыслив пришол к выводу, что ошибки нет значение будет не определенно только в том случае если мы выйдим используя Break или exit. О чем так коряво и написанно.


begin...end   (2006-06-05 20:37:00) [32]

> Pavia ©   (05.06.06 20:28) [34]

> Я считаю ошибкой...

LOL, уважаемый.

var
 I: Integer;
begin
 for I := 1 to 5 do;
 ShowMessage(IntToStr(I))
end


Pavia   (2006-06-05 20:28:00) [33]

After the for statement terminates (provided this was not forced by a break or an exit procedure), the value of counter is undefined.
Я считаю ошибкой(не давно еще ошибка поподалась). Но вы в праве им верить.


begin...end   (2006-06-05 20:14:00) [34]

> tesseract ©   (05.06.06 12:16) [17]

> насчёт скорости посмотрите pascal-реализацию system.move.

Зачем?


Джо   (2006-06-05 20:08:00) [35]

After the for statement terminates, the value of counter is undefined.
Delphi Help, "For statesments" topic.


Pavia   (2006-06-05 20:06:00) [36]

Прочел там написанно что в канце цикла указывается  final-value  конечное значение. Как оно может быть не определенно???

Про то что не определенно. Так переводить надо вниметельней.
After a for-statement is executed,
other than being left by a goto-statement, the control-variable shall be undefined. Да написанно что не определенно, но читать нужно внимательней. Написанно сдесь, что значение переменной будет не определенно если выйти из цикла используя goto.
После того как будит начито выполнение for-конструкции, кроме того если будет остановленно используя goto-конструкцию,  control-variable будет не определенно.

Известный факт.


tesseract   (2006-06-05 15:32:00) [37]


> То MBO стандарт покажи. Или где об этом написанно.


http://www.moorecad.com/standardpascal/home.html


Pavia   (2006-06-05 15:26:00) [38]

То MBO стандарт покажи. Или где об этом написанно.

Сдвиг и сложение при вычисление адресса занимает ровно один такт.
Inc(wA); Inc(wB);
Оптимизатор я проверил в давнном случае он использует регистры. Так что простой только произходит из-за числа инструкций.


tesseract   (2006-06-05 14:59:00) [39]


> Бред, счетчик после цикла должен быть ровно таким каким
>  его задал программер, а не оптимизатор. Иначе компилятор
> на свалку.


Это официальное предупреждение Borland.
И на самом деле счётчик в конце цикла может иметь непредсказуемое значение (хотя я с таким не сталкивался).


> Дело в том что компилятор не умеет хорошо оптимизировать
>  Inc(wA); Inc(wB);

Современный суперскаляр должен  прогнать это за такт, хотя должен и прогонит вещи разные :-)


> Сдвиг уже предусмотрен в процессоре и не занимает процессорного
> времени.


Не напрягает математический сопроцессор будем точнее, он действительно почти бесплатен.


> При индексированном способе доступа к элементам массива
> используется И сдвиг И сложение.


Сдвиг проц не напряжёт.


Kolan   (2006-06-05 14:58:00) [40]


> Сдвиг уже предусмотрен в процессоре и не занимает процессорного
> времени.
>

Что вообще бесплатно? Не занимает вообще?


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо