Crate hyperoperation

source ·
Expand description

Hyperoperation

This crate allows to calculate and format hyperoperation, sometimes known as Knuth’s up-arrow notation, which is a way to define very large numbers, such as famous 3↑↑↑3.

Features

  • Calculate value of hyperoperations (more and more)
  • Format hyperoperations with Knuth’s up-arrow notation (more)
  • Use any unsigned numeric type for calculation fitting some conditions, such as BigUint

Examples

Simple calculation:

assert_eq!(
    hyperoperation::<u64>(&3, 3, 2), // 3 ↑↑ 3
    7625597484987
);
Run

Using BigUint to handle big results without overflowing:

use num_bigint::BigUint;

let result = hyperoperation::<BigUint>(&5u8.into(), 3u8.into(), 2); // 5 ↑↑ 3
println!("Result:\n{result}");
assert_eq!(
    result % BigUint::from(100_000_000u32),
    8203125u32.into()
);
Run

Using Hyperoperation struct and formatting it with Knuth’s up-arrow notation:

let expr = Hyperoperation::<u64>::new(3, 3, 2); // Represents 3 ↑↑ 3
let result = expr.clone().evaluate(); // Calculate the value of 3 ↑↑ 3

println!("{expr} = {result}");
assert_eq!(result, 7625597484987);
assert_eq!(format!("{expr}"), "3 ↑↑ 3");
Run

Structs

Representation of Hyperoperation

Traits

Number that can be used either as the first or second number in hyperoperation. Automatically implemented for all fitting numbers.

Functions

Calculate result of hyperoperation