分母/除数的最小可能值是多少?

时间:2018-07-12 00:11:06

标签: c++ c++11

我正在编写代码以防止零分母/除数避免因除法而导致NaN值。

我想知道C ++中最小的分母值可能是什么,以及如何找到?这是什么原因?

2 个答案:

答案 0 :(得分:5)

好吧,可以使用double(从std::numeric_limits<double>::min()头获得)C ++中最小化的正数{sup>(a)归一化<limits>

但是,虽然您可能可以使用它来防止NaN(b),但这可能对溢出没有帮助。例如:

std::numeric_limits<double>::max() / 1.0 => ok
std::numeric_limits<double>::max() / 0.5 => overflow

防止依赖于分母分子。

对于为什么是这种情况,这是因为C ++对double类型使用IEEE-754双精度格式-这是该格式的局限性。


(a)我在这里选择了正值,最小值可以解释为最负值,在这种情况下,它应读为{{1 }}。但是,鉴于您的意图是避免使用-std::numeric_limits<double>::max(),我怀疑我的假设是正确的。

(b)我不确定如何您打算这样做,这就是为什么我也讨论溢出问题-您可能希望在自己的文章中更清楚一点问题。

答案 1 :(得分:-1)

最小的浮点数是1.17549e-38。要扩展“回家的评论”,请查看here的答案:

#include <limits>

//...

std::numeric_limits<float>::max();  // 3.40282e+38
std::numeric_limits<float>::min();  // 1.17549e-38
std::numeric_limits<float>::infinity();

上面的代码中的float可以替换为所需的任何数据类型,即:

std::numeric_limits<int>::min();