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

📄 mpf_normalize.c

📁 精确小数算法库,可以实现任意长度的精确小数算法,用c语言实现,主要用于密码学中小数计算,验证可用
💻 C
字号:
/* LibTomFloat, multiple-precision floating-point library * * LibTomFloat is a library that provides multiple-precision * floating-point artihmetic as well as trigonometric functionality. * * This library requires the public domain LibTomMath to be installed. *  * This library is free for all purposes without any express * gurantee it works * * Tom St Denis, tomstdenis@iahu.ca, http://float.libtomcrypt.org */#include <tomfloat.h>int  mpf_normalize(mp_float *a){   long     cb, diff;   int      err;   mp_digit c;   /* sanity */   if (a->radix < 2) {      return MP_VAL;   }   cb = mp_count_bits(&(a->mantissa));   if (cb > a->radix) {      diff    = cb - a->radix;      a->exp += diff;      /* round it, add 1 after shift if diff-1'th bit is 1 */      c = a->mantissa.dp[diff/DIGIT_BIT] & (1U<<(diff%DIGIT_BIT));      if ((err = mp_div_2d(&(a->mantissa), diff, &(a->mantissa), NULL)) != MP_OKAY) {         return err;      }      if (c != 0) {         return mp_add_d(&(a->mantissa), 1, &(a->mantissa));      } else {         return MP_OKAY;      }   } else if (cb < a->radix) {      if (mp_iszero(&(a->mantissa)) == MP_YES) {         return mpf_const_0(a);      } else {         diff    = a->radix - cb;         a->exp -= diff;         return mp_mul_2d(&(a->mantissa), diff, &(a->mantissa));      }   }   return MP_OKAY;}

⌨️ 快捷键说明

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