Еще по поводу min/max.
Алгоритм Евклида можно записать так:
unsigned gcd(unsigned x, unsigned y)
{
while(x && y)
{
max(x, y) %= min(x, y);
}
return x + y;
}
Решил попробовать, осилят ли компиляторы заменить сей код эквивалентным, более эффективным и менее кратким:
unsigned gcd(unsigned x, unsigned y)
{
while(x && y)
{
if(x < y)
{
y %= x;
}
else
{
x %= y;
}
}
return x + y;
}
Не осилили, ни VC8, ни MinGW 3.4.2.
Особенно смешно выглядит вариант g++:
cmpl %eax, %ecx
jl L4
movl %edi, %ebx
L4:
cmpl %eax, %ecx