33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
export const math = {
|
|
abs: (n: number) => Math.abs(n),
|
|
floor: (n: number) => Math.floor(n),
|
|
ceil: (n: number) => Math.ceil(n),
|
|
round: (n: number) => Math.round(n),
|
|
min: (...nums: number[]) => {
|
|
if (nums.length === 0) throw new Error('min: expected at least one argument')
|
|
return Math.min(...nums)
|
|
},
|
|
max: (...nums: number[]) => {
|
|
if (nums.length === 0) throw new Error('max: expected at least one argument')
|
|
return Math.max(...nums)
|
|
},
|
|
pow: (base: number, exp: number) => Math.pow(base, exp),
|
|
sqrt: (n: number) => {
|
|
if (n < 0) throw new Error(`sqrt: cannot take square root of negative number ${n}`)
|
|
return Math.sqrt(n)
|
|
},
|
|
random: () => Math.random(),
|
|
clamp: (n: number, min: number, max: number) => {
|
|
if (min > max) throw new Error(`clamp: min (${min}) must be less than or equal to max (${max})`)
|
|
return Math.min(Math.max(n, min), max)
|
|
},
|
|
sign: (n: number) => Math.sign(n),
|
|
trunc: (n: number) => Math.trunc(n),
|
|
|
|
// predicates
|
|
'even?': (n: number) => n % 2 === 0,
|
|
'odd?': (n: number) => n % 2 !== 0,
|
|
'positive?': (n: number) => n > 0,
|
|
'negative?': (n: number) => n < 0,
|
|
'zero?': (n: number) => n === 0,
|
|
} |