Математика
Числовые типы
Два наиболее распространённых числовых типа — это Int32 и Float64. Число в названии указывает размер в битах: Int32 — это 32-битный целочисленный тип, а Float64 — 64-битное число с плавающей точкой.
- Целочисленный литерал записывается как последовательность из одной или нескольких цифр в десятичной системе счисления (
0-9) без ведущих нулей. Тип по умолчанию —Int32. - Литерал с плавающей точкой записывается как последовательность из двух или более цифр в десятичной системе счисления (
0-9) с точкой (.) где-либо посередине, обозначающей десятичный разделитель. Тип по умолчанию —Float64.
Во всех числовых типах подчёркивания можно ставить в любом месте внутри числа. Это удобно для более наглядной записи больших чисел: 100000 можно записать как 100_000.
p! 1, typeof(1)
p! 1.0, typeof(1.0)
p! 100_000, typeof(100_000)
p! 100_000.0, typeof(100_000.0)
Значения с плавающей точкой выводятся с десятичной точкой. Целочисленные значения — без неё.
Информация
Существует ещё немало числовых типов, но большинство из них предназначены для особых случаев, таких как двоичные протоколы, специализированные числовые алгоритмы и оптимизация производительности. Скорее всего, они не понадобятся вам в обычных программах.
Полный справочник по всем примитивным числовым типам и альтернативным представлениям см. в разделах Справочник по целочисленным литералам и Справочник по литералам с плавающей точкой.
Арифметика
Равенство и сравнение
Числа с одинаковым числовым значением считаются равными при использовании оператора равенства == независимо от их типа.
p! 1 == 1,
1 == 2,
1.0 == 1,
-2000.0 == -2000
Помимо оператора равенства существуют также операторы сравнения. Они определяют отношение между двумя значениями. Как и для равенства, возможность сравнения не зависит от типа.
p! 2 > 1,
1 >= 1,
1 < 2,
1 <= 2
Универсальный оператор сравнения — <=>, также называемый оператором космического корабля из-за своего внешнего вида. Он сравнивает операнды и возвращает ноль (если операнды равны), положительное значение (если первый операнд больше) или отрицательное значение (если второй операнд больше). Он объединяет поведение всех остальных операторов сравнения.
p! 1 <=> 1,
2 <=> 1,
1 <=> 2
Операторы
Базовые арифметические операции можно выполнять с помощью операторов. Большинство операторов являются бинарными (то есть имеют два операнда) и записываются в инфиксной нотации (то есть между операндами). Некоторые операторы являются унарными (то есть имеют один операнд) и записываются в префиксной нотации (то есть перед операндом). Значение выражения — это результат операции.
p! 1 + 1, # addition
1 - 1, # subtraction
2 * 3, # multiplication
2 ** 4, # exponentiation
2 / 3, # division
2 // 3, # floor division
3 % 2, # modulus
-1 # negation (unary)
Как видите, результат большинства этих операций с целочисленными операндами также является целочисленным значением. Оператор деления (/) — исключение: он всегда возвращает значение с плавающей точкой. Оператор целочисленного деления (//), однако, возвращает целочисленное значение, но очевидно, что оно округляется до целочисленной точности. Операция с целочисленным операндом и операндом с плавающей точкой всегда возвращает значение с плавающей точкой. В остальных случаях тип возвращаемого значения обычно совпадает с типом первого операнда.
Информация
Полный список операторов доступен в справочнике по операторам.
Приоритет
Когда используется несколько операторов, возникает вопрос, в каком порядке они выполняются. В математике существуют различные правила, например умножение и деление имеют приоритет над сложением и вычитанием. Операторы Crystal следуют этим правилам приоритета.
Для структурирования операций используются скобки. Выражение с оператором в скобках всегда имеет приоритет над операторами вне скобок.
p! 4 + 5 * 2,
(4 + 5) * 2
Информация
Все правила приоритета подробно описаны в справочнике по операторам.
Методы чисел
Некоторые менее распространённые математические операции представлены не операторами, а именованными методами.
p! -5.abs, # absolute value
4.3.round, # round to nearest integer
5.even?, # odd/even check
10.gcd(16) # greatest common divisor
Информация
Полный список числовых методов доступен в документации API Number (см. также подтипы).
Методы Math
Некоторые арифметические методы определены не непосредственно в числовых типах, а в пространстве имён Math.
p! Math.cos(1), # cosine
Math.sin(1), # sine
Math.tan(1), # tangent
Math.log(42), # natural logarithm
Math.log10(312), # logarithm to base 10
Math.log(312, 5), # logarithm to base 5
Math.sqrt(9) # square root
Информация
Полный список математических методов доступен в документации API Math.
Константы
Некоторые математические константы доступны как константы модуля Math.
p! Math::E, # Euler's number
Math::TAU, # Full circle constant (2 * PI)
Math::PI # Archimedes' constant (TAU / 2)
To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/reference/1.2/tutorials/basics/30_math.html