ref: 86a1bffad7063d1f51dfe44c2126bbdf8b7fe5c8
dir: /nonsense/math.js/
let count = 16 export let one = toNumber("1") let pi180 = toNumber("57.29577951308232087679815481410517033240547246656432154916024386120284714832155263244096899585111094418622338163286489328144826460124831503606826786341194212252638809746726792630798870289311076793826144263826315820961046048702050644425965684112017191205773856628043128496262420337618793729762387079034031598071962408952204518620545992339631484190696622011512660969180151478763736692316410712677403851469016549959419251571198647943521066162438903520230675617779675711331568350620573131336015650134889801878870991777643918115931692001390297976826082932305533970261816604909295932820831549957980319559670071182520584664392317998584567191684399177541316529599530564062790449672487225343407247383306518587900882010719354855206048500684264734907560587438856753293217824660212423313273427212944530891667616714672023231374957844879817729067269084978013518866274395505591858069303343806736897172694639833885465199132675677482576493416923381113824332305320822419851645413959794725671400940417846961515605358215792046021354520190107416210293512926160978984400353223820447327628272090920918017114510890564653020820097912305909402354224041873558370874375538") export function toNumber(n) { let string = toString(n) if (string === "") return 0n let match = string.match(/^(-|\+?)([0-9]*)\.?([0-9]*)(?:e(-|\+?)([0-9]+))?$/) if (!match) return "NaN" let [_full, x, a, b, y = "", e = ""] = match if (a === "" && b === "") return "NaN" let c = count + e * (y + "1") if (c < 0) return 0n return (BigInt(a + b.padEnd(c, "0").slice(0, c)) + BigInt(b[c] >= "5")) * BigInt(x + "1") } export function toString(n) { if (typeof n !== "bigint") return String(n) if (n < 0n) return "-" + toString(-n) let x = String(n).padStart(count + 1, "0") return (x.slice(0, -count) + "." + x.slice(-count).replace(/0+$/, "")).replace(/\.$/, "") } export function toFloat(n) { return Number(toString(n)) } function sign(n) { if (n > 0n) return 1n if (n < 0n) return -1n return 0n } export function abs(n) { return n * sign(n) } export function divide(n, q) { return (n * one + q / 2n * sign(n)) / q } export function multiply(a, b) { return divide(a * b, one ** 2n) } export function cos(n) { n = abs(n) % (360n * one) if (n > 180n * one) n -= 360n * one let value = 1n let one1 = 1n let n2 = divide(n, pi180) ** 2n for (let i = 32n ; i > 0n ; i -= 2n) { one1 *= one ** 3n value = one1 - divide(n2 * value, i * (i - 1n)) } return divide(value, one1) } export function sin(n) { return cos(n - 90n * one) }