BigNumber is an arbitrary precision integer value type. It stores a number in base 2^64 notation as an array.
Each element of the array is called a limb, which is of type UInt64, the whole array is called limbs and has the type [UInt64]. A boolean sign variable determines if the number is positive or negative. If sign == true, then the number is smaller than 0, otherwise it is greater or equal to 0. It stores the 64 bit digits in little endian, that is, the least significant digit is stored in the array index 0:
limbs ==  := undefined, should throw an error limbs == , sign == false := 0, defined as positive limbs == , sign == true := undefined, should throw an error limbs == [n] := n if sign == false, otherwise -n, given 0 <= n < 2^64 limbs == [l0, l1, l2, ..., ln] := (l0 * 2^(0*64)) + (11 * 2^(1*64)) + (12 * 2^(2*64)) + ... + (ln * 2^(n*64))
public struct BigInt: SignedNumeric, // Implies Numeric, Equatable, ExpressibleByIntegerLiteral BinaryInteger, // Implies Hashable, CustomStringConvertible, Strideable, Comparable ExpressibleByFloatLiteral