Skip to content

Commit dbbf930

Browse files
authored
Merge v1.1.3
- `Decimal`: - `_divideOperationByDynamicIntImpl2`: fix operation with therms of different signals (`-/+` or `+/-`).
2 parents 4e3d552 + 7a28572 commit dbbf930

6 files changed

+37
-7
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 1.1.3
2+
3+
- `Decimal`:
4+
- `_divideOperationByDynamicIntImpl2`: fix operation with therms of different signals (`-/+` or `+/-`).
5+
16
## 1.1.2
27

38
- sdk: '>=3.4.0 <4.0.0'

lib/src/statistics_decimal.dart

+14-5
Original file line numberDiff line numberDiff line change
@@ -1183,11 +1183,20 @@ class Decimal implements DynamicNumber<Decimal> {
11831183
var r2 = r.multiplyDynamicInt(r2Scale);
11841184
var r2Div = r2 ~/ n;
11851185

1186-
while (r2Precision < 15 && (r2Div.multiplyDynamicInt(n)) < r2) {
1187-
r2 = r2.multiplyDynamicInt(r2Scale);
1188-
r2Div = r2 ~/ n;
1189-
r2Precision *= 2;
1190-
r2Scale = r2Scale.multiplyDynamicInt(r2Scale);
1186+
if (r2.isNegative) {
1187+
while (r2Precision < 15 && r2Div.multiplyDynamicInt(n) > r2) {
1188+
r2 = r2.multiplyDynamicInt(r2Scale);
1189+
r2Div = r2 ~/ n;
1190+
r2Precision *= 2;
1191+
r2Scale = r2Scale.multiplyDynamicInt(r2Scale);
1192+
}
1193+
} else {
1194+
while (r2Precision < 15 && r2Div.multiplyDynamicInt(n) < r2) {
1195+
r2 = r2.multiplyDynamicInt(r2Scale);
1196+
r2Div = r2 ~/ n;
1197+
r2Precision *= 2;
1198+
r2Scale = r2Scale.multiplyDynamicInt(r2Scale);
1199+
}
11911200
}
11921201

11931202
d = d.multiplyDynamicInt(r2Scale).sumDynamicInt(r2Div);

lib/src/statistics_extension.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,9 @@ extension ListExtension<T> on List<T> {
326326
return <T>[a, b, c];
327327
}
328328
} else if (c == d) {
329+
assert(a != c);
329330
if (a == b) {
330-
return a == c ? <T>[a] : <T>[a, c];
331+
return <T>[a, c];
331332
} else {
332333
return <T>[a, b, c];
333334
}

pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: statistics
22
description: Statistics package for easy and efficient data manipulation with built-in Bayesian Network (Bayes Net), many mathematical functions and tools.
3-
version: 1.1.2
3+
version: 1.1.3
44
homepage: https://github.com/gmpassos/statistics
55

66
environment:

test/statistics_decimal_test.dart

+12
Original file line numberDiff line numberDiff line change
@@ -1163,6 +1163,18 @@ void main() {
11631163
(1000000.toDecimal().divideBigIntAsDecimal(2.toBigInt()))
11641164
.toStringStandard(),
11651165
equals('500000.0'));
1166+
1167+
expect(Decimal.parse('500.0') / Decimal.parse('55597.463309718'),
1168+
equals(Decimal.parse('0.008993216061219')));
1169+
1170+
expect(Decimal.parse('-500.0') / Decimal.parse('-55597.463309718'),
1171+
equals(Decimal.parse('0.008993216061219')));
1172+
1173+
expect(Decimal.parse('-500.0') / Decimal.parse('55597.463309718'),
1174+
equals(Decimal.parse('-0.008993216061219')));
1175+
1176+
expect(Decimal.parse('500.0') / Decimal.parse('-55597.463309718'),
1177+
equals(Decimal.parse('-0.008993216061219')));
11661178
});
11671179

11681180
test('operation %', () {

test/statistics_extension_test.dart

+3
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,9 @@ void main() {
170170
expect(['10', '30', '30', '30'].toDistinctList(),
171171
allOf(isA<List<String>>(), equals(['10', '30'])));
172172

173+
expect(['30', '20', '30', '30'].toDistinctList(),
174+
allOf(isA<List<String>>(), equals(['30', '20'])));
175+
173176
expect(['10', '10', '20', '30', '40', '50'].toDistinctList(),
174177
allOf(isA<List<String>>(), equals(['10', '20', '30', '40', '50'])));
175178

0 commit comments

Comments
 (0)