This allows types to be collected; prior to this commit they were conflicting from different modules. Uses this fix to extend sqrt to bigint, with the convention that it is undefined for non-perfect squares when 'predictable' is false and is the "best" approximation to the square root when 'predictable' is true. Furthermore, for negative bigints, you might get a Gaussian integer when predictable is false; or you will just get your argument back when 'predictable' is true because what other bigint could you give back for a negative bigint? Also had to modify tests on the sign in sqrt(Complex) and add functions 'zero' and 'one' to get types to match, as expected in #27. Adds numerous tests. Resolves #26. Resolves #27.
14 lines
381 B
JavaScript
14 lines
381 B
JavaScript
export * from './Types/number.mjs'
|
|
|
|
export const sqrt = {
|
|
number: ({config, complex, 'self(Complex)': complexSqrt}) => {
|
|
if (config.predictable || !complexSqrt) {
|
|
return n => isNaN(n) ? NaN : Math.sqrt(n)
|
|
}
|
|
return n => {
|
|
if (isNaN(n)) return NaN
|
|
if (n >= 0) return Math.sqrt(n)
|
|
return complexSqrt(complex(n))
|
|
}
|
|
}
|
|
}
|