UNPKG

1.32 kBJavaScriptView Raw
1'use strict'
2const memoize = require('../function').memoize
3
4/**
5 * Calculate BigNumber e
6 * @param {function} BigNumber BigNumber constructor
7 * @returns {BigNumber} Returns e
8 */
9exports.e = memoize(function (BigNumber) {
10 return new BigNumber(1).exp()
11}, hasher)
12
13/**
14 * Calculate BigNumber golden ratio, phi = (1+sqrt(5))/2
15 * @param {function} BigNumber BigNumber constructor
16 * @returns {BigNumber} Returns phi
17 */
18exports.phi = memoize(function (BigNumber) {
19 return new BigNumber(1).plus(new BigNumber(5).sqrt()).div(2)
20}, hasher)
21
22/**
23 * Calculate BigNumber pi.
24 * @param {function} BigNumber BigNumber constructor
25 * @returns {BigNumber} Returns pi
26 */
27exports.pi = memoize(function (BigNumber) {
28 return BigNumber.acos(-1)
29}, hasher)
30
31/**
32 * Calculate BigNumber tau, tau = 2 * pi
33 * @param {function} BigNumber BigNumber constructor
34 * @returns {BigNumber} Returns tau
35 */
36exports.tau = memoize(function (BigNumber) {
37 return exports.pi(BigNumber).times(2)
38}, hasher)
39
40/**
41 * Create a hash for a BigNumber constructor function. The created has is
42 * the configured precision
43 * @param {Array} args Supposed to contain a single entry with
44 * a BigNumber constructor
45 * @return {number} precision
46 * @private
47 */
48function hasher (args) {
49 return args[0].precision
50}