Browse thread
Re: [Caml-list] Runtime overflow and what to do
-
Luc Maranget
-
Sven LUTHER
-
Xavier Leroy
-
Scott J,
- Sven LUTHER
- Alessandro Baretta
- Xavier Leroy
- Sven LUTHER
-
Scott J,
-
Xavier Leroy
-
Sven LUTHER
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Alessandro Baretta <alex@b...> |
| Subject: | Re: [Caml-list] Runtime overflow and what to do |
Scott J, wrote: > Hi, > > So it is not easy, perhaps even impossible if the processor doesn't set > a flag . > > e.g. fact n begins first with a lis of negative numbers (after overflow) > then comes again a list with positive numbers and then it remains = 0 > > Scott If your problem is only the factorial function, then you can calculate statically (i.e. at source-code writing time) the value of the maximum integer whose factorial will fit in O'Caml's representation of integers, and test against that, once and for all, before entering the recursive calculation. exception overflow let max_fact_arg = ... let fact = let rec rec_fact n = if n <= 0 then 1 else n * rec_fact (n-1) in function | x when x <= max_fact_arg -> rec_fact n | _ -> raise Overflow This strategy allows to incur in hardly any runtime costs for the check, and it also allows you prove more easily that your program will not raise runtime Overflow exceptions (the precondition for not entering the exception raising branch does not have to be propagated out of a recursive function call). Alex ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners