mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
102 lines
3.0 KiB
Plaintext
102 lines
3.0 KiB
Plaintext
Division
|
|
|
|
This describes the division algorithm used by the MPI library.
|
|
|
|
Input: a, b; a > b
|
|
Compute: Q, R; a = Qb + R
|
|
|
|
The input numbers are normalized so that the high-order digit of b is
|
|
at least half the radix. This guarantees that we have a reasonable
|
|
way to guess at the digits of the quotient (this method was taken from
|
|
Knuth, vol. 2, with adaptations).
|
|
|
|
To normalize, test the high-order digit of b. If it is less than half
|
|
the radix, multiply both a and b by d, where:
|
|
|
|
radix - 1
|
|
d = -----------
|
|
bmax + 1
|
|
|
|
...where bmax is the high-order digit of b. Otherwise, set d = 1.
|
|
|
|
Given normalize values for a and b, let the notation a[n] denote the
|
|
nth digit of a. Let #a be the number of significant figures of a (not
|
|
including any leading zeroes).
|
|
|
|
Let R = 0
|
|
Let p = #a - 1
|
|
|
|
while(p >= 0)
|
|
do
|
|
R = (R * radix) + a[p]
|
|
p = p - 1
|
|
while(R < b and p >= 0)
|
|
|
|
if(R < b)
|
|
break
|
|
|
|
q = (R[#R - 1] * radix) + R[#R - 2]
|
|
q = q / b[#b - 1]
|
|
|
|
T = b * q
|
|
|
|
while(T > L)
|
|
q = q - 1
|
|
T = T - b
|
|
endwhile
|
|
|
|
L = L - T
|
|
|
|
Q = (Q * radix) + q
|
|
|
|
endwhile
|
|
|
|
At this point, Q is the quotient, and R is the normalized remainder.
|
|
To denormalize R, compute:
|
|
|
|
R = (R / d)
|
|
|
|
At this point, you are finished.
|
|
|
|
------------------------------------------------------------------
|
|
***** BEGIN LICENSE BLOCK *****
|
|
Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
|
|
The contents of this file are subject to the Mozilla Public License Version
|
|
1.1 (the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
for the specific language governing rights and limitations under the
|
|
License.
|
|
|
|
The Original Code is the MPI Arbitrary Precision Integer Arithmetic
|
|
library.
|
|
|
|
The Initial Developer of the Original Code is
|
|
Michael J. Fromberger <sting@linguist.dartmouth.edu>
|
|
Portions created by the Initial Developer are Copyright (C) 1998, 2000
|
|
the Initial Developer. All Rights Reserved.
|
|
|
|
Contributor(s):
|
|
|
|
Alternatively, the contents of this file may be used under the terms of
|
|
either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
in which case the provisions of the GPL or the LGPL are applicable instead
|
|
of those above. If you wish to allow use of your version of this file only
|
|
under the terms of either the GPL or the LGPL, and not to allow others to
|
|
use your version of this file under the terms of the MPL, indicate your
|
|
decision by deleting the provisions above and replace them with the notice
|
|
and other provisions required by the GPL or the LGPL. If you do not delete
|
|
the provisions above, a recipient may use your version of this file under
|
|
the terms of any one of the MPL, the GPL or the LGPL.
|
|
|
|
***** END LICENSE BLOCK *****
|
|
|
|
$Id: div.txt,v 1.2 2005/02/02 22:28:22 gerv%gerv.net Exp $
|
|
|
|
|