code: public void update(final double datum) {
      final double d = (datum == 0.0) ? 0.0 : datum; // canonicalize -0.0, 0.0
      final long[] data = { Double.doubleToLongBits(d) };// canonicalize all NaN forms
      final long[] arr = hash(data, seed);
      hashUpdate(arr[0], arr[1]);
    }
docs: Present the given double (or float) datum as a potential unique item.
  The double will be converted to a long using Double.doubleToLongBits(datum),
  which normalizes all NaN values to a single NaN representation.
  Plus and minus zero will be normalized to plus zero.
  The special floating-point values NaN and +/- Infinity are treated as distinct.
  
  @param datum The given double datum.