On 29/09/16 10:54 +0200, Rainer Orth wrote:
Hi Jonathan,This adds the new 3D std::hypot() functions. This implementation seems to be faster than the naïve sqrt(x*x + y*y + z*z) implementation, or hypot(hypot(x, y), z), and should be a bit more accurate at very large or very small values due to reducing the arguments by the largest one. Improvements welcome though, as this is not my forte. The test might not be very good, but tests some small integer values and some other values where accuracy is lost for one or other of the alternative implementations mentioned above. If this FAILs for some 32-bit targets we might need to adjust the tolerances or the dg-options. * doc/xml/manual/status_cxx2017.xml: Update status. * include/c_global/cmath (hypot): Add three-dimensional overloads. * testsuite/26_numerics/headers/cmath/hypot.cc: New. Tested powerpc64le-linux and x86_64-linux, committed to trunk.the new test currently FAILs on Solaris 12 (both SPARC and x86): +FAIL: 26_numerics/headers/cmath/hypot.cc (test for excess errors) +WARNING: 26_numerics/headers/cmath/hypot.cc compilation failed to produce execu table Excess errors: /vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/26_numerics/headers/cmath/hypot.cc:38: error: no matching function for call to 'hypot(double, double, double)' /vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/26_numerics/headers/cmath/hypot.cc:38: error: no matching function for call to 'hypot(double, double, double)' /vol/gcc/src/hg/trunk/local/libstdc++-v3/testsuite/26_numerics/headers/cmath/hypot.cc:38: error: template argument 2 is invalid and many more.
That would suggest Solaris uses include/c_std/cmath (where I forgot to add the new overloads) rather than include/c_global/cmath ... is that right?
