Program: 73498
Project: 73498
Buggy source:
/** 
 * Return a new time object whose time value is the multiple of that of this time object and of the specified time object. The two time objects are expected to have directors with the same time resolution. If they do not, then the returned result is a new Time object representing the sum of the double values of the two Time objects. This would not be as accurate.
 * @param time The time object contains the amount of time increment.
 * @return A new time object with the quantized and multiplied time value.
 * @exception ArithmeticException If the result is not a valid number(it is the multiple of positive and negative infinity).
 */
public Time multiply(Time time){
  if (time._isNegativeInfinite) {
    if (_isPositiveInfinite) {
      throw new ArithmeticException("String_Node_Str" + "String_Node_Str");
    }
 else {
      return NEGATIVE_INFINITY;
    }
  }
 else   if (time._isPositiveInfinite) {
    if (_isNegativeInfinite) {
      throw new ArithmeticException("String_Node_Str" + "String_Node_Str");
    }
 else {
      return POSITIVE_INFINITY;
    }
  }
 else   if (isInfinite()) {
    return this;
  }
  try {
    double resolution=_timeResolution();
    if (resolution != time._timeResolution()) {
      double thisValue=getDoubleValue();
      double thatValue=time.getDoubleValue();
      return new Time(_director,thisValue + thatValue);
    }
  }
 catch (  IllegalActionException e) {
    throw new InternalErrorException(e);
  }
  return new Time(_director,_timeValue.multiply(time._timeValue));
}

Fixed version (ground truth):
/** 
 * Return a new time object whose time value is the multiple of that of this time object and of the specified time object. The two time objects are expected to have directors with the same time resolution. If they do not, then the returned result is a new Time object representing the sum of the double values of the two Time objects. This would not be as accurate.
 * @param time The time object contains the amount of time increment.
 * @return A new time object with the quantized and multiplied time value.
 * @exception ArithmeticException If the result is not a valid number(it is the multiple of positive/negative infinity and zero).
 */
public Time multiply(Time time){
  if (time.isInfinite()) {
    if (time.isNegativeInfinite()) {
      if (isZero()) {
        throw new ArithmeticException("String_Node_Str" + "String_Node_Str");
      }
      if (isPositive()) {
        return NEGATIVE_INFINITY;
      }
 else {
        assert(isNegative());
        return POSITIVE_INFINITY;
      }
    }
 else     if (time.isPositiveInfinite()) {
      if (isZero()) {
        throw new ArithmeticException("String_Node_Str" + "String_Node_Str");
      }
      if (isPositive()) {
        return POSITIVE_INFINITY;
      }
 else {
        assert(isNegative());
        return NEGATIVE_INFINITY;
      }
    }
  }
 else   if (isInfinite()) {
    if (time.isZero()) {
      throw new ArithmeticException("String_Node_Str" + "String_Node_Str");
    }
    if (_isNegativeInfinite) {
      if (time.isNegative()) {
        return POSITIVE_INFINITY;
      }
 else {
        assert(time.isPositive());
        return NEGATIVE_INFINITY;
      }
    }
 else {
      assert(_isPositiveInfinite);
      if (time.isNegative()) {
        return NEGATIVE_INFINITY;
      }
 else {
        assert(time.isPositive());
        return POSITIVE_INFINITY;
      }
    }
  }
  try {
    double resolution=_timeResolution();
    if (resolution != time._timeResolution()) {
      double thisValue=getDoubleValue();
      double thatValue=time.getDoubleValue();
      return new Time(_director,thisValue * thatValue);
    }
  }
 catch (  IllegalActionException e) {
    throw new InternalErrorException(e);
  }
  return new Time(_director,_timeValue.multiply(time._timeValue));
}