Re[3]: max(x, y) %= min(x, y)
От: Roman Odaisky Украина  
Дата: 13.04.07 14:03
Оценка:
Еще по поводу 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
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.