好吧,可以用(从头部)获得在C++中归一化的最小正(a).double
std::numeric_limits<double>::min()
<limits>
但是,虽然您可以使用它来防止NaN
值(b),但它可能无助于溢出.例如:
std::numeric_limits<double>::max() / 1.0 => ok
std::numeric_limits<double>::max() / 0.5 => overflow
Run Code Online (Sandbox Code Playgroud)
预防这将取决于分母和分子.
至于为什么会这样,这是因为C++对其double
类型使用IEEE-754双精度格式- 这是该格式的限制.
(a)我在这里选择了正值,最小值可以被解释为最负值,在这种情况下它将被解读为-std::numeric_limits<double>::max()
.但是,鉴于你的意图是避免NaN
,我怀疑我的假设是正确的.
(二)我不是很确定如何你打算这样做,这就是为什么我还讨论了溢出-你可能要更清楚你的问题.
fra*_*ank -1
可能的最小浮点数为 1.17549e-38。要扩展“它回家了”的评论,请参阅此处的答案:
#include <limits>
//...
std::numeric_limits<float>::max(); // 3.40282e+38
std::numeric_limits<float>::min(); // 1.17549e-38
std::numeric_limits<float>::infinity();
Run Code Online (Sandbox Code Playgroud)
上面代码中的float
可以替换为您想要的任何数据类型,即:
std::numeric_limits<int>::min();
Run Code Online (Sandbox Code Playgroud)