quaeratin
Version:
An extended precision floating point library (as per Shewchuk) - precision only limited by overflow / underflow
114 lines (96 loc) • 3.07 kB
text/typescript
/*
import { expect, assert } from 'chai';
import { describe } from 'mocha';
import { eCompare, fastExpansionSum } from '../../src/index.js';
import { expansionSum } from '../../node/double-expansion/expansion-sum.js';
import { isNonOverlappingAll } from '../../src/index.js';;
import { isValid } from '../helpers/is-valid.js';
/**
*
* @param {number[]} e
* @param {number[]} f
* @param {number[]} res
*//*
function check(e, f, res) {
assert(
isNonOverlappingAll(e),
'The first summand should not be an overlapping expansion.'
);
assert(
isNonOverlappingAll(f),
'The second summand should not be an overlapping expansion.'
);
let resultA = expansionSum(e,f);
assert(
isValid(resultA),
'The result of expansionSum should be a non-overlapping, non-adjacent expansion'
);
let resultB = fastExpansionSum(e,f);
let cmp = eCompare(resultA, resultB);
assert(
cmp === 0,
`expansionSum and fastExpansionSum should return identical results - they don't\n;
fastEpansionSum: ${resultB} - expansionSum: ${resultA}`
)
}
describe('expansion sum', function() {
it('should calculate some expansion sums correctly',
function() {
check(
[-2.7755575615628914e-17, 0.30000000000000004], // 0.3
[-2.7755575615628914e-17, 0.30000000000000004], // + 0.3
[-5.551115123125783e-17, 0.6000000000000001] // = 0.6
);
check(
[1], // 1
[2], // + 2
[3] // = 3
);
check(
[0.1], // 0.1
[0.2], // + 0.2
[-2.7755575615628914e-17, 0.30000000000000004] // = 0.3
);
check(
[0.1e-90, 0.2e-70],
[0.3e-89, 0.4e-68],
[
6.812735744013041e-107,
3.1e-90,
-2.1716258580568247e-85,
4.02e-69
]
);
check(
[0.1e-90, 0.2e-70],
[0.3e-88, 0.4e-68],
[
-3.678877301767042e-106,
3.01e-89,
-2.1716258580568247e-85,
4.02e-69
]
);
check(
[0.1e-100, 0.23e-80, 0.456e-60, 0.78e-40, 0.999e-20],
[0.1e-100, 0.23e-80, 0.456e-60, 0.78e-40, 0.999e-20],
[2e-101, 0, 4.6e-81, 0, 9.12e-61, 0, 1.56e-40, 0, 1.998e-20]
);
check(
[0.1e-100, 0.23e-80, 0.456e-60, 0.78e-40, 0.999e-20],
[0.1e-90, 0.23e-70, 0.456e-50, 0.78e-30, 0.999e-10],
[
-6.034492101807179e-108,
-1.3875858987879488e-97,
-1.1184029171647343e-87,
1.772767559313363e-77,
2.848982182572856e-67,
5.08454808684856e-57,
-3.8509382198042257e-47,
-1.2276606139947577e-37,
-2.428690697334946e-27,
9.990000000999e-11]
);
});
});
*/