Skip to content

dandclark/BigInt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

311f721 · Oct 20, 2023

History

36 Commits
May 3, 2014
Oct 20, 2023
Oct 20, 2023
Oct 20, 2023
Oct 20, 2023
Dec 28, 2020
Oct 6, 2023
Oct 6, 2023
Oct 18, 2022
Oct 6, 2023
Oct 13, 2023

Repository files navigation

BigInt

C library for operations with signed integers of arbitrary size.

Introduction

BigInt supports various basic mathematical operations: addition, subtraction, multiplication, and comparison. The primary use case is when very large numbers are needed; BigInts can contain up to the number of digits as the maximum value of an unsigned long (typically 2^32 - 1 on a 32-bit machine).

A BigInt is a struct with the following fields:

  • digits -- An array of digits 0-9. The lowest index is the least significant digit.
  • num_digits -- The number of digits in the digits array.
  • is_negative -- Nonzero if the BigInt is negative, zero if the BigInt is positive.
  • num_allocated_digits -- The amount of space allocated for digits; caller doesn't need to care about this.

Usage

Obtain a pointer to a new BigInt through a call to BigInt_construct:

BigInt* new_big_int = BigInt_construct(42); // Obtains a BigInt initialized to 42

The caller is responsible for freeing a BigInt allocated with BigInt_construct with a call to BigInt_free:

BigInt_free(new_big_int);

The contents of a BigInt can be printed to stdout with a call to BigInt_print.

BigInt_print(big_int);

Get a normal int back from a BigInt with using BigInt_to_int; but be careful; if the BigInt doesn't fit in an int type, the function will return 0 and the value in the int argument will be undefined.

int a;
assert(BigInt_to_int(big_int, &a));

BigInt operations take two BigInt parameters and place the result in the first parameter:

BigInt* a = BigInt_construct(15);
BigInt* b = BigInt_construct(-20);
BigInt_add(a, b);
BigInt_print(a); // Prints -5

The exception is BigInt_compare; this takes two BigInt parameters, changes neither, and returns the value of the comparison:

BigInt a = BigInt_construct(15);
BigInt b = BigInt_construct(-20);
printf("%i\n", BigInt_compare(a, b)); // prints 1
printf("%i\n", BigInt_compare(b, a)); // prints -1
printf("%i\n", BigInt_compare(a, a)); // prints 0

About

C library for operations with integers of arbitrary size

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published