Peter Levart peter.levart at gmail.com
Tue Jan 8 14:38:13 UTC 2013

```On 01/07/2013 08:07 PM, Joe Darcy wrote:
> Hello,
>
> I had a question about how the double accumulation logic was intended
> to be used.  I've taken a quick look at the code and it uses
> straightforward "sum = sum + nextValue" code to compute the double
> sum.  Summing doubles values with code numerical accuracy is
> surprisingly tricky and if the DoubleAccumulator code is meant for
> wide use, I'd recommend using instead some form of compensated summation:
>
>     http://en.wikipedia.org/wiki/Kahan_summation_algorithm

Hello Joe,

It's very hard to program such algorithm in Java. Guess what prints the
following code:

double x = 1.0E100;
double a = 1d;
double y = x + a;
double diff = y - x;
double c = a - diff;
System.out.println(diff);
System.out.println(c);

Do you have any idea how  to do that (still using local variables)?

Regards, Peter

>
> Thanks,
>
> -Joe
>
> On 1/5/2013 10:10 AM, Chris Hegarty wrote:
>> As part of JEP 155 we are proposing to add the following public
>> classes to support Scalable Updatable Variables, DoubleAccumulator,
>>
>> These have been written by Doug Lea, with assistance from members of
>> the former JCP JSR-166 Expert Group.
>>
>> Webrev and javadoc are at:
>>   http://cr.openjdk.java.net/~chegar/8005311/ver.00/
>>
>> Since Doug is the author, I am taking a reviewer/sponsor role.
>>
>> Here are my initial comments.
>>  - There are various places in DoubleAccmulator where there are broken
>>    links to #sum ( I think it is just a cut'n'paste error ). These
>>    should be #get.
>>  - Accumulators
>> value} ??
>>  - Accumulators
>>    Does the 'identity' value need further explanation?
>>
>> Note: There is one minor change to the implementation. Currently in
>> the jdk8 repo j.u.f.DoubleBinaryOperator defines operateAsDouble.
>> This method has been renamed to applyAsDouble in the lambda/lambda
>> repo. When these changes are sync'ed from lambda/lambda this can be
>> reverted. A similar comment has been added to the code.
>>
>> -Chris.
>

```