Существуют ли бесконечно малые числа с плавающей точкой? - PullRequest
0 голосов
/ 01 февраля 2019

Поскольку существует конечное число чисел с плавающей запятой и можно сравнить каждую возможную пару таких чисел (я полагаю), всегда должно существовать число 'b', которое на

  1. меньше некоторого заданногочисло «а» (не +/- бесконечность) и
  2. не существует числа «с», меньшего, чем «а», и большего, чем «b»;

, т. е. следующего'меньшее число с плавающей запятой.Интересно, если:

  1. есть функция меньшего размера (с плавающей точкой a), возвращающая такое число b (или больше (с плавающей точкой a)) на языке программирования C
  2. , если нет, тогда, если есть способ получить эти «следующие» числа для определенных типов чисел «a», например, если «a» - это целое число / ноль.

Попытка

float smaller(float a) return a - 0.00...001f;

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

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Функции C99 / POSIX nextafter / nexttoward могут сделать это.Вы предоставляете начальное значение x и целевое значение y, и они возвращают следующее значение из начального в направлении назначения.

0 голосов
/ 01 февраля 2019

Действительно, есть.Вы после семейства функций "nextafter".

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

См. https://en.cppreference.com/w/c/numeric/math/nextafter

(Это документация C).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...