x-cvsweb-markup(50)

来自「软件浮点数计算功能」· 代码 · 共 357 行 · 第 1/5 页

TXT
357
字号
        if (X##_e <= _FP_WFRACBITS_##fs)                        \          {                                                        \            _FP_FRAC_SRS_##wc(X, X##_e, _FP_WFRACBITS_##fs);        \            _FP_ROUND(wc, X);                                        \            if (_FP_FRAC_HIGH_##fs(X)                                \                & (_FP_OVERFLOW_##fs >> 1))                        \              {                                                        \                X##_e = 1;                                        \                _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc);        \              }                                                        \            else                                                \              {                                                        \                X##_e = 0;                                        \                _FP_FRAC_SRL_##wc(X, _FP_WORKBITS);                \                FP_SET_EXCEPTION(FP_EX_UNDERFLOW);                \              }                                                        \          }                                                        \        else                                                        \          {                                                        \            /* underflow to zero */                                \            X##_e = 0;                                                \            if (!_FP_FRAC_ZEROP_##wc(X))                        \              {                                                        \                _FP_FRAC_SET_##wc(X, _FP_MINFRAC_##wc);                \                _FP_ROUND(wc, X);                                \                _FP_FRAC_LOW_##wc(X) >>= (_FP_WORKBITS);        \              }                                                        \            FP_SET_EXCEPTION(FP_EX_UNDERFLOW);                        \          }                                                        \      }                                                         \    break;                                                      \                                                                \  case FP_CLS_ZERO:                                             \    X##_e = 0;                                                  \    _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc);                    \    break;                                                      \                                                                \  case FP_CLS_INF:                                              \    X##_e = _FP_EXPMAX_##fs;                                    \    _FP_FRAC_SET_##wc(X, _FP_ZEROFRAC_##wc);                    \    break;                                                      \                                                                \  case FP_CLS_NAN:                                              \    X##_e = _FP_EXPMAX_##fs;                                    \    if (!_FP_KEEPNANFRACP)                                      \      {                                                         \        _FP_FRAC_SET_##wc(X, _FP_NANFRAC_##fs);                        \        X##_s = _FP_NANSIGN_##fs;                                \      }                                                         \    else                                                        \      _FP_FRAC_HIGH_RAW_##fs(X) |= _FP_QNANBIT_##fs;            \    break;                                                      \  }                                                             \} while (0)/* This one accepts raw argument and not cooked,  returns * 1 if X is a signaling NaN. */#define _FP_ISSIGNAN(fs, wc, X)                                 \({                                                              \  int __ret = 0;                                                \  if (X##_e == _FP_EXPMAX_##fs)                                 \    {                                                           \      if (!_FP_FRAC_ZEROP_##wc(X)                               \          && !(_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs))        \        __ret = 1;                                                \    }                                                           \  __ret;                                                        \})

⌨️ 快捷键说明

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