Читаем Julia. Язык программирования. Быстрый старт полностью

Julia изначально предоставляет довольно полный и иерархически организованный набор предопределенных типов, особенно числовых. Это либо скаляры, такие как: целые числа (Int), числа с плавающей запятой (Float) и символы (Char). Либо контейнероподобные структуры, способные хранить другие объекты, такие как: многомерные массивы (Array), словари (Dict), наборы (Set) и т. д. По стилистическим соглашениям названия типов начинаются с заглавной буквы, например Int64 или Bool. Иногда в фигурных скобках за именем типа следуют другие параметры, например типы содержащихся элементов или количество измерений. Эти параметры встречаются у всех контейнероподобных структур и некоторых неконтейнерных. Например тип Array{Int64,2} будет использоваться для двумерного массива целых 64-битных чисел со знаком. В терминологии Julia такие типы называются параметрическими.

Оператор :: можно использовать для присоединения аннотаций типов к выражениям и переменным в программах, например:

julia> (2+2)::Int

4

julia> (2+2)::AbstractFloat

ERROR: TypeError: in typeassert, expected AbstractFloat, got a value of type Int64

julia> (2.0+2.0)::AbstractFloat

4.0

При добавлении к выражению, вычисляющему значение, оператор :: читается как "является экземпляром". Его можно использовать в любом месте, чтобы утверждать, что значение выражения слева является экземпляром типа справа. Если тип справа конкретный, то значение слева должно иметь этот тип в качестве своей реализации. Если тип абстрактный, то достаточно, чтобы значение было реализовано конкретным типом, который является подтипом абстрактного типа. Если утверждение о типе не истинно, выбрасывается исключение, в противном случае возвращается левое значение.

Пример используемый выше, теперь нет нужды использовать комплексную форму записи:

julia> x::Complex{Float64}=-2

–2

julia> typeof(x)

ComplexF64 (alias for Complex{Float64})

julia> sqrt(x)

0.0 + 1.4142135623730951im

Когда оператор :: добавляется к переменной в левой части присваивания, он означает немного другое: он объявляет переменную всегда имеющей указанный тип, как объявление типа в статически типизированном языке, таком как C. Каждое значение, присвоенное переменной, будет преобразовано к объявленному типу с помощью функции convert, если это возможно.

<p>Целые числа</p>

Типы целых чисел в 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

<p>Беззнаковые целые числа</p>

Беззнаковые целые числа вводятся и выводятся с использованием префикса 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

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

<p>Поведение при переполнении</p>

В 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

<p>Числа с плавающей точкой</p>

Типы чисел с плавающей точкой в Julia:

Перейти на страницу:

Похожие книги

1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих
1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих

Книга предоставляет полное описание приемов и методов работы с программой "1С:Управление небольшой фирмой 8.2". Показано, как автоматизировать управленческий учет всех основных операций, а также автоматизировать процессы организационного характера (маркетинг, построение кадровой политики и др.). Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, формировать разнообразные отчеты, выводить данные на печать. Материал подан в виде тематических уроков, в которых рассмотрены все основные аспекты деятельности современного предприятия. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов. Все приведенные в книге примеры и рекомендации основаны на реальных фактах и имеют практическое подтверждение.

Алексей Анатольевич Гладкий

Экономика / Программное обеспечение / Прочая компьютерная литература / Прочая справочная литература / Книги по IT / Словари и Энциклопедии