[ Arithmetic | Reference Manual | Alphabetic Index ]

nexttoward(+X, +Y, -Result)

Next representable number
X
A number
Y
A number
Result
Output: number

Description

This predicate is used by the ECLiPSe compiler to expand evaluable arithmetic expressions. So the call to nexttoward(Y, X, Result) is equivalent to
Result is nexttoward(X, Y)
which should be preferred for portability.

Result is the next representable number following X in the direction of Y. If Y is greater than X, the result is the smallest representable number greater than X. If Y is smaller than X, the result is the greatest representable number smaller than X. Otherwise the result is identical to X or Y.

If X and Y are floats, the next representable value depends on the floating point representation.

If X and Y are integers, the next representable value is the next integer.

If X and Y are breals, the result is the smallest interval enclosing all possible results of doing the operation on elements of the input intervals.

If X and Y are rationals, the operation is undefined.

If X and Y are of different types, the types are first made equal (via conversions integer -> rational -> float -> breal), then the result is computed as above.

In coroutining mode, if X or Y is uninstantiated, the predicate delays.

Modes and Determinism

• nexttoward(+, +, -) is det

Exceptions

(4) instantiation fault
X or Y is not instantiated (non-coroutining mode only).
(5) type error
Operation not defined on rational numbers
(24) number expected
Number is not of a numeric type.

Examples

Success:
Result is nexttoward(1.0, 2.0).	% gives Result = 1.0000000000000002
Result is nexttoward(1.0, 0.0).	% gives Result = 0.99999999999999989
Result is nexttoward(1.0, 1.0).	% gives Result = 1.0

Result is nexttoward(0.0, 1.0).	% gives Result = 4.94065645841247e-324
Result is nexttoward(1.0Inf, 0.0)	% gives Result = 1.7976931348623157e+308

Result is nexttoward(5, 9).	% gives Result = 6
Result is nexttoward(5, 0).	% gives Result = 4
Result is nexttoward(5, 5).	% gives Result = 5

Error:
Result is nexttoward(3_4, 2_1).	% type error