code: public final double updateAndGet(DoubleUnaryOperator updateFunction)
      {
          double prev, next;
          do
          {
              prev = get();
              next = updateFunction.applyAsDouble(prev);
          }
          while (!compareAndSet(prev, next));
          return next;
      }
docs: Atomically updates the current value with the results of applying the
  given function, returning the updated value. The function should be
  side-effect-free, since it may be re-applied when attempted updates fail
  due to contention among threads.
  
  @param updateFunction a side-effect-free function
  @return the updated value