import { Config } from '../core/Config.js' import type { Complex } from '../Complex/type.js' export const add = (a: number, b: number): number => a + b export const addReal = add export const unaryMinus = (a: number): number => -a export const conj = (a: number): number => a export const subtract = (a: number, b: number): number => a - b export const multiply = (a: number, b: number): number => a * b export const absquare = (a: number): number => a * a export const reciprocal = (a: number): number => 1 / a export const divide = (a: number, b: number): number => a / b export const divideByReal = divide export const conservativeSqrt = (a: number): number => isNaN(a) ? NaN : Math.sqrt(a) export const sqrt = (dep: { config: Config, complex: (re: number, im: number) => Complex }): (a: number) => number | Complex => { if (dep.config.predictable || !dep.complex) return conservativeSqrt return a => { if (isNaN(a)) return NaN if (a >= 0) return Math.sqrt(a) return dep.complex(0, Math.sqrt(unaryMinus(a))) } }