pocomath/src/complex/sqrt.mjs

38 lines
943 B
JavaScript

export { Types } from './Types/Complex.mjs'
export const sqrt = {
Complex: ({
config,
complex,
multiply,
sign,
self,
divide,
add,
'abs(Complex)': abs,
subtract
}) => {
if (config.predictable) {
return z => {
const imSign = sign(z.im)
const reSign = sign(z.re)
if (imSign === 0 && reSign === 1) return complex(self(z.re))
return complex(
multiply(sign(z.im), self(divide(add(abs(z),z.re), 2))),
self(divide(subtract(abs(z),z.re), 2))
)
}
}
return z => {
const imSign = sign(z.im)
const reSign = sign(z.re)
if (imSign === 0 && reSign === 1) return self(z.re)
return complex(
multiply(sign(z.im), self(divide(add(abs(z),z.re), 2))),
self(divide(subtract(abs(z),z.re), 2))
)
}
}
}