1 |
|
2 | const memoize = require('../function').memoize
|
3 |
|
4 | /**
|
5 | * Calculate BigNumber e
|
6 | * @param {function} BigNumber BigNumber constructor
|
7 | * @returns {BigNumber} Returns e
|
8 | */
|
9 | exports.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 | */
|
18 | exports.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 | */
|
27 | exports.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 | */
|
36 | exports.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 | */
|
48 | function hasher (args) {
|
49 | return args[0].precision
|
50 | }
|