Целые числа

Типы целых чисел в Julia:





Целые числа вводятся и выводятся стандартным образом:


julia> 10

10


julia> 0123456789

123456789


Тип по умолчанию для целых чисел зависит от разрядности системы (64-бита):


julia> typeof(10)

Int64


julia> typeof(0123456789)

Int64


Julia также определяет типы Int и UInt, которые являются псевдонимами для системных знаковых и беззнаковых типов целых чисел соответственно:


julia> Int

Int64


julia> UInt

UInt64


Большие целые числа, которые не могут быть представлены с использованием 64 бит, но могут быть представлены в 128 битах, всегда создают 128-битные целые числа, независимо от типа системы:


julia> typeof(10000000000000000000)

Int128

Беззнаковые целые числа

Беззнаковые целые числа вводятся и выводятся с использованием префикса 0x и цифр от 0 до 9, а также латинских букв от a до f, используемых для обозначения шестнадцатеричных чисел, использование заглавных букв A-F также допустимо. Размер беззнакового значения определяется количеством используемых шестнадцатеричных цифр:


julia> x = 0x1

0x01


julia> typeof(x)

UInt8


julia> x = 0x123

0x0123


julia> typeof(x)

UInt16


julia> x = 0x1234567

0x01234567


julia> typeof(x)

UInt32


julia> x = 0x123456789abcdef

0x0123456789abcdef


julia> typeof(x)

UInt64


julia> x = 0x11112222333344445555666677778888

0x11112222333344445555666677778888


julia> typeof(x)

UInt128


Значения, слишком большие для типов Int128, UInt128, при вводе получат специальный тип BigInt:


julia> typeof(100000000000000000000000000000000000000)

Int128


julia> typeof(1000000000000000000000000000000000000000)

BigInt


julia> typeof(0xffffffffffffffffffffffffffffffff)

UInt128


julia> typeof(0xfffffffffffffffffffffffffffffffff)

BigInt


Это не беззнаковый тип, но это единственный встроенный тип, достаточно большой для представления таких больших целых значений.

Поведение при переполнении

В Julia превышение максимального представляемого значения данного типа приводит к циклическому поведению. Пример (функции typemax(), typemin(), возвращают максимальное и минимальное значения для заданного типа, == оператор равенства):


julia> x = typemax(Int64)

9223372036854775807


julia> x+1

–9223372036854775808


julia> x + 1 == typemin(Int64)

true


julia> x = typemax(UInt64)

0xffffffffffffffff


julia> x+1

0x0000000000000000


julia> x + 1 == typemin(UInt64)

true


В тех случаях, когда переполнение возможно, рекомендуется производить проверку на цикличное поведение. В противном случае используйте тип BigInt арифметики произвольной точности. Ниже приведен пример поведения при переполнении и как его можно решить с помощью BigInt():


julia> 10^19

–8446744073709551616


julia> BigInt(10)^19

10000000000000000000

Загрузка...