23 lines
692 B
JavaScript
23 lines
692 B
JavaScript
import {adapted} from './Types/adapted.mjs'
|
|
import Fraction from 'fraction.js/bigfraction.js'
|
|
|
|
export * from './arithmetic.mjs'
|
|
export * from './relational.mjs'
|
|
|
|
export const fraction = adapted('Fraction', Fraction, {
|
|
before: ['Complex'],
|
|
from: {number: n => new Fraction(n)},
|
|
operations: {
|
|
compare: {'Fraction,Fraction': () => (f,g) => new Fraction(f.compare(g))},
|
|
mod: {
|
|
'Fraction,Fraction': () => (n,d) => {
|
|
// patch for "mathematician's modulus"
|
|
// OK to use full public API of Fraction here
|
|
const fmod = n.mod(d)
|
|
if (fmod.s === -1n) return fmod.add(d.abs())
|
|
return fmod
|
|
}
|
|
}
|
|
}
|
|
})
|