bdiv_dbm1c.c
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:2k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. /* mpn_bdiv_dbm1c -- divide an mpn number by a divisor of B-1, where B is the
  2.    limb base.  The dbm1c moniker means "Divisor of B Minus 1 with Carry".
  3.    THE FUNCTION IN THIS FILE IS INTERNAL WITH A MUTABLE INTERFACE.  IT IS ONLY
  4.    SAFE TO REACH IT THROUGH DOCUMENTED INTERFACES.  IN FACT, IT IS ALMOST
  5.    GUARANTEED THAT IT'LL CHANGE OR DISAPPEAR IN A FUTURE GNU MP RELEASE.
  6. Copyright 2008, 2009 Free Software Foundation, Inc.
  7. This file is part of the GNU MP Library.
  8. The GNU MP Library is free software; you can redistribute it and/or modify
  9. it under the terms of the GNU Lesser General Public License as published by
  10. the Free Software Foundation; either version 3 of the License, or (at your
  11. option) any later version.
  12. The GNU MP Library is distributed in the hope that it will be useful, but
  13. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  14. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  15. License for more details.
  16. You should have received a copy of the GNU Lesser General Public License
  17. along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
  18. #include "gmp.h"
  19. #include "gmp-impl.h"
  20. #include "longlong.h"
  21. mp_limb_t
  22. mpn_bdiv_dbm1c (mp_ptr qp, mp_srcptr ap, mp_size_t n, mp_limb_t bd, mp_limb_t h)
  23. {
  24.   mp_limb_t a, p0, p1, cy;
  25.   mp_size_t i;
  26.   for (i = 0; i < n; i++)
  27.     {
  28.       a = ap[i];
  29.       umul_ppmm (p1, p0, a, bd << GMP_NAIL_BITS);
  30.       p0 >>= GMP_NAIL_BITS;
  31.       cy = h < p0;
  32.       h = (h - p0) & GMP_NUMB_MASK;
  33.       qp[i] = h;
  34.       h = h - p1 - cy;
  35.     }
  36.   return h;
  37. }