# Ruby integers have arbitrary precision, so extremely large values
# like exabytes fit naturally without overflow.
#
# Exabyte sizes:
#
# 1 EiB = 2**60 = 1,152,921,504,606,846,976 bytes
# 1 EB = 10**18 = 1,000,000,000,000,000,000 bytes
#
# Ruby style:
# - Constants use ALL_CAPS
# - Underscores allowed in numeric literals for readability
# Binary exabyte (exbibyte), using a bit shift.
# 1 << 60 = 2**60 bytes.
EXABYTE_EIB = 1 << 60 # not a constant
# Decimal exabyte (SI), using a readable numeric literal.
EXABYTE_EB = 1_000_000_000_000_000_000
puts "1 EiB = #{EXABYTE_EIB} bytes"
puts "1 EB = #{EXABYTE_EB} bytes"
# run:
#
# 1 EiB = 1152921504606846976 bytes
# 1 EB = 1000000000000000000 bytes
#