May 20th, 2007

nyaload

(no subject)

Часто на упаковке чая можно встретить "заварить при температуре N градусов". Кто как с этим справляется? =) Ведь градусник, который может измерять такую температуру (85°, 90° и тп), - в хозяйстве редкость...
Я лично решаю проблему так - только что вскипевшую 100-градусную воду, смешиваю в нужной пропорции с водой комнатной температуы (на стене висит градусник). Скажем 1/4*20° + 3/4*100° - это 80°.
nyaload

Проверка валидности индекса массива без конструкций перехода.

Collapse )
updated: не надо так делать на x86, у них с таким предсказанием перехода всё в порядке =)

Ну и вообще фокусы
mask = ((a-b)>>31); //a < b -> value1
mask = (a^b)>>31; //а и b имеют разные знаки -> value1
mask = (a&b) //оба отрицательные -> value1
mask = (a|b) //оба неотрицательные -> value2
return (mask & value1) | (~mask & value2) часто полезные (зависит от компилятора).
i -= (int(a-b)>>31); //увеличить i на единицу, если a<b.


Не стоит бросаться их применять везде, Intel C++ Compiler например max(x,y) который (x<y) ? y : x может соптимизировать, и так же может соптимизировать встроенную функцию abs, так что лучше без premature optimizations.

PS. Да, для тех то не в курсе, Collapse )