My understanding is that NumPy does NOT currently support a direct FMA operation "natively." However, higher-level routines like `numpy.linalg.solve` that are linked to MKL or BLAS DO take advantage of FMA within the underlying libraries.
On Mon, Jan 16, 2017 at 10:06 AM, Guido van Rossum <gvanros...@gmail.com> wrote: > Does numpy support this? > > --Guido (mobile) > > On Jan 16, 2017 7:27 AM, "Stephan Houben" <stephan...@gmail.com> wrote: > >> Hi Steve, >> >> Very good! >> Here is a version which also handles the nan's, infinities, >> negative zeros properly. >> >> =============== >> import math >> from fractions import Fraction >> >> def fma2(x, y, z): >> if math.isfinite(x) and math.isfinite(y) and math.isfinite(z): >> result = float(Fraction(x)*Fraction(y) + Fraction(z)) >> if not result and not z: >> result = math.copysign(result, x*y+z) >> else: >> result = x * y + z >> assert not math.isfinite(result) >> return result >> =========================== >> >> Stephan >> >> >> 2017-01-16 12:04 GMT+01:00 Steven D'Aprano <st...@pearwood.info>: >> >>> On Mon, Jan 16, 2017 at 11:01:23AM +0100, Stephan Houben wrote: >>> >>> [...] >>> > So the following would not be a valid FMA fallback >>> > >>> > double bad_fma(double x, double y, double z) { >>> > return x*y + z; >>> > } >>> [...] >>> > Upshot: if we want to provide a software fallback in the Python code, >>> we >>> > need to do something slow and complicated like musl does. >>> >>> I don't know about complicated. I think this is pretty simple: >>> >>> from fractions import Fraction >>> >>> def fma(x, y, z): >>> # Return x*y + z with only a single rounding. >>> return float(Fraction(x)*Fraction(y) + Fraction(z)) >>> >>> >>> When speed is not the number one priority and accuracy is important, >>> its hard to beat the fractions module. >>> >>> >>> -- >>> Steve >>> _______________________________________________ >>> Python-ideas mailing list >>> Python-ideas@python.org >>> https://mail.python.org/mailman/listinfo/python-ideas >>> Code of Conduct: http://python.org/psf/codeofconduct/ >>> >> >> >> _______________________________________________ >> Python-ideas mailing list >> Python-ideas@python.org >> https://mail.python.org/mailman/listinfo/python-ideas >> Code of Conduct: http://python.org/psf/codeofconduct/ >> > > _______________________________________________ > Python-ideas mailing list > Python-ideas@python.org > https://mail.python.org/mailman/listinfo/python-ideas > Code of Conduct: http://python.org/psf/codeofconduct/ > -- Keeping medicines from the bloodstreams of the sick; food from the bellies of the hungry; books from the hands of the uneducated; technology from the underdeveloped; and putting advocates of freedom in prisons. Intellectual property is to the 21st century what the slave trade was to the 16th.
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/