Nonstop Perpetual Motion

# npm

## hyperoperate

2.0.0 • Public • Published

# hyperoperate

This module exports the hyperoperation function. This recursive function generalises the binary operations of addition (n = 1), multiplication (n = 2) and exponentiation (n = 3) to arbitrary non-negative n (tetration, pentation, hexation, ...)

H(0, a, b) = b + 1
H(1, a, 0) = a
H(2, a, 0) = 0
H(n, a, 0) = 1
H(n, a, b) = H(n - 1, a, H(n, a, b - 1))

H accepts only non-negative integers n, a and b.

Note that for the purposes of this module, 0 to the power of 0 is 1.

## Installation

npm install hyperoperate

## Usage

import H from 'hyperoperate'

// n = 0: successor (a is ignored)
H(0, 1000, 3) // 4

H(1, 33, 44) // 77

// n = 2: multiplication
H(2, 6, 7) // 42

// n = 3: exponentiation
H(3, 2, 10) // 1024

// n = 4: tetration
H(4, 3, 3) // 3^^3 = 3^3^3 = 7625597484987

// n = 5: pentation
H(5, 2, 3) // 2^^^3 = 2^^2^^2 = 2^^4 = 2^2^2^2 = 65536

// and so on...

The result is rounded to the nearest JavaScript number. If the result is too large to express as a JavaScript number, Infinity is returned.

hyperoperate will also accept a trio of BigInts. In this case, the return value is also a BigInt:

H(4n, 5n, 3n) // 5^^3 = 5^5^5 = 5^3125 = 1911...03125n

hyperoperate throws an exception if passed a mixture of regular JavaScript numbers and BigInts. If the result is too large to express as a BigInt, a RangeError is thrown.

## Keywords

### Install

npm i hyperoperate

### Repository

github.com/qntm/hyperoperate

### Homepage

github.com/qntm/hyperoperate

1

2.0.0