Здравствуйте, Roman Odaisky, Вы писали:
RO>Еще по поводу min/max.
RO>Алгоритм Евклида можно записать так:
RO>RO>unsigned gcd(unsigned x, unsigned y)
RO>{
RO> while(x && y)
RO> {
RO> max(x, y) %= min(x, y);
RO> }
RO> return x + y;
RO>}
RO>
RO>Решил попробовать, осилят ли компиляторы заменить сей код эквивалентным, более эффективным и менее кратким:
RO>RO>unsigned gcd(unsigned x, unsigned y)
RO>{
RO> while(x && y)
RO> {
RO> if(x < y)
RO> {
RO> y %= x;
RO> }
RO> else
RO> {
RO> x %= y;
RO> }
RO> }
RO> return x + y;
RO>}
RO>
Прошу прощения за оффтопик, но все же... При вычислении наибольшего общего делителя легко можно избежать лишних сравнений внутри цикла:
template<typename T>
inline T gcd(T a, T b)
{
while(b)
{
T t = b;
b = a % b;
a = t;
}
return a;
}
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>