Проверьте ваш файл math.h. Если вам повезет, у вас определены функции nextafter
и nextafterf
. Они делают именно то, что вам нужно, независимо от платформы и платформы, и являются частью стандарта C99.
Другой способ сделать это (может быть запасным решением) - разложить ваш поплавок на мантиссу и экспонентную часть. Увеличивать легко: просто добавьте один к мантиссе. Если вы получаете переполнение, вы должны справиться с этим, увеличивая показатель степени. Декрементирование работает так же.
РЕДАКТИРОВАТЬ : Как указано в комментариях, достаточно просто увеличить число с плавающей запятой в его двоичном представлении. Переполнение мантиссы будет увеличивать показатель степени, и это именно то, что мы хотим.
Это в двух словах то же самое, что делает nextafter.
Это не будет полностью переносимым, хотя. Вам придется иметь дело с порядком байтов и тем фактом, что не все машины имеют IEEE-числа (хорошо - последняя причина более академическая).
Также обработка NAN и бесконечности может быть немного сложнее. Вы не можете просто увеличивать их, поскольку они по определению не числа.