Function std.math.nextafter
Calculates the next representable value after x in the direction of y.
T nextafter(T)
(
const T x,
const T y
) pure nothrow @nogc @safe;
If y > x, the result will be the next largest floating-point value; if y < x, the result will be the next smallest value. If x == y, the result is y.
Remarks
This function is not generally very useful; it's almost always better to use the faster functions nextUp() or nextDown() instead.
The FE_INEXACT and FE_OVERFLOW exceptions will be raised if x is finite and the function result is infinite. The FE_INEXACT and FE_UNDERFLOW exceptions will be raised if the function value is subnormal, and x is not equal to y.
Example
float a = 1;
assert(is(typeof(nextafter(a, a)) == float));
assert(nextafter(a, a .infinity) > a);
double b = 2;
assert(is(typeof(nextafter(b, b)) == double));
assert(nextafter(b, b .infinity) > b);
real c = 3;
assert(is(typeof(nextafter(c, c)) == real));
assert(nextafter(c, c .infinity) > c);
}
//real nexttoward(real x, real y) { return core.stdc.math.nexttowardl(x, y); }
/**
* Returns the positive difference between x and y.
*
* Equivalent to `fmax(x-y, 0)`.
*
* Returns:
* <table border="1" cellpadding="4" cellspacing="0">
<caption>Special Values</caption>
* <tr><th scope="col">x, y</th> <th scope="col">fdim(x, y)</th></tr>
* <tr><td>x > y</td> <td>x - y</td></tr>
* <tr><td>x <= y</td> <td>+0.0</td></tr>
* </table>
*/
real fdim(real x, real y) @safe pure nothrow @nogc { return (x > y) ? x - y : +0.0;
Authors
Walter Bright, Don Clugston, Conversion of CEPHES math library to D by Iain Buclaw and David Nadlinger