В Ruby есть полезные и легко читаемые методы, помогающие выполнять различные математические операции. Давайте посмотрим, что мы можем сделать с Ruby!

Прежде чем мы начнем

Эти методы, обсуждаемые в этой статье, применимы как к целым числам, так и к числам с плавающей запятой (т.е. числам с десятичными знаками).

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

  • Мы ожидаем получить целое число, когда математическое уравнение включает только целые числа. Пример: 4 + 4 #=> 8
  • Мы ожидаем получить число с плавающей запятой, когда любое число в математическом уравнении имеет десятичные дроби. Пример: 4.0 + 4 #=> 8.0

Базовая математика

Отрицание

Оператор отрицания - превращает положительное число в отрицательное и наоборот.

Сложение и вычитание

В Ruby мы складываем два числа с помощью оператора +, который является тем же знаком, который мы используем в повседневной математике.

Чтобы вычесть одно число из другого, мы используем оператор -, как в обычной математике.

Умножение и деление

Чтобы умножить одно число на другое, мы используем оператор *. Чтобы выполнить деление, мы используем оператор /.

При делении на целые числа, как в строке 5, Ruby просто возвращает целое число, даже если он должен возвращать значение с десятичными цифрами.

Остаток

Чтобы получить остаток оператора деления, мы используем оператор % между делимым и делителем.

Этот оператор полезен, например, если мы хотим определить, является ли число N четным или нечетным, проверив, является ли N % 2 == 0.

Сила

Мы используем оператор **, чтобы возвести число в степень, чтобы упростить многократное умножение. За базовым числом следует оператор, а затем мощность.

Приоритет оператора

Математическое уравнение может быть довольно сложным, поскольку оно может включать сложение, деление и другие математические операции. В обычной математике и Ruby эти операции выполняются не просто слева направо: умножение и деление выполняются до сложения и вычитания.

Сможете ли вы вычислить значение из следующего уравнения?

Ruby сначала обрабатывает 3 * 6 и 4 / 2, а затем выполняет вычитание двух производных чисел. Вот почему мы получаем 16, а не 7.

Не забывайте об операторе %. Давайте проверим, имеет ли он более высокий приоритет, чем любой предыдущий оператор.

Из результатов первых четырех математических утверждений мы узнаем, что вычисления производятся просто слева направо. Это указывает на то, что * / и % имеют одинаковый приоритет. Тем не менее, из последних двух уравнений операция % всегда выполняется перед сложением и вычитанием.

Мы также должны добавить в наш тест оператор **. Оказывается, он имеет наивысший приоритет по сравнению с другими операторами.

Теперь суммируем приоритет оператора в Ruby:

  • Высокий: мощность (**)
  • Средний: умножение (*), деление (/) и остаток (%)
  • Низкий: сложение (+) и (-)

Однако мы можем заставить Ruby сначала выполнить некоторые вычисления, заключив высокоприоритетные части в круглые скобки. Ruby сначала вычисляет то, что находится внутри круглых скобок, а затем продолжает остальные.

Некоторые математические методы

Абсолютная величина

Используйте метод .abs с числом, вы получите его абсолютное значение или расстояние до нуля.

бесконечность

В Ruby есть способ представления бесконечности и отрицательной бесконечности:

Делитель должен быть 0.0, но не 0, иначе вы получите ошибку NaN (то есть не число). Кроме того, вы не можете просто набрать Infinity или -Infinity для выполнения каких-либо вычислений в Ruby, что также приводит к ошибке:

Квадратные корни и кубические корни

В Ruby есть встроенные методы для извлечения квадратного и кубического корня из числа.

Вы можете заметить что-то необычное в Math.cbrt(27): возвращаемое значение представляет собой длинное число с плавающей запятой, а не просто 3, как мы ожидали. Это вызвано преобразованием базы счисления:

  • В Ruby (и многих других языках программирования) числа с основанием 10 преобразуются в числа с основанием 2 для вычислений.

Из-за преобразования вкрадывается ошибка, и окончательные значения не всегда на 100% соответствуют исходным числам с основанием 10.

Другой способ получить квадратный и кубический корень числа — использовать оператор **. Помните, что в степени должно быть хотя бы одно число с плавающей запятой, чтобы получить ожидаемый результат. В противном случае, как и в первом уравнении, степень вычисляется до 0, а затем все уравнение вычисляется до 1. (Любое число в степени 0 равно 1).

С помощью оператора ** можно получить даже корень любой степени, например, корень пятой степени из 32: 32 ** (1.0 / 5)

Получить приблизительное число

Нам не всегда нужны числа со многими десятичными разрядами. Иногда для использования достаточно более короткого номера. К счастью, в Ruby мы можем приблизить числа к желаемой степени точности, используя следующие методы.

to_i

Применяя метод to_i к числу с плавающей запятой, мы сохраняем только его целочисленное значение, удаляя все последующие десятичные цифры.

.ceil

Метод .ceil помогает нам получить ближайшее целое число, большее указанного числа с плавающей запятой.

.этаж

С помощью метода .floor мы получаем ближайшее целое число, которое меньше указанного числа с плавающей запятой.

.круглый

Мы получаем целочисленное значение, ближайшее к заданному числу с плавающей запятой, с помощью метода .round.

Что лучше с .round, так это то, что мы можем указать, сколько десятичных цифр нужно зарезервировать, чтобы получить значение с достаточной точностью. Допустим, нам нужны две десятичные цифры. Для этого мы просто добавляем (2) к методу .round.

Давайте посмотрим, что произойдет, если вы измените количество десятичных цифр на резерв.

Ruby предлагает различные способы, позволяющие вам играть с числами или выполнять элементарные математические операции. Одна вещь, которая требует нашего внимания, — это числа с плавающей запятой, так как у вас могут возникнуть неожиданные ошибки.

Ссылки: