对锈计算时,我有-inf:-inf是什么?

问题描述 投票:1回答:2

以下代码产生结果-inf

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

但是,当我尝试以下代码时,它没有显示true,而是给了我一个错误。

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

要打印出-inf,我应该给哪个值而不是true

math rust
2个回答
3
投票

如sepp2k所述,-inf不是有效的Rust语法。要检查无限值,请尝试f64::is_finite()或与常量std::f64::INFINITYstd::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
}

5
投票

什么是-inf

它是IEEE浮点标准中定义的负无穷大。这是将负浮点数除以零的结果。

但是,当我尝试以下代码时,它没有显示为真,而是给了我一个错误。

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

Rust没有定义名为inf的全局变量或关键字。因此,除非首先定义(或从某处导入)具有该名称的变量,否则您不能使用inf-inf只是将负无穷大转换为字符串时得到的字符串。它本身不是有效的浮点文字。

我应该给什么值而不是-inf来打印出真值?

您可以使用给定浮点类型的常量INFINITYNEG_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为0的y具有与x / y完全相同的类型,其中y为任何其他浮点数。

© www.soinside.com 2019 - 2024. All rights reserved.