Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Re: [Caml-list] Runtime overflow and what to do
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Luc Maranget <luc.maranget@i...>
Subject: Re: [Caml-list] Runtime overflow and what to do
> Hi,
> suppose I use the following code for fact
> let rec fact n = if n <= 1 then 1 else n * fact (n - 1) ;;
> Because an integer number is represented by a fixed number of bytes I will
> get a runtime overflow if n is chosen too large.
> Is there in Ocamel a workaround to cope with this problem . Something like "
> Onoverflow goto .. " in imperative languages.
> Thx
> Scott

There is no such feature as a Onoverflow goto, because
Ocaml (and not OCamel...) default integers are not << real >> integers,
but machine integers on some size (typically 31 or 63) bits.

This means that maxint + 1 is minint and basically this is the
behavior of C.

I guess the reason why is avoiding putting non-obvious tests

Most of the time you do not need those tests.
  * If you want ``real'' integers, you can use some arbitrary
    precision library (Num, etc.), overflow detection would  not help
    here anyway.

  * If you want to be warned on overflow, you have to devise the tests
    by yourself, and then you can use an exception as your
    Onoverflow goto
     An easy one :

expection Overflow

let protected_incr x =
  let y = x+1 in
  if y > x then y
  else raise Overflow

  .... incr (..)
| Overflow -> ... do whatever you can ... 

Hope it helps.


To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: