@@ -62,7 +62,7 @@ _bc_truncate (bc_num *num)
62
62
int
63
63
bc_raisemod (bc_num base , bc_num expo , bc_num mod , bc_num * result , int scale )
64
64
{
65
- bc_num power , exponent , modulus , parity , temp ;
65
+ bc_num parity , temp ;
66
66
int rscale ;
67
67
68
68
/* Check for correct numbers. */
@@ -88,39 +88,33 @@ bc_raisemod (bc_num base, bc_num expo, bc_num mod, bc_num *result, int scale)
88
88
}
89
89
90
90
/* Set initial values. */
91
- power = bc_copy_num (base );
92
- exponent = bc_copy_num (expo );
93
- modulus = bc_copy_num (mod );
94
91
temp = bc_copy_num (BCG (_one_ ));
95
92
bc_init_num (& parity );
96
93
97
94
/* 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_ )) )
100
97
{
101
98
bc_free_num (& temp );
102
99
temp = bc_new_num (1 , scale );
103
100
}
104
101
else
105
102
{
106
- while ( !bc_is_zero (exponent ) )
103
+ while ( !bc_is_zero (expo ) )
107
104
{
108
- (void ) bc_divmod (exponent , BCG (_two_ ), & exponent , & parity , 0 );
105
+ (void ) bc_divmod (expo , BCG (_two_ ), & expo , & parity , 0 );
109
106
if ( !bc_is_zero (parity ) )
110
107
{
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 );
113
110
}
114
111
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 );
117
114
}
118
115
}
119
116
120
117
/* Assign the value. */
121
- bc_free_num (& power );
122
- bc_free_num (& exponent );
123
- bc_free_num (& modulus );
124
118
bc_free_num (result );
125
119
bc_free_num (& parity );
126
120
* result = temp ;
0 commit comments