Spec-Zone.ru › Crystal

Математика

Числовые типы

Два наиболее распространённых числовых типа — это 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API