std :: numeric_limits & lt; T & gt; :: epsilon () для интегралов

У меня нет хороших отзывов о std::numeric_limits<T>, но сайты в сети говорят, что std::numeric_limits<T>::epsilon() вернет разницу между 1 и наименьшее число после него. Насколько я знаю о int тип, следующий после нумерации 1 является 2так эпсилон должен быть 1, Но это 0 (Linux, g ++ 4.4.5). В чем причина этого?

Я знаю это на практике epsilon() полезно только для типов с плавающей точкой, я просто придираюсь.

6

Решение

Стандарт гласит ([numeric.limits.members])

Значимый для всех типов с плавающей точкой.

Стандарт также гласит ([numeric.special])

многие значения должны иметь смысл только при определенных условиях (например, epsilon () имеет смысл только в том случае, если is_integer имеет значение false). Любое значение, которое не является «значимым», должно быть равно 0 или ложно.

Поскольку значение не является «значимым», стандарт 0 требует значения 0 как признака того, что оно не является значимым.

8

Другие решения

Я бы сказал, что он возвращает диапазон, для которого числа считаются равными, с целочисленными типами, которые должны быть равны 0.

Т.е., если вы создаете универсальные функции, которые могут обрабатывать как целочисленные, так и типы с плавающей запятой, вам нужно, чтобы диапазон был 0 для целых чисел.

2

По вопросам рекламы [email protected]