--- old/src/share/classes/java/util/stream/DoubleStream.java 2013-10-09 16:37:23.000000000 -0700 +++ new/src/share/classes/java/util/stream/DoubleStream.java 2013-10-09 16:37:23.000000000 -0700 @@ -502,22 +502,42 @@ BiConsumer combiner); /** - * Returns the sum of elements in this stream. The sum returned can vary - * depending upon the order in which elements are encountered. This is due - * to accumulated rounding error in addition of values of differing - * magnitudes. Elements sorted by increasing absolute magnitude tend to - * yield more accurate results. If any stream element is a {@code NaN} or - * the sum is at any point a {@code NaN} then the sum will be {@code NaN}. - * This is a special case of a - * reduction and is + * Returns the sum of elements in this stream. + * + * Summation is a special case of a reduction. If + * floating-point summation were exact, this method would be * equivalent to: + * *
{@code
      *     return reduce(0, Double::sum);
      * }
* + * However, since floating-point summation is not exact, the above + * code is not necessarily equivalent to the summation computation + * done by this method. + * *

This is a terminal * operation. * + *

If any stream element is a NaN or the sum is at any point a NaN + * then the sum will be NaN. + * + * @apiNote The value of a floating-point sum is a function both + * of the input values as well as the order of addition + * operations. The order of addition operations of this method is + * intentionally not defined to allow for implementation + * flexibility to improve the speed and accuracy of the computed + * result. + * + * In particular, this method may be implemented using compensated + * summation or other technique to reduce the error bound in the + * numerical sum compared to a simple summation of {@code double} + * values. + * + * Sorting values by increasing absolute magnitude tends to yield + * more accurate results. + * * @return the sum of elements in this stream */ double sum();