This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Define 3-argument overloads of std::hypot for C++17 (P0030R1)


On 28/09/16 12:40 +0000, Joseph Myers wrote:
On Wed, 28 Sep 2016, Jonathan Wakely wrote:

On 27/09/16 23:28 +0000, Joseph Myers wrote:
> On Tue, 27 Sep 2016, Jonathan Wakely wrote:
>
> > 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.
>
> Should I take it from this implementation that C++ is not concerned by
> certain considerations that would arise for C: spurious underflow
> exceptions from the scaling when some arguments much larger than others;
> spurious "invalid" exceptions from the comparisons when any argument is
> (quiet) NaN; handling of mixed (quiet) NaN and Inf arguments (where ISO C
> Annex F has Inf returned, not NaN)?

The entire spec from the C++ draft is:  Returns: √ x^2 + y^2 + z^2

As a further issue: even if you ignore exceptions and Annex F issues, and
don't have NaN arguments, if you have an Inf argument it will be the
largest, and so your code will do Inf/Inf, and so return NaN, if any
argument is Inf (when obviously the correct answer in that case is Inf).

I've opened https://gcc.gnu.org/PR77776 but I don't plan to work on
it.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]