📄 standard.c
字号:
}
break;
case 26:
/* sqrt(x<0) */
exc.type = DOMAIN;
exc.name = "sqrt";
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
exc.retval = zero;
else
exc.retval = zero/zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = EDOM;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2("sqrt: DOMAIN error\n", 19);
}
errno = EDOM;
}
break;
case 27:
/* fmod(x,0) */
exc.type = DOMAIN;
exc.name = "fmod";
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
exc.retval = x;
else
exc.retval = zero/zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = EDOM;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2("fmod: DOMAIN error\n", 20);
}
errno = EDOM;
}
break;
case 28:
/* remainder(x,0) */
exc.type = DOMAIN;
exc.name = "remainder";
exc.retval = zero/zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = EDOM;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2("remainder: DOMAIN error\n", 24);
}
errno = EDOM;
}
break;
case 29:
/* acosh(x<1) */
exc.type = DOMAIN;
exc.name = "acosh";
exc.retval = zero/zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = EDOM;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2("acosh: DOMAIN error\n", 20);
}
errno = EDOM;
}
break;
case 30:
/* atanh(|x|>1) */
exc.type = DOMAIN;
exc.name = "atanh";
exc.retval = zero/zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = EDOM;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2("atanh: DOMAIN error\n", 20);
}
errno = EDOM;
}
break;
case 31:
/* atanh(|x|=1) */
exc.type = SING;
exc.name = "atanh";
exc.retval = x/zero; /* sign(x)*inf */
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = EDOM;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2("atanh: SING error\n", 18);
}
errno = EDOM;
}
break;
case 32:
/* scalb overflow; SVID also returns +-HUGE_VAL */
exc.type = OVERFLOW;
exc.name = "scalb";
exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
errno = ERANGE;
}
break;
case 33:
/* scalb underflow */
exc.type = UNDERFLOW;
exc.name = "scalb";
exc.retval = copysign(zero,x);
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
errno = ERANGE;
}
break;
case 34:
/* j0(|x|>X_TLOSS) */
exc.type = TLOSS;
exc.name = "j0";
exc.retval = zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2(exc.name, 2);
(void) WRITE2(": TLOSS error\n", 14);
}
errno = ERANGE;
}
break;
case 35:
/* y0(x>X_TLOSS) */
exc.type = TLOSS;
exc.name = "y0";
exc.retval = zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2(exc.name, 2);
(void) WRITE2(": TLOSS error\n", 14);
}
errno = ERANGE;
}
break;
case 36:
/* j1(|x|>X_TLOSS) */
exc.type = TLOSS;
exc.name = "j1";
exc.retval = zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2(exc.name, 2);
(void) WRITE2(": TLOSS error\n", 14);
}
errno = ERANGE;
}
break;
case 37:
/* y1(x>X_TLOSS) */
exc.type = TLOSS;
exc.name = "y1";
exc.retval = zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2(exc.name, 2);
(void) WRITE2(": TLOSS error\n", 14);
}
errno = ERANGE;
}
break;
case 38:
/* jn(|x|>X_TLOSS) */
exc.type = TLOSS;
exc.name = "jn";
exc.retval = zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2(exc.name, 2);
(void) WRITE2(": TLOSS error\n", 14);
}
errno = ERANGE;
}
break;
case 39:
/* yn(x>X_TLOSS) */
exc.type = TLOSS;
exc.name = "yn";
exc.retval = zero;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2(exc.name, 2);
(void) WRITE2(": TLOSS error\n", 14);
}
errno = ERANGE;
}
break;
case 40:
/* gamma(finite) overflow */
exc.type = OVERFLOW;
exc.name = "gamma";
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
exc.retval = HUGE;
else
exc.retval = HUGE_VAL;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
errno = ERANGE;
}
break;
case 41:
/* gamma(-integer) or gamma(0) */
exc.type = SING;
exc.name = "gamma";
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID)
exc.retval = HUGE;
else
exc.retval = HUGE_VAL;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = EDOM;
else if (!matherr(&exc)) {
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID) {
(void) WRITE2("gamma: SING error\n", 18);
}
errno = EDOM;
}
break;
case 42:
/* pow(NaN,0.0) */
/* error only if cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_SVID & CYGNUM_LIBM_COMPAT_XOPEN */
exc.type = DOMAIN;
exc.name = "pow";
exc.retval = x;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_IEEE ||
cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX) exc.retval = 1.0;
else if (!matherr(&exc)) {
errno = EDOM;
}
break;
case 43:
/* ldexp overflow; SVID also returns +-HUGE_VAL */
exc.type = OVERFLOW;
exc.name = "ldexp";
exc.retval = x > zero ? HUGE_VAL : -HUGE_VAL;
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
errno = ERANGE;
}
break;
case 44:
/* ldexp underflow */
exc.type = UNDERFLOW;
exc.name = "ldexp";
exc.retval = copysign(zero,x);
if (cyg_libm_get_compat_mode() == CYGNUM_LIBM_COMPAT_POSIX)
errno = ERANGE;
else if (!matherr(&exc)) {
errno = ERANGE;
}
break;
}
return exc.retval;
}
#endif // ifdef CYGPKG_LIBM
// EOF standard.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -