Skip to content

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

Notifications You must be signed in to change notification settings

FireFragment/hyperoperation-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages