У меня нет хороших отзывов о std::numeric_limits<T>
, но сайты в сети говорят, что std::numeric_limits<T>::epsilon()
вернет разницу между 1
и наименьшее число после него. Насколько я знаю о int
тип, следующий после нумерации 1
является 2
так эпсилон должен быть 1
, Но это 0
(Linux, g ++ 4.4.5). В чем причина этого?
Я знаю это на практике epsilon()
полезно только для типов с плавающей точкой, я просто придираюсь.
Стандарт гласит ([numeric.limits.members])
Значимый для всех типов с плавающей точкой.
Стандарт также гласит ([numeric.special])
многие значения должны иметь смысл только при определенных условиях (например, epsilon () имеет смысл только в том случае, если is_integer имеет значение false). Любое значение, которое не является «значимым», должно быть равно 0 или ложно.
Поскольку значение не является «значимым», стандарт 0 требует значения 0 как признака того, что оно не является значимым.
Я бы сказал, что он возвращает диапазон, для которого числа считаются равными, с целочисленными типами, которые должны быть равны 0.
Т.е., если вы создаете универсальные функции, которые могут обрабатывать как целочисленные, так и типы с плавающей запятой, вам нужно, чтобы диапазон был 0 для целых чисел.