With -O3, in a inner loop, that iterates perhaps 10^9 times,
using 
        double opt[1000000];
        for (....)
         for (...)
                opt[i] = std::max( opt[i-1] , opt[i-2] );

is much much slower than
        for (....)
         for (...)
                opt[i] = opt[i-1]>opt[i-2]? opt[i-1]: opt[i-2];

Looking at the implementation std::max in stl_algobase.h
 template<typename _Tp>
    inline const _Tp&
    max(const _Tp& __a, const _Tp& __b)
    {
      __glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
      //return  __a < __b ? __b : __a;
      if (__a < __b)
        return __b;
      return __a;
    }

It is "inline" and the function arguments are const-references,
So shouldn't it be as fast as the ?: tri-operator version?

Can anyone else observe this?

Rds,
PS: I've noticed this on x86.
PS: I've come across some bug in Sun studio's compilers that seemed related,
but perhaps isn't:
http://bugs.sun.com/view_bug.do?bug_id=6498247

Reply via email to