public TimeDuration multiply()

in ratis-common/src/main/java/org/apache/ratis/util/TimeDuration.java [244:272]


  public TimeDuration multiply(double multiplier) {
    final double product = duration * multiplier;
    final long rounded = Math.round(product);

    if (unit.ordinal() != TimeUnit.values().length - 1) {
      // check overflow error
      if (rounded == Long.MAX_VALUE || rounded == Long.MIN_VALUE) {
        if (Math.abs(multiplier) > 2) {
          return multiply(2).multiply(multiplier / 2);
        } else {
          return to(higherUnit(unit)).multiply(multiplier);
        }
      }
    }
    if (unit.ordinal() != 0) {
      // check round off error
      if (Math.abs(product - rounded) > Math.abs(product) * ERROR_THRESHOLD) {
        if (isMagnitudeLarge(duration) && Math.abs(multiplier) < 0.5d) {
          return multiply(0.5).multiply(multiplier * 2);
        } else {
          return to(lowerUnit(unit)).multiply(multiplier);
        }
      }
    }

    final TimeDuration t = valueOf(rounded, unit);
    LOG.debug("{} * {} = {}", this, multiplier, t);
    return t;
  }