什么是最小可能的分母/除数值?

cta*_*kul 6 c++ c++11

我正在编写一个代码来防止零分母/除数因分割而避免NaN值.

我想知道C++中双倍的最小可能值是什么,以及如何找到或者是什么原因?

pax*_*blo 5

好吧,可以用(从头部)获得在C++中归一化的最小正(a).doublestd::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)