File tree 2 files changed +42
-1
lines changed
2 files changed +42
-1
lines changed Original file line number Diff line number Diff line change @@ -281,7 +281,30 @@ class dec_utils {
281
281
public:
282
282
// result = (value1 * value2) / divisor
283
283
inline static int64 multDiv (const int64 value1, const int64 value2,
284
- int64 divisor) {
284
+ int64 divisor) {
285
+
286
+ if (value1 == 0 || value2 == 0 ) {
287
+ return 0 ;
288
+ }
289
+
290
+ if (divisor == 1 ) {
291
+ return value1 * value2;
292
+ }
293
+
294
+ if (value1 == 1 ) {
295
+ int64 result;
296
+ if (RoundPolicy::div_rounded (result, value2, divisor)) {
297
+ return result;
298
+ }
299
+ }
300
+
301
+ if (value2 == 1 ) {
302
+ int64 result;
303
+ if (RoundPolicy::div_rounded (result, value1, divisor)) {
304
+ return result;
305
+ }
306
+ }
307
+
285
308
// we don't check for division by zero, the caller should - the next line will throw.
286
309
const int64 value1int = value1 / divisor;
287
310
int64 value1dec = value1 % divisor;
Original file line number Diff line number Diff line change @@ -36,6 +36,24 @@ BOOST_AUTO_TEST_CASE(decimalAsInteger)
36
36
BOOST_CHECK_EQUAL (c.getAsInteger (), expectedValue);
37
37
}
38
38
39
+ BOOST_AUTO_TEST_CASE (issue67)
40
+ {
41
+ using namespace std ;
42
+ dec::decimal<4 , dec::half_even_round_policy> p1 (" 350.68" );
43
+ dec::decimal<4 , dec::half_even_round_policy> p2 (" 359.2050" );
44
+
45
+ dec::decimal<0 , dec::half_even_round_policy> s1 (" 550" );
46
+ dec::decimal<0 , dec::half_even_round_policy> s2 (" 550" );
47
+
48
+ dec::decimal<0 , dec::half_even_round_policy> s_sum = s1 + s2;
49
+ dec::decimal<4 , dec::half_even_round_policy> p_sum = p1 + p2;
50
+ dec::decimal<4 , dec::half_even_round_policy> result = (p_sum / s_sum);
51
+
52
+ dec::decimal<4 , dec::half_even_round_policy> expected (" 0.6454" );
53
+
54
+ BOOST_CHECK_EQUAL (expected, result);
55
+ }
56
+
39
57
// test with values internally > 2^32
40
58
BOOST_AUTO_TEST_CASE (decimalMidOverflow)
41
59
{
You can’t perform that action at this time.
0 commit comments