我正在编写代码以防止零分母/除数避免因除法而导致NaN值。
我想知道C ++中最小的分母值可能是什么,以及如何找到?这是什么原因?
答案 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();