New submission from Raymond Hettinger <raymond.hettin...@gmail.com>:

I'd like to resurrect Serhiy's idea for using power-of-two scaling in 
math.hypot() rather than dividing each coordinate by the maximum value.

I drafted a patch.  It looks to be a little faster than what we have now and is 
generally (but not always) more accurate.

For accuracy, the current approach has the advantage that for the largest 
coordinate, (x/max)**2 is exactly 1.0.   If that element is much larger than 
the others, it overpowers the 1/2 ulp error in each of the other divisions.

In contrast, scaling by a power of two is always exact, but the squaring of the 
largest scaled coordinate is no longer exact.

The two approaches each have some cases that are more accurate than the other.  
I generated 10,000 samples.  In 66% of the cases, the two results agree.  In 
26% of the cases, scaling by a power of two was more accurate.  In the 
remaining 8%, the division by max was more accurate.   The standard deviation 
of relative errors was better using power-of-two scaling.  These results were 
consistent whether using 2, 3, or 20 dimensions.

As expected, multiplying by a power of two was a bit faster than dividing by an 
arbitrary float.

----------
components: Library (Lib)
messages: 375089
nosy: mark.dickinson, rhettinger, serhiy.storchaka, tim.peters
priority: low
severity: normal
status: open
title: Scale by power of two in math.hypot()
type: enhancement
versions: Python 3.10

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue41513>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to