Простой способ для диапазона (A, B)Как проверить float в диапазоне в C++?
if (A < X && X < B) ...
Но, похоже, + INF, .NAN также лежит в диапазоне
Простой способ для диапазона (A, B)Как проверить float в диапазоне в C++?
if (A < X && X < B) ...
Но, похоже, + INF, .NAN также лежит в диапазоне
Ваше состояние не является интервалом (камертон). Он функционально эквивалентен
X < std::min(A, B)
У вас есть только верхняя граница, без нижней границы.
Точно, как NaN и + Inf себя, зависит от представления с плавающей запятой, которое не определено в стандарте С ++, но процессор специфичны.
Если мы предполагаем, что обычно используется IEEE-754, то ни X = + Inf, ни X = NaN не может удовлетворять условию при любых значениях А и В.
Это, как вы убедитесь, что число с плавающей точкой находится между нижним и верхней границей (но равно ни):
X > low && X < high
или
low < X && X < high
Опять же, если мы предположим, что IEEE-754, то ни X = + Inf, ни X = NaN не могут удовлетворять этому условию для любых значений низкого и высокого. Но, поскольку IEEE-754 может быть не гарантировано, поведение таких чисел не указывается. Возможно, вам необходимо быть явным для поддержки экзотического оборудования:
low < X && X < high && std::isfinite(X)
Некоторые люди также считают, что 'low
@Groo хороший момент о возможно быть опечаткой. Я добавил уточнение, что в IEEE-754 условие не удовлетворено ни Inf +, ни NaN, когда интервал записывается правильно. – user2079303
Что такое 'A, B, X'? все плавает? как вы можете выбрать A и B, чтобы внутри INF? – user463035818
Значит ли _Diapason_ _Interval_? – Aganju
Все числа являются поплавками, диапазон интервалов –