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
);

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()
);

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");

Structs§

Hyperoperation
Representation of Hyperoperation

Traits§

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

Functions§

hyperoperation
Calculate result of hyperoperation