< prev index next >

src/java.base/share/classes/java/util/DoubleSummaryStatistics.java

Print this page
rev 52916 : [mq]: 8214761-Bug-in-parallel-Kahan-summation-implementation-for-Doublestream-sum

*** 1,7 **** /* ! * Copyright (c) 2012, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 62,72 **** * @since 1.8 */ public class DoubleSummaryStatistics implements DoubleConsumer { private long count; private double sum; ! private double sumCompensation; // Low order bits of sum private double simpleSum; // Used to compute right sum for non-finite inputs private double min = Double.POSITIVE_INFINITY; private double max = Double.NEGATIVE_INFINITY; /** --- 62,72 ---- * @since 1.8 */ public class DoubleSummaryStatistics implements DoubleConsumer { private long count; private double sum; ! private double sumCompensation; // Negative low order bits of sum private double simpleSum; // Used to compute right sum for non-finite inputs private double min = Double.POSITIVE_INFINITY; private double max = Double.NEGATIVE_INFINITY; /**
*** 152,162 **** */ public void combine(DoubleSummaryStatistics other) { count += other.count; simpleSum += other.simpleSum; sumWithCompensation(other.sum); ! sumWithCompensation(other.sumCompensation); min = Math.min(min, other.min); max = Math.max(max, other.max); } /** --- 152,162 ---- */ public void combine(DoubleSummaryStatistics other) { count += other.count; simpleSum += other.simpleSum; sumWithCompensation(other.sum); ! sumWithCompensation(-other.sumCompensation); min = Math.min(min, other.min); max = Math.max(max, other.max); } /**
*** 237,247 **** * * @return the sum of values, or zero if none */ public final double getSum() { // Better error bounds to add both terms as the final sum ! double tmp = sum + sumCompensation; if (Double.isNaN(tmp) && Double.isInfinite(simpleSum)) // If the compensated sum is spuriously NaN from // accumulating one or more same-signed infinite values, // return the correctly-signed infinity stored in // simpleSum. --- 237,247 ---- * * @return the sum of values, or zero if none */ public final double getSum() { // Better error bounds to add both terms as the final sum ! double tmp = sum - sumCompensation; if (Double.isNaN(tmp) && Double.isInfinite(simpleSum)) // If the compensated sum is spuriously NaN from // accumulating one or more same-signed infinite values, // return the correctly-signed infinity stored in // simpleSum.
< prev index next >