以下代码产生结果-inf
。
fn main() {
println!("{}", (-10. / 0.));
}
但是,当我尝试以下代码时,它没有显示true
,而是给了我一个错误。
fn main() {
println!("{}", (-10. / 0.) == -inf);
}
要打印出-inf
,我应该给哪个值而不是true
?
答案 0 :(得分:5)
-inf
是什么?
它是IEEE浮点标准中定义的负无穷大。这是将负浮点数除以零的结果。
但是,当我尝试以下代码时,它并没有显示为真,而是给了我一个错误。
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
为0的y
具有与x / y
为y
是任何其他浮点数的{{1}}完全相同的类型。
答案 1 :(得分:3)
如sepp2k所述,v5+
不是有效的Rust语法。要检查无穷大的值,请尝试-inf
或与常量f64::is_finite()
和std::f64::INFINITY
比较。
std::f64::NEG_INFINITY