如何在C ++中检查diapason中的float?

时间:2016-07-21 10:41:16

标签: c++

辩证的简单方法(A,B)

if (A < X && X < B) ...

但似乎+ INF,.NAN也存在于辩证中<​​/ p>

1 个答案:

答案 0 :(得分:2)

你的病情不是间隔(diapason)。它在功能上等同于

X < std::min(A, B)

你只有一个上限,没有下限。

NaN和+ Inf的行为究竟取决于浮点表示,它不是由C ++标准指定的,而是cpu特定的。

如果我们假设常用的IEEE-754,则X = + Inf,X = NaN都不能满足A和B的任何值的条件。

这是检查浮点数在下限和上限之间(但两者都不等)的方法:

X > low && X < high

low < X && X < high

同样,如果我们假设IEEE-754,那么X = + Inf,X = NaN都不能满足任何低和高值的条件。但是,由于可能无法保证IEEE-754,因此未指定此类数字的行为。您可能需要明确支持异国情调的硬件:

low < X && X < high && std::isfinite(X)