Числа и арифметика
Базовые числовые типы Julia и арифметические операции, с упором на отличия от Python.
Числовой тип определяет, как число хранится в памяти и как над ним выполняются операции. В Julia типы чисел явные и влияют на скорость.
Целые и дробные
По умолчанию целочисленный литерал имеет тип Int64 (на 64-битных системах), а число с точкой — Float64. Узнать тип значения можно функцией typeof:
a = 42
b = 3.14
println(typeof(a))
println(typeof(b))Вывод:
Int64 Float64
Арифметические операторы
| Оператор | Действие | Пример |
+ - * / | базовая арифметика | 7 / 2 == 3.5 |
÷ или div | целочисленное деление | 7 ÷ 2 == 3 |
% | остаток | 7 % 2 == 1 |
^ | возведение в степень | 2 ^ 10 == 1024 |
Важное отличие от Python: оператор / в Julia всегда даёт Float64, даже если делится нацело. 4 / 2 вернёт 2.0, а не 2. Для целочисленного деления используйте ÷ (набирается \div + Tab) или функцию div.
Умножение без знака
Julia позволяет писать коэффициент перед переменной без знака умножения — как в математике:
x = 5
y = 2x + 1 # эквивалентно 2*x + 1
println(y)Вывод:
11
Переполнение целых
Это критичное отличие от Python. В Python целые числа неограниченны и растут «бесконечно». В Julia Int64 имеет фиксированный размер, и при переполнении значение «заворачивается» по кругу:
println(typemax(Int64))
println(typemax(Int64) + 1)Вывод:
9223372036854775807 -9223372036854775808
Если нужны действительно большие числа, используйте тип произвольной точности BigInt (об этом — в уроке про специальные числа).
Сравнения
Сравнения возвращают Bool и могут соединяться в цепочку, как в математике: 0 < x < 10 означает «x больше 0 И меньше 10».
x = 5
println(0 < x < 10)
println(3 <= x && x != 7)Вывод:
true true
Как работает под капотом
Тип Int64 хранится в 64 битах и обрабатывается процессором за одну инструкцию — это и даёт скорость. Цена — фиксированный диапазон и возможное переполнение. Float64 следует стандарту IEEE 754, как в большинстве языков, поэтому здесь действуют обычные подводные камни вещественной арифметики (например, 0.1 + 0.2 != 0.3).
Частые ошибки
Самая частая ловушка для пришедших из Python — забыть про переполнение Int64 в циклах с факториалами или степенями. Если результат подозрительно стал отрицательным или маленьким, скорее всего, произошло переполнение — переходите на BigInt.
Итоги
- Целые по умолчанию —
Int64, дробные —Float64. /всегда даёт Float; для целочисленного деления есть÷иdiv.- Можно писать
2xвместо2*x. Int64переполняется (в отличие от Python) — для больших чисел нуженBigInt.- Сравнения соединяются в цепочки:
0 < x < 10.