Julia provides excellent support for working with arbitrarily large
integers, often called “big integers” or “bignums.” This is incredibly
useful when dealing with numbers that exceed the capacity of standard
integer types (like Int64
). This tutorial covers the basics
of using big integers in Julia.
1. Creating Big Integers:
Julia’s BigInt
type represents big integers. You can
create BigInt
values in several ways:
big()
function: This is the
most common way to create a big integer from a regular integer or a
string.x = big(12345678901234567890) # Creates a BigInt from an integer literal
y = big("98765432109876543210") # Creates a BigInt from a string
z = big(Int64(9223372036854775807)) #Creates a BigInt from a Int64 (Max Int64 value)
println(x)
println(y)
println(z)
BigInt
.a = 2^63 # This will be an Int64
b = 2^64 # This will automatically be a BigInt because it's too large for Int64
println(typeof(a)) # Output: Int64
println(typeof(b)) # Output: BigInt
2. Arithmetic Operations:
You can perform all the standard arithmetic operations (+, -, *, /,
^, %, div, mod) on BigInt
values, just like with regular
integers. Julia overloads these operators to work seamlessly with big
integers.
x = big(12345)
y = big(67890)
sum = x + y
difference = x - y
product = x * y
quotient = x ÷ y # Integer division (div)
remainder = x % y # Modulo operation
power = x^y
println("Sum: ", sum)
println("Difference: ", difference)
println("Product: ", product)
println("Quotient: ", quotient)
println("Remainder: ", remainder)
println("Power: ", power)
3. Comparisons:
You can compare BigInt
values using the standard
comparison operators (==, !=, <, >, <=, >=).
x = big(100)
y = big(200)
println(x == y) # Output: false
println(x < y) # Output: true
println(x >= y) # Output: false
4. Functions and Big Integers:
Many built-in Julia functions work correctly with BigInt
arguments. For example:
x = big(12345678901234567890)
println(sqrt(x)) # Calculate the square root (returns a Float64 by default)
println(factorial(big(100))) # Calculate 100 factorial (a very large number)
Important Note: While BigInt
s offer
arbitrary precision, they are generally slower than standard integer
types. Use them when you truly need to work with numbers exceeding the
limits of Int64
. For most everyday calculations,
Int64
is sufficient and more efficient.
5. Converting to other types:
You can convert a BigInt
to other number types, but be
careful about potential loss of information if the BigInt
is too large.
x = big(123)
y = Int64(x) # Convert to Int64
z = big(2^100)
#w = Int64(z) # This will throw an InexactError because z is too large
f = Float64(z) # Convert to Float64 (might lose some precision)
println(f)
Example: Calculating a large Fibonacci number:
function fibonacci(n::Integer)
if n <= 1
return big(n) # Important: Return BigInt for large n
else
return fibonacci(n-1) + fibonacci(n-2)
end
end
println(fibonacci(100)) # Calculate the 100th Fibonacci number (a large BigInt)
This example demonstrates the power of BigInt
for
calculations involving very large numbers, where standard integer types
would overflow. Remember to use big()
when returning values
from recursive functions like this to ensure that you’re working with
BigInt
s throughout the calculation.