积分的std :: numeric_limits <t> :: epsilon()</t>

时间:2012-09-05 09:11:04

标签: c++ stl

我没有关于std::numeric_limits<T>的任何好的参考,但网上的网站表示std::numeric_limits<T>::epsilon()将返回1与其后的最小数字之间的差异。据我所知int类型,1之后的下一个数字是2,因此epsilon应为1。但它是0(Linux,g ++ 4.4.5)。这背后的原因是什么?

我知道在实践中epsilon()仅对浮点类型有用,我只是在挑剔。

2 个答案:

答案 0 :(得分:8)

标准说([numeric.limits.members])

  

对所有浮点类型都有意义。

标准也说([numeric.special])

  

在某些条件下,许多值只需要有意义(例如,epsilon()仅在is_integer为false时才有意义)。任何非“有意义”的值都应设置为0或false。

由于该值不是“有意义”,因此标准要求值0表示它不是有意义的值。

答案 1 :(得分:2)

我会说它返回数字被认为相等的范围,整数类型的范围应该是0。

即如果你正在创建可以处理整数和浮点类型的泛型函数,你希望整数的范围为0。