⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libm_error.c

📁 Glibc 2.3.2源代码(解压后有100多M)
💻 C
📖 第 1 页 / 共 5 页
字号:
//// Copyright (C) 2000, 2001, Intel Corporation// All rights reserved.//// Contributed 2/2/2000 by John Harrison, Ted Kubaska, Bob Norin, Shane Story, James// Edwards, and Ping Tak Peter Tang of the Computational Software Lab, Intel Corporation.//// Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met://// * Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.//// * Redistributions in binary form must reproduce the above copyright// notice, this list of conditions and the following disclaimer in the// documentation and/or other materials provided with the distribution.//// * The name of Intel Corporation may not be used to endorse or promote// products derived from this software without specific prior written// permission.//// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.//// Intel Corporation is the author of this code, and requests that all// problem reports or change requests be submitted to it directly at// http://developer.intel.com/opensource.//// History//==============================================================//  2/02/00: Initial version//  3/22/00: Updated to support flexible and dynamic error handling.//  8/16/00: Changed all matherr function-calls to use the pmatherr//           function-pointers.// 10/03/00: Corrected a scalb type.// 11/28/00: Changed INPUT_XL to INPUT_XD for scalb_underflow case.// 12/07/00: Added code to make scalbn error support equivalent to ldexp.//  2/07/01: Added __declspec(align(16)) to long double constants to correct//           alignment problem.//#include <errno.h>#include <stdio.h>#include <stdlib.h>#include "libm_support.h"#ifndef _LIBC_LIB_VERSION_TYPE#if defined( __POSIX__ )_LIB_VERSION = _POSIX_;#elif defined( __XOPEN__ )_LIB_VERSION = _XOPEN_;#elif defined( __SVID__ )_LIB_VERSION = _SVID_;#elif defined( __IEEE__ )_LIB_VERSION = _IEEE_;#else_LIB_VERSION = _ISOC_;#endif#endif/************************************************************//* matherrX function pointers and setusermatherrX functions *//************************************************************/#if 0int (*pmatherrf)(struct exceptionf*) = MATHERR_F;int (*pmatherr)(struct EXC_DECL_D*) = MATHERR_D;int (*pmatherrl)(struct exceptionl*) = matherrl;void __libm_setusermatherrf( int(*user_merrf)(struct exceptionf*) ){      pmatherrf = ( (user_merrf==NULL)? (MATHERR_F) : (user_merrf) ); }void __libm_setusermatherr( int(*user_merr)(struct EXC_DECL_D*) ){      pmatherr = ( (user_merr==NULL)? (MATHERR_D) : (user_merr) );    }void __libm_setusermatherrl( int(*user_merrl)(struct exceptionl*) ){      pmatherrl = ( (user_merrl==NULL)? (matherrl) : (user_merrl) );  }#endif/***********************************************//* error-handling function, libm_error_support *//***********************************************/void __libm_error_support(void *arg1,void *arg2,void *retval,error_types input_tag){# ifdef __cplusplusstruct __exception exc;# elsestruct exception  exc;# endifstruct exceptionf excf;struct exceptionl excl;# if defined opensource || defined _LIBC#define ALIGNIT#define ALIGNATTR __attribute__ ((__aligned__ (16)))# else#define ALIGNIT __declspec(align(16))#define ALIGNATTR# endifconst char float_inf[4] = {0x00,0x00,0x80,0x7F};const char float_huge[4] = {0xFF,0xFF,0x7F,0x7F};const char float_zero[4] = {0x00,0x00,0x00,0x00};const char float_neg_inf[4] = {0x00,0x00,0x80,0xFF};const char float_neg_huge[4] = {0xFF,0xFF,0x7F,0xFF};const char float_neg_zero[4] = {0x00,0x00,0x00,0x80};ALIGNITconst char double_inf[8] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x7F};ALIGNIT//const char double_huge[8] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0x7F};ALIGNITconst char double_zero[8] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};ALIGNITconst char double_neg_inf[8] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF};ALIGNIT//const char double_neg_huge[8] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xEF,0xFF};ALIGNITconst char double_neg_zero[8] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80};ALIGNITconst char long_double_inf[16] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00};ALIGNIT//const char long_double_huge[16] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00};ALIGNITconst char long_double_zero[16] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};ALIGNITconst char long_double_neg_inf[16] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00};ALIGNIT//const char long_double_neg_huge[16] ALIGNATTR = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00};ALIGNITconst char long_double_neg_zero[16] ALIGNATTR = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00};#define RETVAL_HUGE_VALL *(long double *)retval =  *(long double *)long_double_inf#define RETVAL_NEG_HUGE_VALL *(long double *)retval = *(long double *)long_double_neg_inf#define RETVAL_HUGEL *(long double *)retval = (long double)*(float *)float_huge#define RETVAL_NEG_HUGEL *(long double *)retval =(long double)*(float*)float_neg_huge#define RETVAL_HUGE_VALD *(double *)retval = *(double *) double_inf#define RETVAL_NEG_HUGE_VALD *(double *)retval = *(double *) double_neg_inf#define RETVAL_HUGED *(double *)retval = (double) *(float *)float_huge#define RETVAL_NEG_HUGED *(double *)retval = (double) *(float *) float_neg_huge#define RETVAL_HUGE_VALF *(float *)retval =  *(float *) float_inf#define RETVAL_NEG_HUGE_VALF *(float *)retval = *(float *) float_neg_inf#define RETVAL_HUGEF *(float *)retval = *(float *) float_huge#define RETVAL_NEG_HUGEF *(float *)retval = *(float *) float_neg_huge#define RETVAL_ZEROL *(long double *)retval = *(long double *)long_double_zero#define RETVAL_ZEROD *(double *)retval = *(double *)double_zero#define RETVAL_ZEROF *(float *)retval = *(float *)float_zero#define RETVAL_NEG_ZEROL *(long double *)retval = *(long double *)long_double_neg_zero#define RETVAL_NEG_ZEROD *(double *)retval = *(double *)double_neg_zero#define RETVAL_NEG_ZEROF *(float *)retval = *(float *)float_neg_zero#define RETVAL_ONEL *(long double *)retval = (long double) 1.0#define RETVAL_ONED *(double *)retval = 1.0#define RETVAL_ONEF *(float *)retval = 1.0f#define NOT_MATHERRL excl.arg1=*(long double *)arg1;excl.arg2=*(long double *)arg2;excl.retval=*(long double *)retval;if(!matherrl(&excl))#define NOT_MATHERRD exc.arg1=*(double *)arg1;exc.arg2=*(double *)arg2;exc.retval=*(double *)retval;if(!MATHERR_D(&exc))#define NOT_MATHERRF excf.arg1=*(float *)arg1;excf.arg2=*(float *)arg2;excf.retval=*(float *)retval;if(!MATHERR_F(&excf))#define ifSVID if(_LIB_VERSION==_SVID_)#define NAMEL excl.name#define NAMED exc.name#define NAMEF excf.name//// These should work OK for MS because they are ints -// leading underbars are not necessary.//#define DOMAIN          1#define SING            2#define OVERFLOW        3#define UNDERFLOW       4#define TLOSS           5#define PLOSS           6#define SINGL excl.type = SING#define DOMAINL excl.type = DOMAIN#define OVERFLOWL excl.type = OVERFLOW#define UNDERFLOWL excl.type = UNDERFLOW#define TLOSSL excl.type = TLOSS#define SINGD exc.type = SING#define DOMAIND exc.type = DOMAIN#define OVERFLOWD exc.type = OVERFLOW#define UNDERFLOWD exc.type = UNDERFLOW#define TLOSSD exc.type = TLOSS#define SINGF excf.type = SING#define DOMAINF excf.type = DOMAIN#define OVERFLOWF excf.type = OVERFLOW#define UNDERFLOWF excf.type = UNDERFLOW#define TLOSSF excf.type = TLOSS#define INPUT_XL (excl.arg1=*(long double*)arg1)#define INPUT_XD (exc.arg1=*(double*)arg1)#define INPUT_XF (excf.arg1=*(float*)arg1)#define INPUT_YL (excl.arg1=*(long double*)arg2)#define INPUT_YD (exc.arg1=*(double*)arg2)#define INPUT_YF (excf.arg1=*(float*)arg2)#define INPUT_RESL (*(long double *)retval)#define INPUT_RESD (*(double *)retval)#define INPUT_RESF (*(float *)retval)#define WRITEL_LOG_ZERO fputs("logl: SING error\n",stderr)#define WRITED_LOG_ZERO fputs("log: SING error\n",stderr)#define WRITEF_LOG_ZERO fputs("logf: SING error\n",stderr)#define WRITEL_LOG_NEGATIVE fputs("logl: DOMAIN error\n",stderr)#define WRITED_LOG_NEGATIVE fputs("log: DOMAIN error\n",stderr)#define WRITEF_LOG_NEGATIVE fputs("logf: DOMAIN error\n",stderr)#define WRITEL_Y0_ZERO fputs("y0l: DOMAIN error\n",stderr)#define WRITED_Y0_ZERO fputs("y0: DOMAIN error\n",stderr)#define WRITEF_Y0_ZERO fputs("y0f: DOMAIN error\n",stderr)#define WRITEL_Y0_NEGATIVE fputs("y0l: DOMAIN error\n",stderr)#define WRITED_Y0_NEGATIVE fputs("y0: DOMAIN error\n",stderr)#define WRITEF_Y0_NEGATIVE fputs("y0f: DOMAIN error\n",stderr)#define WRITEL_Y1_ZERO fputs("y1l: DOMAIN error\n",stderr)#define WRITED_Y1_ZERO fputs("y1: DOMAIN error\n",stderr)#define WRITEF_Y1_ZERO fputs("y1f: DOMAIN error\n",stderr)#define WRITEL_Y1_NEGATIVE fputs("y1l: DOMAIN error\n",stderr)#define WRITED_Y1_NEGATIUE fputs("y1: DOMAIN error\n",stderr)#define WRITEF_Y1_NEGATIVE fputs("y1f: DOMAIN error\n",stderr)#define WRITEL_YN_ZERO fputs("ynl: DOMAIN error\n",stderr)#define WRITED_YN_ZERO fputs("yn: DOMAIN error\n",stderr)#define WRITEF_YN_ZERO fputs("ynf: DOMAIN error\n",stderr)#define WRITEL_YN_NEGATIVE fputs("ynl: DOMAIN error\n",stderr)#define WRITED_YN_NEGATIVE fputs("yn: DOMAIN error\n",stderr)#define WRITEF_YN_NEGATIVE fputs("ynf: DOMAIN error\n",stderr)#define WRITEL_LOG1P_ZERO fputs("log1pl: SING error\n",stderr)#define WRITED_LOG1P_ZERO fputs("log1p: SING error\n",stderr)#define WRITEF_LOG1P_ZERO fputs("log1pf: SING error\n",stderr)#define WRITEL_LOG1P_NEGATIVE fputs("log1pl: DOMAIN error\n",stderr)#define WRITED_LOG1P_NEGATIVE fputs("log1p: DOMAIN error\n",stderr)#define WRITEF_LOG1P_NEGATIVE fputs("log1pf: DOMAIN error\n",stderr)#define WRITEL_LOG10_ZERO fputs("log10l: SING error\n",stderr)#define WRITED_LOG10_ZERO fputs("log10: SING error\n",stderr)#define WRITEF_LOG10_ZERO fputs("log10f: SING error\n",stderr)#define WRITEL_LOG10_NEGATIVE fputs("log10l: DOMAIN error\n",stderr)#define WRITED_LOG10_NEGATIVE fputs("log10: DOMAIN error\n",stderr)#define WRITEF_LOG10_NEGATIVE fputs("log10f: DOMAIN error\n",stderr)#define WRITEL_POW_ZERO_TO_ZERO fputs("powl(0,0): DOMAIN error\n",stderr)#define WRITED_POW_ZERO_TO_ZERO fputs("pow(0,0): DOMAIN error\n",stderr)#define WRITEF_POW_ZERO_TO_ZERO fputs("powf(0,0): DOMAIN error\n",stderr)#define WRITEL_POW_ZERO_TO_NEGATIVE fputs("powl(0,negative): DOMAIN error\n",stderr)#define WRITED_POW_ZERO_TO_NEGATIVE fputs("pow(0,negative): DOMAIN error\n",stderr)#define WRITEF_POW_ZERO_TO_NEGATIVE fputs("powf(0,negative): DOMAIN error\n",stderr)#define WRITEL_POW_NEG_TO_NON_INTEGER fputs("powl(negative,non-integer): DOMAIN error\n",stderr)#define WRITED_POW_NEG_TO_NON_INTEGER fputs("pow(negative,non-integer): DOMAIN error\n",stderr)#define WRITEF_POW_NEG_TO_NON_INTEGER fputs("powf(negative,non-integer): DOMAIN error\n",stderr)#define WRITEL_ATAN2_ZERO_BY_ZERO fputs("atan2l: DOMAIN error\n",stderr)#define WRITED_ATAN2_ZERO_BY_ZERO fputs("atan2: DOMAIN error\n",stderr)#define WRITEF_ATAN2_ZERO_BY_ZERO fputs("atan2f: DOMAIN error\n",stderr)#define WRITEL_SQRT fputs("sqrtl: DOMAIN error\n",stderr)#define WRITED_SQRT fputs("sqrt: DOMAIN error\n",stderr)#define WRITEF_SQRT fputs("sqrtf: DOMAIN error\n",stderr)#define WRITEL_FMOD fputs("fmodl: DOMAIN error\n",stderr)#define WRITED_FMOD fputs("fmod: DOMAIN error\n",stderr)#define WRITEF_FMOD fputs("fmodf: DOMAIN error\n",stderr)#define WRITEL_REM fputs("remainderl: DOMAIN error\n",stderr)#define WRITED_REM fputs("remainder: DOMAIN error\n",stderr)#define WRITEF_REM fputs("remainderf: DOMAIN error\n",stderr)#define WRITEL_ACOS fputs("acosl: DOMAIN error\n",stderr)#define WRITED_ACOS fputs("acos: DOMAIN error\n",stderr)#define WRITEF_ACOS fputs("acosf: DOMAIN error\n",stderr)#define WRITEL_ASIN fputs("asinl: DOMAIN error\n",stderr)#define WRITED_ASIN fputs("asin: DOMAIN error\n",stderr)#define WRITEF_ASIN fputs("asinf: DOMAIN error\n",stderr)#define WRITEL_ACOSH fputs("acoshl: DOMAIN error\n",stderr)#define WRITED_ACOSH fputs("acosh: DOMAIN error\n",stderr)#define WRITEF_ACOSH fputs("acoshf: DOMAIN error\n",stderr)#define WRITEL_ATANH_GT_ONE fputs("atanhl: DOMAIN error\n",stderr)#define WRITED_ATANH_GT_ONE fputs("atanh: DOMAIN error\n",stderr)#define WRITEF_ATANH_GT_ONE fputs("atanhf: DOMAIN error\n",stderr)#define WRITEL_ATANH_EQ_ONE fputs("atanhl: SING error\n",stderr)#define WRITED_ATANH_EQ_ONE fputs("atanh: SING error\n",stderr)#define WRITEF_ATANH_EQ_ONE fputs("atanhf: SING error\n",stderr)#define WRITEL_LGAMMA_NEGATIVE fputs("lgammal: SING error\n",stderr)#define WRITED_LGAMMA_NEGATIVE fputs("lgamma: SING error\n",stderr)#define WRITEF_LGAMMA_NEGATIVE fputs("lgammaf: SING error\n",stderr)#define WRITEL_GAMMA_NEGATIVE fputs("gammal: SING error\n",stderr)#define WRITED_GAMMA_NEGATIVE fputs("gamma: SING error\n",stderr)#define WRITEF_GAMMA_NEGATIVE fputs("gammaf: SING error\n",stderr)#define WRITEL_J0_TLOSS  fputs("j0l: TLOSS error\n",stderr)#define WRITEL_Y0_TLOSS  fputs("y0l: TLOSS error\n",stderr)#define WRITEL_J1_TLOSS  fputs("j1l: TLOSS error\n",stderr)#define WRITEL_Y1_TLOSS  fputs("y1l: TLOSS error\n",stderr)#define WRITEL_JN_TLOSS  fputs("jnl: TLOSS error\n",stderr)#define WRITEL_YN_TLOSS  fputs("ynl: TLOSS error\n",stderr)#define WRITED_J0_TLOSS  fputs("j0: TLOSS error\n",stderr)#define WRITED_Y0_TLOSS  fputs("y0: TLOSS error\n",stderr)#define WRITED_J1_TLOSS  fputs("j1: TLOSS error\n",stderr)#define WRITED_Y1_TLOSS  fputs("y1: TLOSS error\n",stderr)#define WRITED_JN_TLOSS  fputs("jn: TLOSS error\n",stderr)#define WRITED_YN_TLOSS  fputs("yn: TLOSS error\n",stderr)#define WRITEF_J0_TLOSS  fputs("j0f: TLOSS error\n",stderr)#define WRITEF_Y0_TLOSS  fputs("y0f: TLOSS error\n",stderr)#define WRITEF_J1_TLOSS  fputs("j1f: TLOSS error\n",stderr)#define WRITEF_Y1_TLOSS  fputs("y1f: TLOSS error\n",stderr)#define WRITEF_JN_TLOSS  fputs("jnf: TLOSS error\n",stderr)#define WRITEF_YN_TLOSS  fputs("ynf: TLOSS error\n",stderr)/***********************//* IEEE Path           *//***********************/if(_LIB_VERSION==_IEEE_) return;/***********************//* C9X Path           *//***********************/else if(_LIB_VERSION==_ISOC_){  switch(input_tag)  {    case logl_zero:    case log_zero:    case logf_zero:    case log10l_zero:    case log10_zero:    case log10f_zero:    case log2l_zero:    case log2_zero:    case log2f_zero:    case log1pl_zero:    case log1p_zero:    case log1pf_zero:    case powl_overflow:    case pow_overflow:    case powf_overflow:    case powl_underflow:    case pow_underflow:    case powf_underflow:    case expl_overflow:    case exp_overflow:    case expf_overflow:    case expl_underflow:    case exp_underflow:    case expf_underflow:    case exp2l_overflow:    case exp2_overflow:    case exp2f_overflow:    case exp2l_underflow:    case exp2_underflow:    case exp2f_underflow:    case exp10l_overflow:    case exp10_overflow:    case exp10f_overflow:    case expm1l_overflow:    case expm1_overflow:    case expm1f_overflow:    case hypotl_overflow:    case hypot_overflow:    case hypotf_overflow:    case sinhl_overflow:    case sinh_overflow:    case sinhf_overflow:    case atanhl_eq_one:    case atanh_eq_one:    case atanhf_eq_one:    case scalbl_overflow:    case scalb_overflow:    case scalbf_overflow:    case scalbl_underflow:    case scalb_underflow:    case scalbf_underflow:    case coshl_overflow:    case cosh_overflow:    case coshf_overflow:    case nextafterl_overflow:    case nextafter_overflow:    case nextafterf_overflow:    case scalbnl_overflow:    case scalbn_overflow:    case scalbnf_overflow:    case scalbnl_underflow:    case scalbn_underflow:    case scalbnf_underflow:    case ldexpl_overflow:    case ldexp_overflow:    case ldexpf_overflow:    case ldexpl_underflow:    case ldexp_underflow:    case ldexpf_underflow:    case lgammal_overflow:    case lgamma_overflow:    case lgammaf_overflow:    case lgammal_negative:    case lgamma_negative:    case lgammaf_negative:    case gammal_overflow:    case gamma_overflow:    case gammaf_overflow:    case gammal_negative:    case gamma_negative:    case gammaf_negative:    case ilogbl_zero:    case ilogb_zero:    case ilogbf_zero:    {         ERRNO_RANGE; break;    }    case logl_negative:    case log_negative:    case logf_negative:    case log10l_negative:    case log10_negative:    case log10f_negative:    case log2l_negative:    case log2_negative:    case log2f_negative:    case log1pl_negative:    case log1p_negative:    case log1pf_negative:    case sqrtl_negative:    case sqrt_negative:    case sqrtf_negative:    case atan2l_zero:    case atan2_zero:    case atan2f_zero:    case powl_zero_to_negative:    case powl_neg_to_non_integer:    case pow_zero_to_negative:    case pow_neg_to_non_integer:    case powf_zero_to_negative:    case powf_neg_to_non_integer:    case fmodl_by_zero:    case fmod_by_zero:    case fmodf_by_zero:    case atanhl_gt_one:    case atanh_gt_one:    case atanhf_gt_one:    case acosl_gt_one:    case acos_gt_one:    case acosf_gt_one:    case asinl_gt_one:    case asin_gt_one:    case asinf_gt_one:    case logbl_zero:    case logb_zero:    case logbf_zero:    case acoshl_lt_one:    case acosh_lt_one:    case acoshf_lt_one:    case y0l_zero:    case y0_zero:    case y0f_zero:    case y1l_zero:    case y1_zero:    case y1f_zero:    case ynl_zero:    case yn_zero:    case ynf_zero:    case y0l_negative:    case y0_negative:    case y0f_negative:    case y1l_negative:    case y1_negative:    case y1f_negative:    case ynl_negative:    case yn_negative:    case ynf_negative:    {         ERRNO_DOMAIN; break;    }    default:      abort();   }   return;}/***********************//* _POSIX_ Path        *//***********************/else if(_LIB_VERSION==_POSIX_){switch(input_tag)  {  case gammal_overflow:  case lgammal_overflow:  {       RETVAL_HUGE_VALL; ERRNO_RANGE; break;  }  case gamma_overflow:  case lgamma_overflow:  {       RETVAL_HUGE_VALD; ERRNO_RANGE; break;  }  case gammaf_overflow:  case lgammaf_overflow:  {       RETVAL_HUGE_VALF; ERRNO_RANGE; break;  }  case gammal_negative:  case gamma_negative:  case gammaf_negative:  case lgammal_negative:  case lgamma_negative:  case lgammaf_negative:  {       ERRNO_DOMAIN; break;  }  case ldexpl_overflow:  case ldexpl_underflow:  case ldexp_overflow:  case ldexp_underflow:  case ldexpf_overflow:  case ldexpf_underflow:  case scalbnl_overflow:  case scalbnl_underflow:  case scalbn_overflow:  case scalbn_underflow:  case scalbnf_overflow:  case scalbnf_underflow:  {       ERRNO_RANGE; break;  }  case atanhl_gt_one:  case atanhl_eq_one:    /* atanhl(|x| >= 1) */    {       ERRNO_DOMAIN; break;    }  case atanh_gt_one:  case atanh_eq_one:    /* atanh(|x| >= 1) */    {       ERRNO_DOMAIN; break;    }  case atanhf_gt_one:  case atanhf_eq_one:    /* atanhf(|x| >= 1) */    {       ERRNO_DOMAIN; break;    }  case sqrtl_negative:    /* sqrtl(x < 0) */    {       ERRNO_DOMAIN; break;    }  case sqrt_negative:    /* sqrt(x < 0) */    {       ERRNO_DOMAIN; break;    }  case sqrtf_negative:    /* sqrtf(x < 0) */    {       ERRNO_DOMAIN; break;    }  case y0l_zero:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -