slamch function

double slamch(
  1. String CMACH
)

Implementation

double slamch(final String CMACH) {
  const ONE = 1.0, ZERO = 0.0;
  double RND, EPS, SFMIN, SMALL;

  // Assume rounding, not chopping. Always.

  RND = ONE;

  if (ONE == RND) {
    EPS = epsilon32(ZERO) * 0.5;
  } else {
    EPS = epsilon32(ZERO);
  }

  if (lsame(CMACH, 'E')) {
    return EPS;
  } else if (lsame(CMACH, 'S')) {
    SFMIN = tiny32(ZERO);
    SMALL = ONE / huge32(ZERO);
    if (SMALL >= SFMIN) {
      // Use SMALL plus a bit, to avoid the possibility of rounding
      // causing overflow when computing  1/sfmin.
      SFMIN = SMALL * (ONE + EPS);
    }
    return SFMIN;
  } else if (lsame(CMACH, 'B')) {
    return radix32(ZERO);
  } else if (lsame(CMACH, 'P')) {
    return EPS * radix32(ZERO);
  } else if (lsame(CMACH, 'N')) {
    return digits32(ZERO).toDouble();
  } else if (lsame(CMACH, 'R')) {
    return RND;
  } else if (lsame(CMACH, 'M')) {
    return minexponent32(ZERO).toDouble();
  } else if (lsame(CMACH, 'U')) {
    return tiny32(ZERO);
  } else if (lsame(CMACH, 'L')) {
    return maxexponent32(ZERO).toDouble();
  } else if (lsame(CMACH, 'O')) {
    return huge32(ZERO);
  } else {
    return ZERO;
  }
}