UNPKG

decimal128

Version:

Partial implementation of IEEE 754 Decimal128 decimal floating-point numbers

1 lines 4.71 kB
{"version":3,"file":"Decimal.cjs","sources":["../../src/Decimal.mts"],"sourcesContent":["import { Rational } from \"./Rational.mjs\";\nconst ratOne = new Rational(1n, 1n);\nconst ratTen = new Rational(10n, 1n);\nfunction _cohort(s) {\n if (s.match(/^-/)) {\n let c = _cohort(s.substring(1));\n if (c === \"0\") {\n return \"-0\";\n }\n return c.negate();\n }\n if (s.match(/^00+/)) {\n return _cohort(s.substring(1));\n }\n if (s.match(/^0([.]0+)?$/)) {\n return \"0\";\n }\n if (s.match(/^0[eE][+-]?[0-9]+$/)) {\n return \"0\";\n }\n return Rational.fromString(s);\n}\nfunction _quantum(s) {\n if (s.match(/^-/)) {\n return _quantum(s.substring(1));\n }\n if (s.match(/[.]/)) {\n let [_, rhs] = s.split(\".\");\n if (rhs.match(/[eE]/)) {\n let [dec, exp] = rhs.split(/[eE]/);\n return parseInt(exp) - dec.length;\n }\n return 0 - rhs.length;\n }\n if (s.match(/[eE]/)) {\n let [dec, exp] = s.split(/[eE]/);\n return parseInt(exp);\n }\n return 0;\n}\nexport class Decimal {\n constructor(x) {\n let v = typeof x === \"string\" ? _cohort(x) : x.cohort;\n let q = typeof x === \"string\" ? _quantum(x) : x.quantum;\n if (v instanceof Rational && v.isZero()) {\n throw new RangeError(\"A rational number cohort must not be zero.\");\n }\n if (!Number.isInteger(q)) {\n throw new RangeError(\"The quantum must be an integer.\");\n }\n if (Object.is(q, -0)) {\n throw new RangeError(\"The quantum cannot be negative zero.\");\n }\n this.cohort = v;\n this.quantum = q;\n }\n negate() {\n let v = this.cohort;\n return new Decimal({\n cohort: v.negate(),\n quantum: this.quantum,\n });\n }\n coefficient() {\n let v = this.cohort;\n let q = this.quantum;\n let c = v.scale10(0 - q);\n return c.numerator;\n }\n isNegative() {\n let v = this.cohort;\n return v.isNegative;\n }\n}\n"],"names":["Rational"],"mappings":"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"}