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

📄 x-cvsweb-markup(50)

📁 软件浮点数计算功能
💻
📖 第 1 页 / 共 5 页
字号:
/* * Main addition routine.  The input values should be cooked. */#define _FP_ADD_INTERNAL(fs, wc, R, X, Y, OP)                                \do {                                                                         \  switch (_FP_CLS_COMBINE(X##_c, Y##_c))                                     \  {                                                                          \  case _FP_CLS_COMBINE(FP_CLS_NORMAL,FP_CLS_NORMAL):                         \    {                                                                        \      /* shift the smaller number so that its exponent matches the larger */ \      _FP_I_TYPE diff = X##_e - Y##_e;                                       \                                                                             \      if (diff < 0)                                                          \        {                                                                     \          diff = -diff;                                                             \          if (diff <= _FP_WFRACBITS_##fs)                                     \            _FP_FRAC_SRS_##wc(X, diff, _FP_WFRACBITS_##fs);                     \          else if (!_FP_FRAC_ZEROP_##wc(X))                                     \            _FP_FRAC_SET_##wc(X, _FP_MINFRAC_##wc);                             \          R##_e = Y##_e;                                                     \        }                                                                     \      else                                                                   \        {                                                                     \          if (diff > 0)                                                             \            {                                                                     \              if (diff <= _FP_WFRACBITS_##fs)                                     \                _FP_FRAC_SRS_##wc(Y, diff, _FP_WFRACBITS_##fs);                     \              else if (!_FP_FRAC_ZEROP_##wc(Y))                                     \                _FP_FRAC_SET_##wc(Y, _FP_MINFRAC_##wc);                             \            }                                                                     \          R##_e = X##_e;                                                     \        }                                                                     \                                                                             \      R##_c = FP_CLS_NORMAL;                                                 \                                                                             \      if (X##_s == Y##_s)                                                    \        {                                                                     \          R##_s = X##_s;                                                     \          _FP_FRAC_ADD_##wc(R, X, Y);                                             \          if (_FP_FRAC_OVERP_##wc(fs, R))                                     \            {                                                                     \              _FP_FRAC_SRS_##wc(R, 1, _FP_WFRACBITS_##fs);                     \              R##_e++;                                                             \            }                                                                     \        }                                                                     \      else                                                                   \        {                                                                     \          R##_s = X##_s;                                                     \          _FP_FRAC_SUB_##wc(R, X, Y);                                             \          if (_FP_FRAC_ZEROP_##wc(R))                                             \            {                                                                     \              /* return an exact zero */                                     \              if (FP_ROUNDMODE == FP_RND_MINF)                                     \                R##_s |= Y##_s;                                                     \              else                                                             \                R##_s &= Y##_s;                                                     \              R##_c = FP_CLS_ZERO;                                             \            }                                                                     \          else                                                                     \            {                                                                     \              if (_FP_FRAC_NEGP_##wc(R))                                     \                {                                                             \                  _FP_FRAC_SUB_##wc(R, Y, X);                                     \                  R##_s = Y##_s;                                             \                }                                                             \                                                                             \              /* renormalize after subtraction */                             \              _FP_FRAC_CLZ_##wc(diff, R);                                     \              diff -= _FP_WFRACXBITS_##fs;                                     \

⌨️ 快捷键说明

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