public static boolean fastIsValid(
      int fastSignum, long fast0, long fast1, long fast2,
      int fastIntegerDigitCount, int fastScale) {
    boolean isValid;
    if (fastSignum == 0) {
      isValid = (fast0 == 0 && fast1 == 0 && fast2 == 0 && fastIntegerDigitCount == 0 && fastScale == 0);
      if (!isValid) {
        System.out.println("FAST_IS_VALID signum 0 but other fields not");
      }
    } else {
      isValid = (
          (fast0 >= 0 && fast0 <= MAX_LONGWORD_DECIMAL) &&
          (fast1 >= 0 && fast1 <= MAX_LONGWORD_DECIMAL) &&
          (fast2 >= 0 && fast2 <= MAX_HIGHWORD_DECIMAL));
      if (!isValid) {
        System.out.println("FAST_IS_VALID fast0 .. fast2 out of range");
      } else {
        if (fastScale < 0 || fastScale > HiveDecimal.MAX_SCALE) {
          System.out.println("FAST_IS_VALID fastScale " + fastScale + " out of range");
          isValid = false;
        } else if (fastIntegerDigitCount < 0 || fastIntegerDigitCount > HiveDecimal.MAX_PRECISION) {
          System.out.println("FAST_IS_VALID fastIntegerDigitCount " + fastIntegerDigitCount + " out of range");
          isValid = false;
        } else if (fastIntegerDigitCount + fastScale > HiveDecimal.MAX_PRECISION) {
          System.out.println("FAST_IS_VALID exceeds max precision: fastIntegerDigitCount " + fastIntegerDigitCount + " and fastScale " + fastScale);
          isValid = false;
        } else {
          // Verify integerDigitCount given fastScale.
          final int rawPrecision = fastRawPrecision(fastSignum, fast0, fast1, fast2);
          if (fastIntegerDigitCount > 0) {
            if (rawPrecision != fastIntegerDigitCount + fastScale) {
              System.out.println("FAST_IS_VALID integer case: rawPrecision " + rawPrecision +
                  " fastIntegerDigitCount " + fastIntegerDigitCount +
                  " fastScale " + fastScale);
              isValid = false;
            }
          } else {
            if (rawPrecision > fastScale) {
              System.out.println("FAST_IS_VALID fraction only case: rawPrecision " + rawPrecision +
                  " fastIntegerDigitCount " + fastIntegerDigitCount +
                  " fastScale " + fastScale);
              isValid = false;
            }
          }
          if (isValid) {
            final int trailingZeroCount =
                fastTrailingDecimalZeroCount(
                    fast0, fast1, fast2,
                    fastIntegerDigitCount, fastScale);
            if (trailingZeroCount != 0) {
              System.out.println("FAST_IS_VALID exceeds max precision: trailingZeroCount != 0");
              isValid = false;
            }
          }
        }
      }
    }

    if (!isValid) {
      System.out.println("FAST_IS_VALID fast0 " + fast0);
      System.out.println("FAST_IS_VALID fast1 " + fast1);
      System.out.println("FAST_IS_VALID fast2 " + fast2);
      System.out.println("FAST_IS_VALID fastIntegerDigitCount " + fastIntegerDigitCount);
      System.out.println("FAST_IS_VALID fastScale " + fastScale);
    }
    return isValid;
  }
*********************************************************************************************
  // Decimal Division / Remainder.

  /**
EXPERMIMENTAL: Division when divisor fits in a single decimal longword.

@return  remainderSubexpr2
storage-api/src/java/org/apache/hadoop/hive/common/type/FastHiveDecimalImpl.java