src/share/classes/java/util/stream/DoubleStream.java
Print this page
*** 500,525 ****
<R> R collect(Supplier<R> supplier,
ObjDoubleConsumer<R> accumulator,
BiConsumer<R, R> 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
! * <a href="package-summary.html#Reduction">reduction</a> and is
* equivalent to:
* <pre>{@code
* return reduce(0, Double::sum);
* }</pre>
*
* <p>This is a <a href="package-summary.html#StreamOps">terminal
* operation</a>.
*
* @return the sum of elements in this stream
*/
double sum();
/**
--- 500,545 ----
<R> R collect(Supplier<R> supplier,
ObjDoubleConsumer<R> accumulator,
BiConsumer<R, R> combiner);
/**
! * Returns the sum of elements in this stream.
! *
! * Summation is a special case of a <a
! * href="package-summary.html#Reduction">reduction</a>. If
! * floating-point summation were exact, this method would be
* equivalent to:
+ *
* <pre>{@code
* return reduce(0, Double::sum);
* }</pre>
*
+ * However, since floating-point summation is not exact, the above
+ * code is not necessarily equivalent to the summation computation
+ * done by this method.
+ *
+ * <p>If any stream element is a NaN or the sum is at any point a NaN
+ * then the sum will be NaN.
+ *
+ * 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.
+ *
* <p>This is a <a href="package-summary.html#StreamOps">terminal
* operation</a>.
*
+ * @apiNote Sorting values by increasing absolute magnitude tends to yield
+ * more accurate results.
+ *
* @return the sum of elements in this stream
*/
double sum();
/**
*** 576,598 ****
* @return the count of elements in this stream
*/
long count();
/**
! * Returns an {@code OptionalDouble} describing the arithmetic mean of elements of
! * this stream, or an empty optional if this stream is empty. The average
! * returned can vary depending upon the order in which elements are
! * encountered. This is due to accumulated rounding error in addition of
! * elements of differing magnitudes. Elements sorted by increasing absolute
! * magnitude tend to yield more accurate results. If any recorded value is
! * a {@code NaN} or the sum is at any point a {@code NaN} then the average
! * will be {@code NaN}. This is a special case of a
! * <a href="package-summary.html#Reduction">reduction</a>.
*
* <p>This is a <a href="package-summary.html#StreamOps">terminal
* operation</a>.
*
* @return an {@code OptionalDouble} containing the average element of this
* stream, or an empty optional if the stream is empty
*/
OptionalDouble average();
--- 596,628 ----
* @return the count of elements in this stream
*/
long count();
/**
! * Returns an {@code OptionalDouble} describing the arithmetic
! * mean of elements of this stream, or an empty optional if this
! * stream is empty.
! *
! * If any recorded value is a NaN or the sum is at any point a NaN
! * then the average will be NaN.
! *
! * <p>The average returned can vary depending upon the order in
! * which values are recorded.
! *
! * This method may be implemented using compensated summation or
! * other technique to reduce the error bound in the {@link #sum
! * numerical sum} used to compute the average.
! *
! * <p>The average is a special case of a <a
! * href="package-summary.html#Reduction">reduction</a>.
*
* <p>This is a <a href="package-summary.html#StreamOps">terminal
* operation</a>.
*
+ * @apiNote Elements sorted by increasing absolute magnitude tend
+ * to yield more accurate results.
+ *
* @return an {@code OptionalDouble} containing the average element of this
* stream, or an empty optional if the stream is empty
*/
OptionalDouble average();