Skip to content

Commit 6556571

Browse files
committed
Revert "W.I.P. Clean up raisemod implementation"
This reverts commit 71e8769a4c059da5dfd6632825858f12c88d2346.
1 parent fb6993e commit 6556571

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

ext/bcmath/libbcmath/src/raisemod.c

Lines changed: 15 additions & 9 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 parity, temp;
65+
bc_num power, exponent, modulus, parity, temp;
6666
int rscale;
6767

6868
/* Check for correct numbers. */
@@ -88,33 +88,39 @@ 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);
9194
temp = bc_copy_num (BCG(_one_));
9295
bc_init_num(&parity);
9396

9497
/* Do the calculation. */
95-
rscale = MAX(scale, base->n_scale);
96-
if ( !bc_compare(mod, BCG(_one_)) )
98+
rscale = MAX(scale, power->n_scale);
99+
if ( !bc_compare(modulus, BCG(_one_)) )
97100
{
98101
bc_free_num (&temp);
99102
temp = bc_new_num (1, scale);
100103
}
101104
else
102105
{
103-
while ( !bc_is_zero(expo) )
106+
while ( !bc_is_zero(exponent) )
104107
{
105-
(void) bc_divmod (expo, BCG(_two_), &expo, &parity, 0);
108+
(void) bc_divmod (exponent, BCG(_two_), &exponent, &parity, 0);
106109
if ( !bc_is_zero(parity) )
107110
{
108-
bc_multiply (temp, base, &temp, rscale);
109-
(void) bc_modulo (temp, mod, &temp, scale);
111+
bc_multiply (temp, power, &temp, rscale);
112+
(void) bc_modulo (temp, modulus, &temp, scale);
110113
}
111114

112-
bc_multiply (base, base, &base, rscale);
113-
(void) bc_modulo (base, mod, &base, scale);
115+
bc_multiply (power, power, &power, rscale);
116+
(void) bc_modulo (power, modulus, &power, scale);
114117
}
115118
}
116119

117120
/* Assign the value. */
121+
bc_free_num (&power);
122+
bc_free_num (&exponent);
123+
bc_free_num (&modulus);
118124
bc_free_num (result);
119125
bc_free_num (&parity);
120126
*result = temp;

0 commit comments

Comments
 (0)