pareto-core 0.1.98 → 0.1.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,17 +2,18 @@ import * as _pi from "../../../../interface";
2
2
  export declare namespace from {
3
3
  namespace number {
4
4
  /**
5
- * Performs integer division of two numbers (rounding towards negative infinity).
5
+ * Performs integer division of two numbers with configurable rounding behavior.
6
6
  *
7
7
  * dividend / divisor
8
8
  *
9
- * examples:
10
- * integer_division(7, 3) === 2
11
- * integer_division(7, -3) === -3
12
- * integer_division(-7, 3) === -3
13
- * integer_division(-7, -3) === 2
9
+ * Rounding modes:
10
+ * - 'towards negative infinity': floor (7.8 → 7, -7.8 -8)
11
+ * - 'towards positive infinity': ceiling (7.2 → 8, -7.8 -7)
12
+ * - 'towards zero': truncate (7.8 → 7, -7.8 -7)
13
+ * - 'towards nearest': round to nearest integer (7.5 → 8, 7.4 7)
14
+ * - 'away from zero': round away from zero (7.2 → 8, -7.2 → -8)
14
15
  */
15
- const divide: (dividend: number, divisor: number, abort: {
16
+ const divide: ($: number, divisor: number, round: ["towards negative infinity", null] | ["towards positive infinity", null] | ["towards nearest", null] | ["towards zero", null] | ["away from zero", null], abort: {
16
17
  divided_by_zero: _pi.Abort<null>;
17
18
  }) => number;
18
19
  }
@@ -6,29 +6,46 @@ var from;
6
6
  let number;
7
7
  (function (number) {
8
8
  /**
9
- * Performs integer division of two numbers (rounding towards negative infinity).
9
+ * Performs integer division of two numbers with configurable rounding behavior.
10
10
  *
11
11
  * dividend / divisor
12
12
  *
13
- * examples:
14
- * integer_division(7, 3) === 2
15
- * integer_division(7, -3) === -3
16
- * integer_division(-7, 3) === -3
17
- * integer_division(-7, -3) === 2
13
+ * Rounding modes:
14
+ * - 'towards negative infinity': floor (7.8 → 7, -7.8 -8)
15
+ * - 'towards positive infinity': ceiling (7.2 → 8, -7.8 -7)
16
+ * - 'towards zero': truncate (7.8 → 7, -7.8 -7)
17
+ * - 'towards nearest': round to nearest integer (7.5 → 8, 7.4 7)
18
+ * - 'away from zero': round away from zero (7.2 → 8, -7.2 → -8)
18
19
  */
19
- number.divide = (dividend, divisor, abort) => {
20
+ number.divide = ($, divisor, round, abort) => {
20
21
  if (divisor === 0) {
21
22
  abort.divided_by_zero(null);
22
23
  }
23
- const quotient = dividend / divisor;
24
- // when dividend and divisor have different signs, the quotient is negative
25
- // For positive quotients, use Math.floor to round down
26
- // this behavior matches the integer division in Python, Java, and C99 and later
27
- if (quotient >= 0) {
28
- return Math.floor(quotient);
29
- }
30
- else {
31
- return Math.ceil(quotient);
24
+ const quotient = $ / divisor;
25
+ switch (round[0]) {
26
+ case 'towards negative infinity':
27
+ // Always round down (floor)
28
+ return Math.floor(quotient);
29
+ case 'towards positive infinity':
30
+ // Always round up (ceiling)
31
+ return Math.ceil(quotient);
32
+ case 'towards zero':
33
+ // Truncate decimal part (round towards zero)
34
+ return Math.trunc(quotient);
35
+ case 'towards nearest':
36
+ // Round to nearest integer (0.5 rounds away from zero)
37
+ return Math.round(quotient);
38
+ case 'away from zero':
39
+ // Round away from zero
40
+ if (quotient >= 0) {
41
+ return Math.ceil(quotient);
42
+ }
43
+ else {
44
+ return Math.floor(quotient);
45
+ }
46
+ default:
47
+ const _exhaustiveCheck = round;
48
+ throw new Error(`Unexpected rounding mode: ${round}`);
32
49
  }
33
50
  };
34
51
  })(number = from.number || (from.number = {}));
@@ -68,4 +85,4 @@ var from;
68
85
  };
69
86
  };
70
87
  })(from || (exports.from = from = {}));
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL19faW50ZXJuYWxzL3N5bmMvYXNzaWduL2NvbnN0cnVjdC9udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsSUFBaUIsSUFBSSxDQTBHcEI7QUExR0QsV0FBaUIsSUFBSTtJQUVqQixJQUFpQixNQUFNLENBcUN0QjtJQXJDRCxXQUFpQixNQUFNO1FBRW5COzs7Ozs7Ozs7O1dBVUc7UUFDVSxhQUFNLEdBQUcsQ0FDbEIsUUFBZ0IsRUFDaEIsT0FBZSxFQUNmLEtBRUMsRUFDSyxFQUFFO1lBQ1IsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hCLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDL0IsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUE7WUFDbkMsMkVBQTJFO1lBQzNFLHVEQUF1RDtZQUV2RCxnRkFBZ0Y7WUFFaEYsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUMvQixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzlCLENBQUM7UUFDTCxDQUFDLENBQUE7SUFHTCxDQUFDLEVBckNnQixNQUFNLEdBQU4sV0FBTSxLQUFOLFdBQU0sUUFxQ3RCO0lBRVksU0FBSSxHQUFHLENBQ2hCLElBQWlCLEVBQ25CLEVBQUU7UUFDQSxPQUFPO1lBRUgsZUFBZSxFQUFFLEdBQ1AsRUFBRTtnQkFDUixPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFBO1lBQ3ZDLENBQUM7WUFFRCxNQUFNLEVBQUUsQ0FDSixhQUFxQixFQUNyQixZQUdXLEVBQ0wsRUFBRTtnQkFDUixJQUFJLGFBQWEsR0FBRyxhQUFhLENBQUE7Z0JBQ2pDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDaEMsYUFBYSxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUE7Z0JBQ2xELENBQUMsQ0FBQyxDQUFBO2dCQUNGLE9BQU8sYUFBYSxDQUFBO1lBQ3hCLENBQUM7WUFFRCxHQUFHLEVBQUUsQ0FDRCxZQUVXLEVBQ0wsRUFBRTtnQkFDUixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUE7Z0JBQ1gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNoQyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUMxQixDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLEdBQUcsQ0FBQTtZQUNkLENBQUM7U0FFSixDQUFBO0lBQ0wsQ0FBQyxDQUFBO0lBRVksZUFBVSxHQUFHLENBQ3RCLFVBQTZCLEVBQy9CLEVBQUU7UUFDQSxPQUFPO1lBRUgsaUJBQWlCLEVBQUUsR0FDVCxFQUFFO2dCQUNSLE9BQU8sVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUE7WUFDL0MsQ0FBQztZQUVELEdBQUcsRUFBRSxDQUNELFlBRVcsRUFDTCxFQUFFO2dCQUNSLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQTtnQkFDWCxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RDLEdBQUcsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQzdCLENBQUMsQ0FBQyxDQUFBO2dCQUNGLE9BQU8sR0FBRyxDQUFBO1lBQ2QsQ0FBQztTQUVKLENBQUE7SUFDTCxDQUFDLENBQUE7QUFHTCxDQUFDLEVBMUdnQixJQUFJLG9CQUFKLElBQUksUUEwR3BCIn0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL19faW50ZXJuYWxzL3N5bmMvYXNzaWduL2NvbnN0cnVjdC9udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsSUFBaUIsSUFBSSxDQXFJcEI7QUFySUQsV0FBaUIsSUFBSTtJQUVqQixJQUFpQixNQUFNLENBZ0V0QjtJQWhFRCxXQUFpQixNQUFNO1FBRW5COzs7Ozs7Ozs7OztXQVdHO1FBQ1UsYUFBTSxHQUFHLENBQ2xCLENBQVMsRUFDVCxPQUFlLEVBQ2YsS0FLOEIsRUFDOUIsS0FFQyxFQUNLLEVBQUU7WUFDUixJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEIsS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUMvQixDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQTtZQUU1QixRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNmLEtBQUssMkJBQTJCO29CQUM1Qiw0QkFBNEI7b0JBQzVCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFFL0IsS0FBSywyQkFBMkI7b0JBQzVCLDRCQUE0QjtvQkFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO2dCQUU5QixLQUFLLGNBQWM7b0JBQ2YsNkNBQTZDO29CQUM3QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7Z0JBRS9CLEtBQUssaUJBQWlCO29CQUNsQix1REFBdUQ7b0JBQ3ZELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFFL0IsS0FBSyxnQkFBZ0I7b0JBQ2pCLHVCQUF1QjtvQkFDdkIsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDOUIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDL0IsQ0FBQztnQkFFTDtvQkFDSSxNQUFNLGdCQUFnQixHQUFVLEtBQUssQ0FBQTtvQkFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsS0FBSyxFQUFFLENBQUMsQ0FBQTtZQUM3RCxDQUFDO1FBQ0wsQ0FBQyxDQUFBO0lBR0wsQ0FBQyxFQWhFZ0IsTUFBTSxHQUFOLFdBQU0sS0FBTixXQUFNLFFBZ0V0QjtJQUVZLFNBQUksR0FBRyxDQUNoQixJQUFpQixFQUNuQixFQUFFO1FBQ0EsT0FBTztZQUVILGVBQWUsRUFBRSxHQUNQLEVBQUU7Z0JBQ1IsT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTtZQUN2QyxDQUFDO1lBRUQsTUFBTSxFQUFFLENBQ0osYUFBcUIsRUFDckIsWUFHVyxFQUNMLEVBQUU7Z0JBQ1IsSUFBSSxhQUFhLEdBQUcsYUFBYSxDQUFBO2dCQUNqQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2hDLGFBQWEsR0FBRyxZQUFZLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFBO2dCQUNsRCxDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLGFBQWEsQ0FBQTtZQUN4QixDQUFDO1lBRUQsR0FBRyxFQUFFLENBQ0QsWUFFVyxFQUNMLEVBQUU7Z0JBQ1IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFBO2dCQUNYLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQkFDaEMsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDMUIsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsT0FBTyxHQUFHLENBQUE7WUFDZCxDQUFDO1NBRUosQ0FBQTtJQUNMLENBQUMsQ0FBQTtJQUVZLGVBQVUsR0FBRyxDQUN0QixVQUE2QixFQUMvQixFQUFFO1FBQ0EsT0FBTztZQUVILGlCQUFpQixFQUFFLEdBQ1QsRUFBRTtnQkFDUixPQUFPLFVBQVUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFBO1lBQy9DLENBQUM7WUFFRCxHQUFHLEVBQUUsQ0FDRCxZQUVXLEVBQ0wsRUFBRTtnQkFDUixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUE7Z0JBQ1gsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUN0QyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUM3QixDQUFDLENBQUMsQ0FBQTtnQkFDRixPQUFPLEdBQUcsQ0FBQTtZQUNkLENBQUM7U0FFSixDQUFBO0lBQ0wsQ0FBQyxDQUFBO0FBR0wsQ0FBQyxFQXJJZ0IsSUFBSSxvQkFBSixJQUFJLFFBcUlwQiJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pareto-core",
3
- "version": "0.1.98",
3
+ "version": "0.1.99",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Corno",
6
6
  "description": "the core language constructs for the Pareto programming language (in TypeScript)",