quaeratin
Version:
An extended precision floating point library (as per Shewchuk) - precision only limited by overflow / underflow
77 lines (64 loc) • 1.73 kB
text/typescript
import { expect, assert } from 'chai';
import { describe } from 'mocha';
import { split, eEstimate, eSum } from '../../src/index.js';
/**
*
* @param sum
* @param expected
*/
function check(sum: number[][], expected: number) {
let result = eSum(sum);
expect(eEstimate(result)).to.eql(expected);
}
describe('eCalculate sum', function() {
it('should calculate sum correctly',
function() {
// zero should equal 0
check(
[[0]],
0
);
// zero add zero is still zero
check(
[[0],[0]],
0
);
// 6 plus 4 === 10
check(
[[6], [4]],
10
);
// 0.1 + 0.2 === 0.3ish
check(
[[0.1], [0.2]],
0.30000000000000004
);
// 2 + 24 + 6 === 32
check(
[[2], [24], [6]],
32
);
// some complicated sum
// 0.00289080862514 +
// 8.11206277735137373945878448 +
// 7.71722568769361084779904
check(
[[0.00289080862514],
[8.11206277735137373945878448],
[7.71722568769361084779904]],
15.83217927367012458725782448
);
// some more complicated sum
// 0.123421*0.1*0.2342234 +
// 0.23345554*2.123123*3.76564*4.3462346 +
// 3.2354123*2.1231232*1.123456789 = 15.83217927367012458725782448
check(
[
split(0.00289080862514).reverse(),
split(8.11206277735137373945878448).reverse(),
split(7.71722568769361084779904).reverse(),
],
15.83217927367012458725782448
);
});
});