slamch function
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;
}
}