Joe / Dmitry, On Apr 12, 2016, at 5:21 PM, joe darcy <joe.da...@oracle.com> wrote:
> Please review the changes for > > JDK-4851642: Add fused mac to Java math library > http://cr.openjdk.java.net/~darcy/4851642.0/ > > Fused mac (multiply-accumulate) is a ternary floating-point operation which > accepts three inputs, a, b, c, and computes > > a * b + c > > with a single rounding error rather than the usual two rounding errors (a > first for the multiply, a second one for the add). A couple of points of curiosity. Firstly, is this not “fused multiply-add” rather than “fused multiply-accumulate?” Secondly, why the choice of name “fusedMac()” instead of the common “fma()” or the longer but perhaps clearer “fusedMultiplyAdd()?” A picayune javadoc point: in the unordered lists <ul></ul> should “</li>” be used to close the list items? On Apr 13, 2016, at 5:41 AM, Dmitry Nadezhin <dmitry.nadez...@gmail.com> wrote: I concur with Dmitry’s points. With respect to the second one, > 2) Lines Math:1508-1525 could be simpler: > ==== > double result = a * b + c; > return Double.isNaN(result) && Double.isFinite(a) && Double.isFinite(b) > ? c : result; > ==== not trusting this to my own visual inspection, I wrote nested loops to run a, b, and c over double[] values = new double[] { -0.0, 0.0, +0.0, -42.0, 42.0, -Double.MAX_VALUE, Double.MAX_VALUE, Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY }; and there is no difference between the webrev and Dmitry’s suggestion above for the cases where !Double.isFinite(a) || !Double.isFinite(b) || !Double.isFinite(c) == true Brian