/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ /* nexttoward.c Contributed by Danny Smith No copyright claimed, absolutely no warranties. 2005-05-10 */ #include double nexttoward (double x, long double y) { union { double d; unsigned long long ll; } u; long double xx = x; if (isnan (y) || isnan (x)) return x + y; if (xx == y) /* nextafter (0.0, -O.0) should return -0.0. */ return y; u.d = x; if (x == 0.0) { u.ll = 1; return y > 0.0L ? u.d : -u.d; } /* Non-extended encodings are lexicographically ordered, with implicit "normal" bit. */ if (((x > 0.0) ^ (y > xx)) == 0) u.ll++; else u.ll--; return u.d; }