mpf_cmp.c

来自「精确小数算法库,可以实现任意长度的精确小数算法,用c语言实现,主要用于密码学中小」· C语言 代码 · 共 59 行

C
59
字号
/* 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_cmp(mp_float *a,   mp_float *b){   int za, zb, sa, sb;   /* if one is zero than we early out */   za = mp_iszero(&(a->mantissa));   sa = a->mantissa.sign;   zb = mp_iszero(&(b->mantissa));   sb = b->mantissa.sign;   if (za == MP_YES && zb == MP_NO) {      /* result depends on b */      if (sb == MP_NEG) {         return MP_GT;      } else {         return MP_LT;      }   } else if (za == MP_NO && zb == MP_YES) {      /* result depends on a */      if (sa == MP_NEG) {         return MP_LT;      } else {         return MP_GT;      }   }   /* compare the signs */   if (sa == MP_NEG && sb == MP_ZPOS) {      return MP_LT;   } else if (sa == MP_ZPOS && sb == MP_NEG) {      return MP_GT;   }   /* they're both non-zero, the same sign and normalized, compare the exponents */   if (a->exp > b->exp) {      return (sa == MP_NEG) ? MP_LT : MP_GT;   } else if (a->exp < b->exp) {      return (sa == MP_NEG) ? MP_GT : MP_LT;   }   /* same exponent and sign, compare mantissa */   return mp_cmp(&(a->mantissa), &(b->mantissa));}

⌨️ 快捷键说明

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