[ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

## 12.3 `compat.norational` - Rational-less arithmetic

Module: compat.norational

Until release 0.8.7, Gauche didn’t have exact rational numbers. It was able to read the rational number literals such as `2/3`, but they are immediately coerced to inexact real numbers (except when it represents a whole integer). And if you divided an exact integer by another exact integer, the result could be coerced to an inexact real if the result wasn’t a whole integer.

As of 0.8.8, this is not the case anymore. Exact division always yields exact result, except when the divisor is zero.

 ```(/ 2 3) ⇒ 2/3 (/ 5) ⇒ 1/5 (/ 4 2) ⇒ 2 ```

This is more precise, but has one drawback: exact rational arithmetic is much slower than the integer and inexact real arithmetic. If you inadvertently produce a rational number in the early stage of calculation, and continue to apply exact arithmetic, performance would be degraded miserably.

The proper way to solve this is to insert `exact->inexact` to appropriate places. However, to ease the transition, you can just import this module and the division `/` behaves in the way it used to.

 ```(use compat.norational) (/ 2 3) ⇒ 0.6666666666666666 (/ 5) ⇒ 0.2 (/ 4 2) ⇒ 2 ```

The effect is not global, but only to the modules you explicitly import `compat.norational`.

This module only redefines `/`. So if your code has exact rational literals, they are treated as exact rationals rather than coerced to inexact reals. You should prefix rational literals with `#i` to force Gauche to coerce them to inexact reals:

 ```gosh> 1/3 1/3 gosh> #i1/3 0.3333333333333333 ```

 [ < ] [ > ] [ << ] [ Up ] [ >> ]

This document was generated on July 19, 2014 using texi2html 1.82.