Если вы оказались на обратной платформе, которой не хватает nextafter( )
, вы всегда можете использовать объединение (при условии, что компиляторы делают серьезные предположения о псевдонимах):
union { double d; int64_t i; } number;
number.d = initialValue;
doSomethingWithTheDouble(number.d);
number.i++; // increment to next double value away from zero
из-за способа с плавающей точкойчисла точек закодированы, это работает даже при пересечении границ бинада;просто знайте, что это не делает "правильную вещь", когда это пересекает ноль.