Function std.math.nextafter
Calculates the next representable value after x
in the direction of y
.
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
.
Prototype
T nextafter(T)( T x, T y ) pure nothrow @nogc @safe;
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. * Returns: * ** x, y fdim(x, y) * x > y x - y * */ real fdim(real x, real y) @safe pure nothrow @nogc { return (x > y) ? x - y : +0.0; x <= y +0.0
Authors
Walter Bright, Don Clugston, Conversion of CEPHES math library to D by Iain Buclaw