如果你发现自己处于一个缺乏的倒退平台上nextafter( ),你总是可以使用一个联合(关于编译器做出强烈别名假设的一些警告):
union { double d; int64_t i; } number;
number.d = initialValue;
doSomethingWithTheDouble(number.d);
number.i++; // increment to next double value away from zero
Run Code Online (Sandbox Code Playgroud)
由于浮点数的编码方式,即使在跨越binade边界时也能正常工作; 请注意,当它过零时,它不会做"正确的事".