@@ -74,34 +74,40 @@ constexpr auto add_impl(const T& lhs, const T& rhs) noexcept -> ReturnType
7474 // Need to check for the case where we have 1e+95 - anything = 9.99999... without losing a nine
7575 if (use_lhs)
7676 {
77- const auto removed_zeros {detail::remove_trailing_zeros (big_lhs)};
78- if (removed_zeros.trimmed_number == 1U )
79- {
80- --big_lhs;
81- big_lhs *= 10U ;
82- big_lhs += 9U ;
83- --lhs_exp;
84- }
85- else
77+ if (big_rhs != 0U )
8678 {
87- --big_lhs;
79+ const auto removed_zeros {detail::remove_trailing_zeros (big_lhs)};
80+ if (removed_zeros.trimmed_number == 1U )
81+ {
82+ --big_lhs;
83+ big_lhs *= 10U ;
84+ big_lhs += 9U ;
85+ --lhs_exp;
86+ }
87+ else
88+ {
89+ --big_lhs;
90+ }
8891 }
8992
9093 return ReturnType{big_lhs, lhs_exp, lhs.isneg ()};
9194 }
9295 else
9396 {
94- const auto removed_zeros {detail::remove_trailing_zeros (big_rhs)};
95- if (removed_zeros.trimmed_number == 1U )
97+ if (big_lhs != 0U )
9698 {
97- --big_rhs;
98- big_rhs *= 10U ;
99- big_rhs += 9U ;
100- --rhs_exp;
101- }
102- else
103- {
104- --big_rhs;
99+ const auto removed_zeros {detail::remove_trailing_zeros (big_rhs)};
100+ if (removed_zeros.trimmed_number == 1U )
101+ {
102+ --big_rhs;
103+ big_rhs *= 10U ;
104+ big_rhs += 9U ;
105+ --rhs_exp;
106+ }
107+ else
108+ {
109+ --big_rhs;
110+ }
105111 }
106112
107113 return ReturnType{big_rhs, rhs_exp, rhs.isneg ()};
@@ -186,34 +192,40 @@ constexpr auto d128_add_impl(T lhs_sig, U lhs_exp, bool lhs_sign,
186192 // Need to check for the case where we have 1e+95 - anything = 9.99999... without losing a nine
187193 if (use_lhs)
188194 {
189- const auto removed_zeros {detail::remove_trailing_zeros (lhs_sig)};
190- if (removed_zeros.trimmed_number == 1U )
195+ if (rhs_sig != 0U )
191196 {
192- --lhs_sig;
193- lhs_sig *= 10U ;
194- lhs_sig += 9U ;
195- --lhs_exp;
196- }
197- else
198- {
199- --lhs_sig;
197+ const auto removed_zeros {detail::remove_trailing_zeros (lhs_sig)};
198+ if (removed_zeros.trimmed_number == 1U )
199+ {
200+ --lhs_sig;
201+ lhs_sig *= 10U ;
202+ lhs_sig += 9U ;
203+ --lhs_exp;
204+ }
205+ else
206+ {
207+ --lhs_sig;
208+ }
200209 }
201210
202211 return ReturnType{lhs_sig, lhs_exp, lhs_sign};
203212 }
204213 else
205214 {
206- const auto removed_zeros {detail::remove_trailing_zeros (rhs_sig)};
207- if (removed_zeros.trimmed_number == 1U )
208- {
209- --rhs_sig;
210- rhs_sig *= 10U ;
211- rhs_sig += 9U ;
212- --rhs_exp;
213- }
214- else
215+ if (lhs_sig != 0U )
215216 {
216- --rhs_sig;
217+ const auto removed_zeros {detail::remove_trailing_zeros (rhs_sig)};
218+ if (removed_zeros.trimmed_number == 1U )
219+ {
220+ --rhs_sig;
221+ rhs_sig *= 10U ;
222+ rhs_sig += 9U ;
223+ --rhs_exp;
224+ }
225+ else
226+ {
227+ --rhs_sig;
228+ }
217229 }
218230
219231 return ReturnType{rhs_sig, rhs_exp, rhs_sign};
0 commit comments