feat: convert sqrt for numbers
This commit is contained in:
parent
20078d2c87
commit
0ebaaf35ee
@ -7,7 +7,7 @@
|
|||||||
test: 'echo "Error: no test specified" && exit 1',
|
test: 'echo "Error: no test specified" && exit 1',
|
||||||
build: 'mkdirp build && cpy etc/package.json build --flat && tsc',
|
build: 'mkdirp build && cpy etc/package.json build --flat && tsc',
|
||||||
start: 'node build',
|
start: 'node build',
|
||||||
go: 'pnpm --sequential "/build|start/"',
|
go: 'pnpm --sequential "/clean|build|start/"',
|
||||||
clean: 'del-cli build',
|
clean: 'del-cli build',
|
||||||
},
|
},
|
||||||
packageManager: 'pnpm',
|
packageManager: 'pnpm',
|
||||||
|
15
src/index.ts
15
src/index.ts
@ -8,6 +8,12 @@ import {absquare as absquare_complex} from './Complex/arithmetic.js'
|
|||||||
|
|
||||||
const mockRealAdd = (a: number, b: number) => a+b
|
const mockRealAdd = (a: number, b: number) => a+b
|
||||||
const mockComplexAbsquare = (z: Complex<number>) => z.re*z.re + z.im*z.im
|
const mockComplexAbsquare = (z: Complex<number>) => z.re*z.re + z.im*z.im
|
||||||
|
const mockComplex = (re: number, im: number) => ({ re, im })
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
predictable: false,
|
||||||
|
epsilon: 1e-14
|
||||||
|
}
|
||||||
|
|
||||||
const quatAbsquare = absquare_complex({
|
const quatAbsquare = absquare_complex({
|
||||||
add: mockRealAdd,
|
add: mockRealAdd,
|
||||||
@ -16,9 +22,16 @@ const quatAbsquare = absquare_complex({
|
|||||||
|
|
||||||
const myabs = quatAbsquare({re: {re: 0, im: 1}, im: {re:2, im: 3}})
|
const myabs = quatAbsquare({re: {re: 0, im: 1}, im: {re:2, im: 3}})
|
||||||
const typeTest: typeof myabs = 7 // check myabs is just a number
|
const typeTest: typeof myabs = 7 // check myabs is just a number
|
||||||
|
console.log('Result is myabs=', myabs)
|
||||||
|
|
||||||
console.log('Result is', myabs)
|
const sqrt = Specifications.numbers.sqrt({
|
||||||
|
config,
|
||||||
|
complex: mockComplex
|
||||||
|
})
|
||||||
|
console.log('Result of sqrt(16)=', sqrt(16))
|
||||||
|
console.log('Result of sqrt(-4)=', sqrt(-4))
|
||||||
|
|
||||||
// Check type of the generic square implementation
|
// Check type of the generic square implementation
|
||||||
|
console.log('Type of sqrt (number) is', Specifications.numbers.sqrt.reflectedType)
|
||||||
console.log('Type of square is', Specifications.generic.square.reflectedType)
|
console.log('Type of square is', Specifications.generic.square.reflectedType)
|
||||||
console.log('Type of complex square root is', Specifications.complex.sqrt.reflectedType)
|
console.log('Type of complex square root is', Specifications.complex.sqrt.reflectedType)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import type {configDependency} from '../core/Config.js'
|
import type {configDependency} from '../core/Config.js'
|
||||||
import type {Dependencies, Signature} from '../interfaces/type.js'
|
import type {Dependencies, Signature} from '../interfaces/type.js'
|
||||||
|
import { $implement } from '../interfaces/type.js'
|
||||||
|
|
||||||
export const add: Signature<'add', number> = (a, b) => a + b
|
export const add: Signature<'add', number> = (a, b) => a + b
|
||||||
export const unaryMinus: Signature<'unaryMinus', number> = a => -a
|
export const unaryMinus: Signature<'unaryMinus', number> = a => -a
|
||||||
@ -13,13 +14,14 @@ export const divide: Signature<'divide', number> = (a, b) => a / b
|
|||||||
const basicSqrt = a => isNaN(a) ? NaN : Math.sqrt(a)
|
const basicSqrt = a => isNaN(a) ? NaN : Math.sqrt(a)
|
||||||
export const conservativeSqrt: Signature<'conservativeSqrt', number> = basicSqrt
|
export const conservativeSqrt: Signature<'conservativeSqrt', number> = basicSqrt
|
||||||
|
|
||||||
export const sqrt =
|
$implement!('sqrt',
|
||||||
(dep: configDependency & Dependencies<'complex', number>):
|
(dep: configDependency & Dependencies<'complex', number>): Signature<'sqrt', number> => {
|
||||||
Signature<'sqrt', number> => {
|
if (dep.config.predictable || !dep.complex) {
|
||||||
if (dep.config.predictable || !dep.complex) return basicSqrt
|
return basicSqrt
|
||||||
|
}
|
||||||
return a => {
|
return a => {
|
||||||
if (isNaN(a)) return NaN
|
if (isNaN(a)) return NaN
|
||||||
if (a >= 0) return Math.sqrt(a)
|
if (a >= 0) return Math.sqrt(a)
|
||||||
return dep.complex(0, Math.sqrt(unaryMinus(a)))
|
return dep.complex(0, Math.sqrt(unaryMinus(a)))
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user