2022-07-25 18:56:12 +00:00
|
|
|
export * from './Types/Complex.mjs'
|
2022-07-25 11:20:13 +00:00
|
|
|
|
|
|
|
export const sqrt = {
|
|
|
|
Complex: ({
|
|
|
|
config,
|
2022-08-01 10:09:32 +00:00
|
|
|
isZero,
|
2022-07-25 18:56:12 +00:00
|
|
|
sign,
|
|
|
|
one,
|
|
|
|
add,
|
2022-07-25 11:20:13 +00:00
|
|
|
complex,
|
|
|
|
multiply,
|
|
|
|
self,
|
|
|
|
divide,
|
|
|
|
'abs(Complex)': abs,
|
|
|
|
subtract
|
|
|
|
}) => {
|
|
|
|
if (config.predictable) {
|
|
|
|
return z => {
|
2022-07-25 18:56:12 +00:00
|
|
|
const reOne = one(z.re)
|
2022-08-01 10:09:32 +00:00
|
|
|
if (isZero(z.im) && sign(z.re) === reOne) return complex(self(z.re))
|
2022-07-25 18:56:12 +00:00
|
|
|
const reTwo = add(reOne, reOne)
|
2022-07-25 11:20:13 +00:00
|
|
|
return complex(
|
2022-07-25 18:56:12 +00:00
|
|
|
multiply(sign(z.im), self(divide(add(abs(z),z.re), reTwo))),
|
|
|
|
self(divide(subtract(abs(z),z.re), reTwo))
|
2022-07-25 11:20:13 +00:00
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return z => {
|
2022-07-25 18:56:12 +00:00
|
|
|
const reOne = one(z.re)
|
2022-08-01 10:09:32 +00:00
|
|
|
if (isZero(z.im) && sign(z.re) === reOne) return self(z.re)
|
2022-07-25 18:56:12 +00:00
|
|
|
const reTwo = add(reOne, reOne)
|
2022-07-25 11:20:13 +00:00
|
|
|
return complex(
|
2022-07-25 18:56:12 +00:00
|
|
|
multiply(sign(z.im), self(divide(add(abs(z),z.re), reTwo))),
|
|
|
|
self(divide(subtract(abs(z),z.re), reTwo))
|
2022-07-25 11:20:13 +00:00
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|