У меня есть `-inf` при расчете на ржавчину: что такое` -inf`? - PullRequest
1 голос
/ 03 октября 2019

Следующий код дает результат -inf.

fn main() {
    println!("{}", (-10. / 0.));
}

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

fn main() {
    println!("{}", (-10. / 0.) == -inf);
}

Какое значение я должен дать вместо -inf, чтобы распечатать true?

Ответы [ 2 ]

5 голосов
/ 03 октября 2019

что такое -inf?

Это отрицательная бесконечность, как определено в стандарте IEEE с плавающей запятой. Это результат деления отрицательных чисел с плавающей запятой на ноль.

Однако, когда я попробовал следующий код, он не вывел true, вместо этого он выдал ошибку.

fn main() {
    println!("{}", (-10. / 0.) == -inf);
}

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

Какое значение я должен дать вместо -inf, чтобы получить истинную распечатку?

Вы можете использовать константы INFINITY или NEG_INFINITY из заданного типа с плавающей точкой, например -10. / 0. == std::f64::NEG_INFINITY или -10. / 0. == -std::f64::INFINITY. Или вы можете определить let inf = 1. / 0.;, тогда (-10. / 0.) == -inf будет правдой. Или вы можете просто написать -10. / 0. == -1. / 0. или любое другое выражение, которое приводит к отрицательной бесконечности.

Какой тип -inf?

Тип -infсовпадает с числом чисел с плавающей запятой, которые вы разделили, чтобы получить -inf. Если вы разделите два f32 с, вы получите f32, а если вы поделите два f64 с, вы получите f64. Если тип операндов еще не определен, тип результата будет {float}, пока не будет определен более конкретный тип.

Обратите внимание, что это ничем не отличается от любого другого случая. деления двух чисел с плавающей запятой (или сложения, умножения и т. д.). Другими словами, x / y, где y равно 0. имеет тот же тип, что и x / y, где y - любое другое число с плавающей запятой.

3 голосов
/ 03 октября 2019

Как указано sepp2k, -inf не является допустимым синтаксисом Rust. Чтобы проверить наличие бесконечных значений, попробуйте f64::is_finite() или сравнение с константами std::f64::INFINITY и std::f64::NEG_INFINITY.

fn main() {
    let result: f64 = -10. / 0.;
    println!("{}", result.is_infinite()); // true
    println!("{}", result == std::f64::INFINITY); // false
    println!("{}", result == std::f64::NEG_INFINITY); // true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...