Skip to content

Latest commit

 

History

History
123 lines (102 loc) · 5.85 KB

ch-02-integer-calculations.md

File metadata and controls

123 lines (102 loc) · 5.85 KB

Арифметические вычисления

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

Рассмотрим сложение двух чисел:

fn main() {
    println!("Сумма чисел равна {}", 2 + 2);
    println!("Разность чисел равна {}", 2 - 2);
}

Rust Playground

Во время работы программы происходит сложение двух чисел, число вносится в текстовый шаблон на своё место и полученный текст выводится на консоль.

Умножение и деление целых чисел

Более сложные вычисления - умножение и деление также выполняются без неожиданностей и сложностей:

fn main() {
    println!("Произведение чисел равно {}", 2 * 2);
    println!("Частное чисел равно {}", 2 / 2);
}

Rust Playground

Попробуйте поделить число на 0 - компилятор проверит код и не даст программе скомпилировать его. Это замечательно, но всё же будьте бдительны, так как когда вы узнаете о таком понятии как переменная - вы научитесь обходить эту проверку преднамеренно или случайно.

Другие математические операции над целыми числами

Язык Rust поддерживает все основные математические операции над числами - это сложение, вычитание, умножение и деление. Также ещё есть вычисление остатка от деления %. Порядок вычислений может меняться благодаря использованию круглых скобок. Рассмотрим пример работы этих математических операций в различных комбинациях:

fn main() {
    println!("{}", 2 + 2 - 2 * 2 / 2 % 2);
    println!("{}", (2 + 2) - 2 * 2 / 2 % 2);
    println!("{}", 2 + (2 - 2) - 2 / 2 % 2);
    println!("{}", 2 + 2 - 2 * (2 / 2) % 2);
    println!("{}", 2 + 2 - 2 * 2 / (2 % 2));
}

Rust Playground

Обратите внимание, что в последнем операторе компилятор выявил деление на 0 и не дал скомпилировать код. Изменив или закомментировав данную строку вы исправите допущенную ошибку.

Арифметические операции над дробными числами

Рассмотрим использование математических операций при работе с дробными числами:

fn main() {
    println!("Сумма:");
    println!("{}", 0.1 + 0.1);
    println!("{}", 0.1 + 0.2);
    println!("{}", 0.1 + 0.3);
    println!("{}", 0.1 + 0.4);
    println!("{}", 0.1 + 0.5);
    println!("{}", 0.1 + 0.6);
    println!("{}", 0.1 + 0.7);
    println!("{}", 0.1 + 0.8);
    println!("{}", 0.1 + 0.9);
    println!("Разность:");
    println!("{}", 0.1 - 0.1);
    println!("{}", 0.1 - 0.2);
    println!("{}", 0.1 - 0.3);
    println!("{}", 0.1 - 0.4);
    println!("{}", 0.1 - 0.5);
    println!("{}", 0.1 - 0.6);
    println!("{}", 0.1 - 0.7);
    println!("{}", 0.1 - 0.8);
    println!("{}", 0.1 - 0.9);
    println!("Умножение:");
    println!("{}", 0.1 * 0.1);
    println!("{}", 0.1 * 0.2);
    println!("{}", 0.1 * 0.3);
    println!("{}", 0.1 * 0.4);
    println!("{}", 0.1 * 0.5);
    println!("{}", 0.1 * 0.6);
    println!("{}", 0.1 * 0.7);
    println!("{}", 0.1 * 0.8);
    println!("{}", 0.1 * 0.9);
    println!("Деление:");
    println!("{}", 0.1 / 0.1);
    println!("{}", 0.1 / 0.2);
    println!("{}", 0.1 / 0.3);
    println!("{}", 0.1 / 0.4);
    println!("{}", 0.1 / 0.5);
    println!("{}", 0.1 / 0.6);
    println!("{}", 0.1 / 0.7);
    println!("{}", 0.1 / 0.8);
    println!("{}", 0.1 / 0.9);

    println!("Остаток от деления:");
    println!("{}", 0.1 % 0.1);
    println!("{}", 0.1 % 0.2);
    println!("{}", 0.1 % 0.3);
    println!("{}", 0.1 % 0.4);
    println!("{}", 0.1 % 0.5);
    println!("{}", 0.1 % 0.6);
    println!("{}", 0.1 % 0.7);
    println!("{}", 0.1 % 0.8);
    println!("{}", 0.1 % 0.9);
}

Rust Playground Пожалуйста, посмотрите на результаты вычислений. Обратите внимание, что некоторые числа имеют длинную последовательность чисел после точки. Это мантисса. Она вычисляется согласно внутреннему представлению чисел с плавающей запятой.

Домашнее задание

Попробуйте сложить дробное число с целым 2 + 2.. Что вы получите?

Узнайте об ограничениях при работе макроса println с числами. Попробуйте написать длинное вычисление (2+2+..). Как быстро компилятор справится с этой задачей?