- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
int function BinarySearch (Array A, int Lb, int Ub, int Key);
begin
do forever
M = (Lb + Ub)/2;
if (Key < A[M]) then
Ub = M - 1;
else if (Key > A[M]) then
Lb = M + 1;
else
return M;
if (Lb > Ub) then
return -1;
end;
внимание на строчку №04
P.S. Где-то тут уже обсуждались непереполняющиеся алгоритмы для поиска среднего арифметического... Кажется, Царь еще в этом участвовал.
именно
> Кажется, Царь еще в этом участвовал.
эпично, а я пропустил. нетрудно будет выковырять линк на обсуждение?
[spoiler]на x86_64 в сишке и жабе инт остается 32-битным.[/spoiler]
в какой?
в gcc и в vc могут быть разные мнения
> да нахуй такие большие массивы
Причем не просто большие массивы, а большие упорядоченные массивы.
одно дело, когда у тебя приложение, и ты полностью контролируешь данные.
другое дело, когда у тебя библиотека (скажем, опенсорс на гитхабе) и ты не знаешь, как ее будут иметь использовать.
а скажем, ты подключаешь чью-то зависимость, а там баг - из-за которого раз в миллиард лет ты попадаешь на миллиард баксов и это произошло. далее сценарий и выводы оставляю почти земляку.
включая border/invalid cases.
случай с огромным массивом и переполнением - классический border case.
Индекс какой-нибудь ниофорджа или бигдаты
На интерпретируемый PHP? :)
А ну да, забыл. Они же вроде этот компилятор пыхи и мутили?
Кто нибудь знает как определить, что функция находится в потоке, и идентифицировать этот поток относительно быстрыми методами?
Что значит в потоке? Любая функция исполняется в каком-нибудь потоке, даже main() :)
И используемые тобой язык, библиотеку/фреймворк и операционку хотя бы назови... мы ж не телепаты, чтобы все это угадывать...
P.S. В общем виде ответ звучит так: "Есть некая функция, которая возвращает id потока. Запиши где-нибудь в main'е id главного потока и сравнивай айди текущего с ним."
Линух: gettid()
Кресты 11: std::this_thread::get_id()
:D
П.с. раз уж начали минусовать, доведите дело до конца. Вон, 2 минуса осталось.
ну тогда упасть с эксепшеном чтобы операционка записала дамп, а потом настроить её так чтобы она заново запустила твою программу в случае падения и при запуске считать дамп, открыть его дебагфункциями и найти там стек
Но Pid при этом сменится.
тогда нужно в кажом потоке вызывать специальную функцию, например Potok1() чтобы найти её в стеке и понять что это твой поток. Таких функций советую сделать много чтобы хватило на все потоки.
кстати, в линуксе же нету JIT debugging для postmorten (Как AeDebug в венде).
Выходит надо сразу под gdb запускать
но вариант крешем и перезапуском мне нравится
я даже знаю как скрипт для дебагера написать чтобы он перезапускал