Previous: , Up: Fixnum and Flonum Operations   [Contents][Index]


4.7.5 Floating-Point Rounding Mode

IEEE 754-2008 supports four rounding modes, which determine the answer given by a floating-point computation when the exact result lies between two floating-point numbers but is not a floating-point number itself:

to-nearest

Round to the nearest floating-point number. If there are two equidistant ones, choose the one whose least significant digit is even. Also known as “round-to-nearest/ties-to-even”.

toward-zero

Round to the floating-point number closest to zero.

downward

Round to the greatest floating-point number below.

upward

Round to the least floating-point number above.

Warning: Not all procedures in MIT/GNU Scheme respect the rounding mode. Only the basic arithmetic operations — +, -, *, /, and sqrt — will reliably respect it. The main purpose of changing the rounding mode is to diagnose numerical instability by injecting small perturbations throughout the computation.

Bug: It would be nice if we had “round-to-odd”, where any inexact result is rounded to the nearest odd floating-point number, for implementing “doubled”-precision algorithms. But we don’t. Sorry.

procedure: flo:default-rounding-mode

Returns a symbol for the default rounding mode, which is always to-nearest.

procedure: flo:rounding-modes

Returns a list of the supported rounding modes as symbols.

procedure: flo:rounding-mode
procedure: flo:set-rounding-mode! mode

Gets or sets the current rounding mode as a symbol, entering a per-thread environment.

procedure: flo:with-rounding-mode mode thunk

Call thunk in a per-thread environment with the rounding mode set to mode. On return, the floating-point environment, including rounding mode, is restored to what it was before.

Non-local exit from and re-entrance to thunk behaves as if the call is surrounded by flo:preserving-environment (see Floating-Point Environment).


Previous: , Up: Fixnum and Flonum Operations   [Contents][Index]