code: float stickyRound(double dval)
  	{
  		long lbits = Double.doubleToLongBits(dval);
  		long binexp = lbits & expMask;
  		if (binexp == 0L || binexp == expMask)
  		{
  			// what we have here is special.
  			// don't worry, the right thing will happen.
  			return (float) dval;
  		}
  		lbits += (long) roundDir; // hack-o-matic.
  		return (float) Double.longBitsToDouble(lbits);
  	}
docs: /*
  Round a double to a float.
  In addition to the fraction bits of the double,
  look at the class instance variable roundDir,
  which should help us avoid double-rounding error.
  roundDir was set in hardValueOf if the estimate was
  close enough, but not exact. It tells us which direction
  of rounding is preferred.