#power #arithmetic #knuth

hyperoperation

Hyperoperation (sometimes known as Knuth's notation) calculation library for Rust

2 releases

0.1.1 Apr 13, 2023
0.1.0 Dec 17, 2022

#1579 in Math

GPL-3.0-or-later

11KB
88 lines

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 (docs)
  • Format hyperoperations with Knuth's up-arrow notation (docs)
  • Use any unsigned numeric type for calculation fitting some conditions, such as BigUint

Examples

Simple calculation:

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

Using BigUint to handle big results without overflowing (don't forget to add num_bigint as your dependency) :

use hyperoperation::*; 
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 structand formatting it with Knuth's up-arrow notation:

use hyperoperation::*;
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");

Dependencies

~230KB