@@ -134,27 +134,33 @@ where
134134 . checked_add ( accumulated_passive_issuance)
135135 . ok_or ( ArithmeticError :: Overflow ) ?;
136136
137- // Calculate high - low
138- let delta_x = high. checked_sub ( low) . ok_or ( ArithmeticError :: Underflow ) ?;
139-
140- let high_low_mul = high. checked_mul ( low) . ok_or ( ArithmeticError :: Overflow ) ?;
141- let high_square = square ( high) ?;
142- let low_square = square ( low) ?;
143-
144- // Factorized cubic term: (high^2 + high * low + low^2)
145- let cubic_term = high_square
146- . checked_add ( high_low_mul)
147- . ok_or ( ArithmeticError :: Overflow ) ?
148- . checked_add ( low_square)
149- . ok_or ( ArithmeticError :: Overflow ) ?;
150-
151137 // Calculate m * (high^2 + high * low + low^2)
152- let term1 = self . m . checked_mul ( cubic_term) . ok_or ( ArithmeticError :: Overflow ) ?;
138+ let term1 = if self . m != 0 {
139+ let high_low_mul = high. checked_mul ( low) . ok_or ( ArithmeticError :: Overflow ) ?;
140+ let high_square = square ( high) ?;
141+ let low_square = square ( low) ?;
142+
143+ // Factorized cubic term: (high^2 + high * low + low^2)
144+ let cubic_term = high_square
145+ . checked_add ( high_low_mul)
146+ . ok_or ( ArithmeticError :: Overflow ) ?
147+ . checked_add ( low_square)
148+ . ok_or ( ArithmeticError :: Overflow ) ?;
153149
154- let high_plus_low = high. checked_add ( low) . ok_or ( ArithmeticError :: Overflow ) ?;
150+ self . m . checked_mul ( cubic_term) . ok_or ( ArithmeticError :: Overflow )
151+ } else {
152+ // if m is 0 the product is 0
153+ Ok ( self . m )
154+ } ?;
155155
156156 // Calculate n * (high + low)
157- let term2 = self . n . checked_mul ( high_plus_low) . ok_or ( ArithmeticError :: Overflow ) ?;
157+ let term2 = if self . n != 0 {
158+ let high_plus_low = high. checked_add ( low) . ok_or ( ArithmeticError :: Overflow ) ?;
159+ self . n . checked_mul ( high_plus_low) . ok_or ( ArithmeticError :: Overflow )
160+ } else {
161+ // if n is 0 the product is 0
162+ Ok ( self . n )
163+ } ?;
158164
159165 // Final calculation with factored (high - low)
160166 let result = term1
@@ -163,6 +169,9 @@ where
163169 . checked_add ( self . o )
164170 . ok_or ( ArithmeticError :: Overflow ) ?;
165171
172+ // Calculate high - low
173+ let delta_x = high. checked_sub ( low) . ok_or ( ArithmeticError :: Underflow ) ?;
174+
166175 result. checked_mul ( delta_x) . ok_or ( ArithmeticError :: Overflow )
167176 }
168177}
0 commit comments