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

📄 libm_support.h

📁 glibc 2.9,最新版的C语言库函数
💻 H
📖 第 1 页 / 共 4 页
字号:
#define FP80(ld) ((struct fp80 *)&ld)/* macros to extract signed low and high doubleword of long double */#if defined(SIZE_INT_32)# define HI_DWORD_80(ld) ((((FP80(ld)->sign << 15) | FP80(ld)->exponent) << 16) | \                          ((FP80(ld)->hi_significand >> 16) & 0xFFFF))# define LO_DWORD_80(ld) SIGN_EXPAND(FP80(ld)->lo_significand, 32)#elif defined(SIZE_INT_64)# define HI_DWORD_80(ld) ((((FP80(ld)->sign << 15) | FP80(ld)->exponent) << 16) | \                          ((FP80(ld)->significand >> 48) & 0xFFFF))# define LO_DWORD_80(ld) SIGN_EXPAND(FP80(ld)->significand, 32)#endif/* macros to extract hi bits of significand. * note that explicit high bit do not count (returns as is) */#if defined(SIZE_INT_32)# define HI_SIGNIFICAND_80(X,NBITS) ((X)->hi_significand >> (31 - (NBITS)))#elif defined(SIZE_INT_64)# define HI_SIGNIFICAND_80(X,NBITS) ((X)->significand >> (63 - (NBITS)))#endif/* macros to check, whether a significand bits are all zero, or some of them are non-zero. * note that SIGNIFICAND_ZERO_80 tests high bit also, but SIGNIFICAND_NONZERO_80 does not */#define SIGNIFICAND_ZERO_32(X)     ((X)->significand == 0)#define SIGNIFICAND_NONZERO_32(X)  ((X)->significand != 0)#if defined(SIZE_INT_32)# define SIGNIFICAND_ZERO_64(X)    (((X)->hi_significand == 0) && ((X)->lo_significand == 0))# define SIGNIFICAND_NONZERO_64(X) (((X)->hi_significand != 0) || ((X)->lo_significand != 0))#elif defined(SIZE_INT_64)# define SIGNIFICAND_ZERO_64(X)    ((X)->significand == 0)# define SIGNIFICAND_NONZERO_64(X) ((X)->significand != 0)#endif#if defined(SIZE_INT_32)# define SIGNIFICAND_ZERO_80(X)    (((X)->hi_significand == 0x00000000) && ((X)->lo_significand == 0))# define SIGNIFICAND_NONZERO_80(X) (((X)->hi_significand != 0x80000000) || ((X)->lo_significand != 0))#elif defined(SIZE_INT_64)# define SIGNIFICAND_ZERO_80(X)    ((X)->significand == 0x0000000000000000)# define SIGNIFICAND_NONZERO_80(X) ((X)->significand != 0x8000000000000000)#endif/* macros to compare long double with constant value, represented as hex */#define SIGNIFICAND_EQ_HEX_32(X,BITS) ((X)->significand == 0x ## BITS)#define SIGNIFICAND_GT_HEX_32(X,BITS) ((X)->significand >  0x ## BITS)#define SIGNIFICAND_GE_HEX_32(X,BITS) ((X)->significand >= 0x ## BITS)#define SIGNIFICAND_LT_HEX_32(X,BITS) ((X)->significand <  0x ## BITS)#define SIGNIFICAND_LE_HEX_32(X,BITS) ((X)->significand <= 0x ## BITS)#if defined(SIZE_INT_32)# define SIGNIFICAND_EQ_HEX_64(X,HI,LO) \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand == 0x ## LO))# define SIGNIFICAND_GT_HEX_64(X,HI,LO) (((X)->hi_significand > 0x ## HI) || \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand >  0x ## LO)))# define SIGNIFICAND_GE_HEX_64(X,HI,LO) (((X)->hi_significand > 0x ## HI) || \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand >= 0x ## LO)))# define SIGNIFICAND_LT_HEX_64(X,HI,LO) (((X)->hi_significand < 0x ## HI) || \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand <  0x ## LO)))# define SIGNIFICAND_LE_HEX_64(X,HI,LO) (((X)->hi_significand < 0x ## HI) || \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand <= 0x ## LO)))#elif defined(SIZE_INT_64)# define SIGNIFICAND_EQ_HEX_64(X,HI,LO) ((X)->significand == 0x ## HI ## LO)# define SIGNIFICAND_GT_HEX_64(X,HI,LO) ((X)->significand >  0x ## HI ## LO)# define SIGNIFICAND_GE_HEX_64(X,HI,LO) ((X)->significand >= 0x ## HI ## LO)# define SIGNIFICAND_LT_HEX_64(X,HI,LO) ((X)->significand <  0x ## HI ## LO)# define SIGNIFICAND_LE_HEX_64(X,HI,LO) ((X)->significand <= 0x ## HI ## LO)#endif#if defined(SIZE_INT_32)# define SIGNIFICAND_EQ_HEX_80(X,HI,LO) \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand == 0x ## LO))# define SIGNIFICAND_GT_HEX_80(X,HI,LO) (((X)->hi_significand > 0x ## HI) || \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand >  0x ## LO)))# define SIGNIFICAND_GE_HEX_80(X,HI,LO) (((X)->hi_significand > 0x ## HI) || \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand >= 0x ## LO)))# define SIGNIFICAND_LT_HEX_80(X,HI,LO) (((X)->hi_significand < 0x ## HI) || \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand <  0x ## LO)))# define SIGNIFICAND_LE_HEX_80(X,HI,LO) (((X)->hi_significand < 0x ## HI) || \    (((X)->hi_significand == 0x ## HI) && ((X)->lo_significand <= 0x ## LO)))#elif defined(SIZE_INT_64)# define SIGNIFICAND_EQ_HEX_80(X,HI,LO) ((X)->significand == 0x ## HI ## LO)# define SIGNIFICAND_GT_HEX_80(X,HI,LO) ((X)->significand >  0x ## HI ## LO)# define SIGNIFICAND_GE_HEX_80(X,HI,LO) ((X)->significand >= 0x ## HI ## LO)# define SIGNIFICAND_LT_HEX_80(X,HI,LO) ((X)->significand <  0x ## HI ## LO)# define SIGNIFICAND_LE_HEX_80(X,HI,LO) ((X)->significand <= 0x ## HI ## LO)#endif#define VALUE_EQ_HEX_32(X,EXP,BITS) \   (((X)->exponent == (EXP)) && (SIGNIFICAND_EQ_HEX_32(X, BITS)))#define VALUE_GT_HEX_32(X,EXP,BITS) (((X)->exponent > (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_GT_HEX_32(X, BITS))))#define VALUE_GE_HEX_32(X,EXP,BITS) (((X)->exponent > (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_GE_HEX_32(X, BITS))))#define VALUE_LT_HEX_32(X,EXP,BITS) (((X)->exponent < (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_LT_HEX_32(X, BITS))))#define VALUE_LE_HEX_32(X,EXP,BITS) (((X)->exponent < (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_LE_HEX_32(X, BITS))))#define VALUE_EQ_HEX_64(X,EXP,HI,LO) \   (((X)->exponent == (EXP)) && (SIGNIFICAND_EQ_HEX_64(X, HI, LO)))#define VALUE_GT_HEX_64(X,EXP,HI,LO) (((X)->exponent > (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_GT_HEX_64(X, HI, LO))))#define VALUE_GE_HEX_64(X,EXP,HI,LO) (((X)->exponent > (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_GE_HEX_64(X, HI, LO))))#define VALUE_LT_HEX_64(X,EXP,HI,LO) (((X)->exponent < (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_LT_HEX_64(X, HI, LO))))#define VALUE_LE_HEX_64(X,EXP,HI,LO) (((X)->exponent < (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_LE_HEX_64(X, HI, LO))))#define VALUE_EQ_HEX_80(X,EXP,HI,LO) \   (((X)->exponent == (EXP)) && (SIGNIFICAND_EQ_HEX_80(X, HI, LO)))#define VALUE_GT_HEX_80(X,EXP,HI,LO) (((X)->exponent > (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_GT_HEX_80(X, HI, LO))))#define VALUE_GE_HEX_80(X,EXP,HI,LO) (((X)->exponent > (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_GE_HEX_80(X, HI, LO))))#define VALUE_LT_HEX_80(X,EXP,HI,LO) (((X)->exponent < (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_LT_HEX_80(X, HI, LO))))#define VALUE_LE_HEX_80(X,EXP,HI,LO) (((X)->exponent < (EXP)) || \   (((X)->exponent == (EXP)) && (SIGNIFICAND_LE_HEX_80(X, HI, LO))))/* macros to compare two long doubles */#define SIGNIFICAND_EQ_32(X,Y) ((X)->significand == (Y)->significand)#define SIGNIFICAND_GT_32(X,Y) ((X)->significand > (Y)->significand)#define SIGNIFICAND_GE_32(X,Y) ((X)->significand >= (Y)->significand)#define SIGNIFICAND_LT_32(X,Y) ((X)->significand < (Y)->significand)#define SIGNIFICAND_LE_32(X,Y) ((X)->significand <= (Y)->significand)#if defined(SIZE_INT_32)# define SIGNIFICAND_EQ_64(X,Y) \  (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand == (Y)->lo_significand))# define SIGNIFICAND_GT_64(X,Y) (((X)->hi_significand > (Y)->hi_significand) || \  (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand >  (Y)->lo_significand)))# define SIGNIFICAND_GE_64(X,Y) (((X)->hi_significand > (Y)->hi_significand) || \  (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand >= (Y)->lo_significand)))# define SIGNIFICAND_LT_64(X,Y) (((X)->hi_significand < (Y)->hi_significand) || \  (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand <  (Y)->lo_significand)))# define SIGNIFICAND_LE_64(X,Y) (((X)->hi_significand < (Y)->hi_significand) || \  (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand <= (Y)->lo_significand)))#elif defined(SIZE_INT_64)# define SIGNIFICAND_EQ_64(X,Y) ((X)->significand == (Y)->significand)# define SIGNIFICAND_GT_64(X,Y) ((X)->significand >  (Y)->significand)# define SIGNIFICAND_GE_64(X,Y) ((X)->significand >= (Y)->significand)# define SIGNIFICAND_LT_64(X,Y) ((X)->significand <  (Y)->significand)# define SIGNIFICAND_LE_64(X,Y) ((X)->significand <= (Y)->significand)#endif#if defined(SIZE_INT_32)# define SIGNIFICAND_EQ_80(X,Y) \    (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand == (Y)->lo_significand))# define SIGNIFICAND_GT_80(X,Y) (((X)->hi_significand > (Y)->hi_significand) || \    (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand >  (Y)->lo_significand)))# define SIGNIFICAND_GE_80(X,Y) (((X)->hi_significand > (Y)->hi_significand) || \    (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand >= (Y)->lo_significand)))# define SIGNIFICAND_LT_80(X,Y) (((X)->hi_significand < (Y)->hi_significand) || \    (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand <  (Y)->lo_significand)))# define SIGNIFICAND_LE_80(X,Y) (((X)->hi_significand < (Y)->hi_significand) || \    (((X)->hi_significand == (Y)->hi_significand) && ((X)->lo_significand <= (Y)->lo_significand)))#elif defined(SIZE_INT_64)# define SIGNIFICAND_EQ_80(X,Y) ((X)->significand == (Y)->significand)# define SIGNIFICAND_GT_80(X,Y) ((X)->significand >  (Y)->significand)# define SIGNIFICAND_GE_80(X,Y) ((X)->significand >= (Y)->significand)# define SIGNIFICAND_LT_80(X,Y) ((X)->significand <  (Y)->significand)# define SIGNIFICAND_LE_80(X,Y) ((X)->significand <= (Y)->significand)#endif#define VALUE_EQ_32(X,Y) \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_EQ_32(X, Y)))#define VALUE_GT_32(X,Y) (((X)->exponent > (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GT_32(X, Y))))#define VALUE_GE_32(X,Y) (((X)->exponent > (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GE_32(X, Y))))#define VALUE_LT_32(X,Y) (((X)->exponent < (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LT_32(X, Y))))#define VALUE_LE_32(X,Y) (((X)->exponent < (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LE_32(X, Y))))#define VALUE_EQ_64(X,Y) \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_EQ_64(X, Y)))#define VALUE_GT_64(X,Y) (((X)->exponent > (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GT_64(X, Y))))#define VALUE_GE_64(X,Y) (((X)->exponent > (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GE_64(X, Y))))#define VALUE_LT_64(X,Y) (((X)->exponent < (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LT_64(X, Y))))#define VALUE_LE_64(X,Y) (((X)->exponent < (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LE_64(X, Y))))#define VALUE_EQ_80(X,Y) \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_EQ_80(X, Y)))#define VALUE_GT_80(X,Y) (((X)->exponent > (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GT_80(X, Y))))#define VALUE_GE_80(X,Y) (((X)->exponent > (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_GE_80(X, Y))))#define VALUE_LT_80(X,Y) (((X)->exponent < (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LT_80(X, Y))))#define VALUE_LE_80(X,Y) (((X)->exponent < (Y)->exponent) || \   (((X)->exponent == (Y)->exponent) && (SIGNIFICAND_LE_80(X, Y))))/* add/subtract 1 ulp macros */#if defined(SIZE_INT_32)# define ADD_ULP_80(X) \    if ((++(X)->lo_significand == 0) && \        (++(X)->hi_significand == (((X)->exponent == 0) ? 0x80000000 : 0))) \    { \        (X)->hi_significand |= 0x80000000; \        ++(X)->exponent; \    }# define SUB_ULP_80(X) \    if (--(X)->lo_significand == 0xFFFFFFFF) { \        --(X)->hi_significand; \        if (((X)->exponent != 0) && \            ((X)->hi_significand == 0x7FFFFFFF) && \            (--(X)->exponent != 0)) \        { \            (X)->hi_significand |= 0x80000000; \        } \    }#elif defined(SIZE_INT_64)# define ADD_ULP_80(X) \    if (++(X)->significand == (((X)->exponent == 0) ? 0x8000000000000000 : 0))) { \        (X)->significand |= 0x8000000000000000; \        ++(X)->exponent; \    }# define SUB_ULP_80(X) \    { \        --(X)->significand; \        if (((X)->exponent != 0) && \            ((X)->significand == 0x7FFFFFFFFFFFFFFF) && \            (--(X)->exponent != 0)) \        { \            (X)->significand |= 0x8000000000000000; \        } \    }#endif/* error codes */#define DOMAIN     1   /* argument domain error */#define SING       2   /* argument singularity */#define OVERFLOW   3   /* overflow range error */#define UNDERFLOW  4   /* underflow range error */#define TLOSS      5   /* total loss of precision */#define PLOSS      6   /* partial loss of precision *//* */#define VOLATILE_32 /*volatile*/#define VOLATILE_64 /*volatile*/#define VOLATILE_80 /*volatile*/#define QUAD_TYPE _Quad#endif    /*__LIBM_SUPPORT_H_INCLUDED__*/

⌨️ 快捷键说明

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