On Friday, 5 August 2016 at 09:40:23 UTC, Walter Bright wrote:
On 8/5/2016 12:43 AM, Ilya Yaroshenko wrote:
You are wrong that there are far fewer of those cases. This is
naive point of
view. A lot of netlib math functions require exact IEEE
arithmetic. Tinflex
requires it. Python C backend and Mir library require exact
IEEE arithmetic.
Atmosphere package requires it, Atmosphere is used as
reference code for my
publication in JMS, Springer. And the most important case: no
one top scientific
laboratory will use a language without exact IEEE arithmetic
by default.
I'd appreciate it if you could provide links to where these
requirements are. I can't find anything on Tinflex, for example.
1. https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
mathmodule.c, math_fsum has comment:
Depends on IEEE 754 arithmetic guarantees and half-even
rounding.
The same algorithm also available in Mir. And it does not work
with 32 bit DMD.
2. sum_kbn in
https://github.com/JuliaLang/julia/blob/master/base/reduce.jl
requires ieee arithmetic. The same algorithm also available in
Mir.
3. http://www.netlib.org/cephes/
See log2.c for example:
z = x - 0.5;
z -= 0.5;
y = 0.5 * x + 0.5;
This code requires IEEE. And you can found it in Phobos std.math
4. Mir has 5 types of summation, and 3 of them requires IEEE.
5. Tinflex requires IEEE arithmetic because extended precision
may force algorithm to choose wrong computation branch. The most
significant part of original code was written in R, and the
scientists who create this algorithm did not care about non IEEE
compilers at all.
6. Atmosphere requires IEEE for may functions such as
https://github.com/9il/atmosphere/blob/master/source/atmosphere/math.d#L616
Without proper IEEE rounding the are not guarantee that this
functions will stop.
7. The same true for real world implementations of algorithms
presented in Numeric Recipes, which uses various series expansion
such as for Modified Bessel Function.