#big-integer #computation #numbers #power #divisor #large-numbers

no-std big_num_math

Simple library for computations on large numbers

15 stable releases

3.1.3 Dec 28, 2024
3.1.2 Dec 16, 2024
2.2.3 Nov 30, 2024
2.1.0 Jul 13, 2024
1.0.2 Jun 8, 2024

#113 in Math

Download history 1/week @ 2024-09-17 5/week @ 2024-09-24 1/week @ 2024-10-29 3/week @ 2024-11-05 342/week @ 2024-11-19 612/week @ 2024-11-26 197/week @ 2024-12-03 692/week @ 2024-12-10 123/week @ 2024-12-17 126/week @ 2024-12-24 8/week @ 2024-12-31

961 downloads per month

MIT license

75KB
1.5K SLoC

BIG NUM MATH

Library for computations on large numbers.

  • underdeveloped:
    1. no plan for new functions (goniometric, radix, …)
    2. upcoming optimizations (memory consumption, speed up on some computations, ergonomy, …)
    3. divrem can perform unbearably when divisor is significantly smaller than dividend (as per point 2)
  • functions only:
    • addition +substraction,
    • multiplication +division
    • relation operators
    • order of magnitude
    • power

Usage Samples

power
let row = PlacesRow::new_from_num(u128::MAX);
let pow = pow(&row, 500);
let number = pow.to_number();

assert!(number.starts_with("8312324609993336522"));
assert_eq!(19266, number.len());
division with remainder
let dividend = PlacesRow::new_from_str("3402823669209384634633746074317682114565556668744123").unwrap();
let divisor  = PlacesRow::new_from_str(  "14034568236692093846346337460345176821145655563453").unwrap();
let ratio = "242";        
let remainder = "6458155929897923817932408914149323848308022388497";
        
let ratrem = divrem(&dividend, &divisor).unwrap();
        
assert_eq!(ratio, ratrem.0.to_number());
assert_eq!(remainder, ratrem.1.to_number());
decimal places relation
let number    = Row::new_from_str("1489754132134687989463132131").unwrap();
let comparand = Row::new_from_str(        "48645698946456531371").unwrap();
let decrel = rel_dec(&number, &comparand);

assert_eq!(RelDec::Greater((28, 20, 8)), decrel);
order of magnitude
let number_1 = PlacesRow::new_from_num(3162277660168379331998893544432);
let number_2 = PlacesRow::new_from_num(3162277660168379331998893544433);

assert_eq!(Oom::Precise(30), ord_of_mag(&number_1, OomKind::Strict));
assert_eq!(Oom::Precise(31), ord_of_mag(&number_2, OomKind::Strict));
assert_eq!(Oom::Precise(30), ord_of_mag(&number_2, OomKind::Loose));

No runtime deps

Features