/* Tail call optimizations would reverse the order of multiplications in func(). */ double func (const double *array) { double d = *array; if (d == 1.0) return d; else return d * func (array + 1); } int main () { double values[] = { __DBL_MAX__, 2.0, 0.5, 1.0 }; if (func (values) != __DBL_MAX__) abort (); exit (0); }