Skip to content

Commit fb6993e

Browse files
committed
W.I.P. Clean up raisemod implementation
1 parent 3c08be9 commit fb6993e

File tree

1 file changed

+9
-15
lines changed

1 file changed

+9
-15
lines changed

ext/bcmath/libbcmath/src/raisemod.c

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ _bc_truncate (bc_num *num)
6262
int
6363
bc_raisemod (bc_num base, bc_num expo, bc_num mod, bc_num *result, int scale)
6464
{
65-
bc_num power, exponent, modulus, parity, temp;
65+
bc_num parity, temp;
6666
int rscale;
6767

6868
/* Check for correct numbers. */
@@ -88,39 +88,33 @@ bc_raisemod (bc_num base, bc_num expo, bc_num mod, bc_num *result, int scale)
8888
}
8989

9090
/* Set initial values. */
91-
power = bc_copy_num (base);
92-
exponent = bc_copy_num (expo);
93-
modulus = bc_copy_num (mod);
9491
temp = bc_copy_num (BCG(_one_));
9592
bc_init_num(&parity);
9693

9794
/* Do the calculation. */
98-
rscale = MAX(scale, power->n_scale);
99-
if ( !bc_compare(modulus, BCG(_one_)) )
95+
rscale = MAX(scale, base->n_scale);
96+
if ( !bc_compare(mod, BCG(_one_)) )
10097
{
10198
bc_free_num (&temp);
10299
temp = bc_new_num (1, scale);
103100
}
104101
else
105102
{
106-
while ( !bc_is_zero(exponent) )
103+
while ( !bc_is_zero(expo) )
107104
{
108-
(void) bc_divmod (exponent, BCG(_two_), &exponent, &parity, 0);
105+
(void) bc_divmod (expo, BCG(_two_), &expo, &parity, 0);
109106
if ( !bc_is_zero(parity) )
110107
{
111-
bc_multiply (temp, power, &temp, rscale);
112-
(void) bc_modulo (temp, modulus, &temp, scale);
108+
bc_multiply (temp, base, &temp, rscale);
109+
(void) bc_modulo (temp, mod, &temp, scale);
113110
}
114111

115-
bc_multiply (power, power, &power, rscale);
116-
(void) bc_modulo (power, modulus, &power, scale);
112+
bc_multiply (base, base, &base, rscale);
113+
(void) bc_modulo (base, mod, &base, scale);
117114
}
118115
}
119116

120117
/* Assign the value. */
121-
bc_free_num (&power);
122-
bc_free_num (&exponent);
123-
bc_free_num (&modulus);
124118
bc_free_num (result);
125119
bc_free_num (&parity);
126120
*result = temp;

0 commit comments

Comments
 (0)