在 C++ 中决定普通浮点数的代码? [复制]

Posted

技术标签:

【中文标题】在 C++ 中决定普通浮点数的代码? [复制]【英文标题】:Code for deciding ordinary floating point numbers in C++? [duplicate] 【发布时间】:2015-03-10 22:59:03 【问题描述】:

我想知道在 C++ 中检测浮点数是否普通的正确且可能是优雅的方法。 “普通浮点数”是指除了 NAN 或 INF 之外的 double/float/long double 类型。

【问题讨论】:

@Drew 这是有道理的。我很抱歉。 除了好的答案之外,有限浮点数正是使条件 x - x == 0 为真的那些,因为当您有充分的理由避免包含标题时。专家会将其视为成语,但非专家会感到恼火,因此请谨慎使用。 【参考方案1】:

std::isfinite() 将为 INF 或 NaN 的值返回 true

(已编辑以反映问题编辑)

【讨论】:

【参考方案2】:

您可以查看Boost.Math。它定义了所有这些:

template <class T>
bool isfinite(T z); // Neither infinity nor NaN.

template <class T>
bool isinf(T t); // Infinity (+ or -).

template <class T>
bool isnan(T t); // NaN.

template <class T>
bool isnormal(T t); // isfinite and not denormalised.

从 C++11 开始,这些也在 &lt;cmath&gt; 中:std::isnanstd::isinfstd::isfinitestd::isnormal

【讨论】:

谢谢。 isfinite 是我一直在寻找的东西

以上是关于在 C++ 中决定普通浮点数的代码? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

c++中如何输出保留三位小数的浮点数

在汇编中将无符号字符转换为浮点数(为浮点向量计算做准备)

C++浮点数误差是啥

为啥C++里面浮点与整数相乘的结果跟在计算器里的不一样呢?浮点我选的float

C++ 浮点数精度判定

c++浮点数的格式化输出