我没有关于std::numeric_limits<T>
的任何好的参考,但网上的网站表示std::numeric_limits<T>::epsilon()
将返回1
与其后的最小数字之间的差异。据我所知int
类型,1
之后的下一个数字是2
,因此epsilon应为1
。但它是0
(Linux,g ++ 4.4.5)。这背后的原因是什么?
我知道在实践中epsilon()
仅对浮点类型有用,我只是在挑剔。
答案 0 :(得分:8)
标准说([numeric.limits.members])
对所有浮点类型都有意义。
标准也说([numeric.special])
在某些条件下,许多值只需要有意义(例如,epsilon()仅在is_integer为false时才有意义)。任何非“有意义”的值都应设置为0或false。
由于该值不是“有意义”,因此标准要求值0表示它不是有意义的值。
答案 1 :(得分:2)
我会说它返回数字被认为相等的范围,整数类型的范围应该是0。
即如果你正在创建可以处理整数和浮点类型的泛型函数,你希望整数的范围为0。