Имхо b=a+1; c=a+b; d=c*c; , только -O2 надо поставить, а то еще стековые переменные создаст -- будет числа тягать в память и обратно! (или за gcc не водится?)
А вообще-то зависит от _процессора_, компилятора, настроек оптимизации...
Общий метод, конечно,
P(x) == a0 + x*(a1 + x*(a2 + x*(....)))
это если разложения на множители хорошего нет или замены переменных... (как в примере)
Первое приближение:
++1 -- это инкремент, операция очень короткая.
4*а или 2*а это сдвиг влево на два или один бит, то есть операция короткая
Сложение тоже короткая операция.
Стало быть длинная операция это а*а или (...)*(...), а она единственная
в обоих вариантах.
Второе приближение:
а*а делает мат.сопроцессор, а остальное простой процессор, стало быть
такую операцию надо начать выполнять первой, затем выполнить 4*a+1, а затем уже
закончить вычисление.
Тогда сопроцессор будет работать параллельно с простым процессором.
Это все слова, если бы это делать на 8086, да на ассемблере, то да.