Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Reason why 'for' doesn't work across floats?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Jacques Carette <carette@m...>
Subject: Re: [Caml-list] Reason why 'for' doesn't work across floats?
Michal Moskal <malekith@pld-linux.org> wrote:
> On Thu, Jan 08, 2004 at 02:11:52PM +0000, Richard Jones wrote:
> > Is there a particular reason why I shouldn't be allowed to step over
> > floats?
> > 
> > # for r = 0. to 9. step 1. do printf "%f" r done;;
> >           --
> > This expression has type float but is here used with type int
> 
> let f a b = for x = a to b do () done
> 
> What type would f have (int -> int -> int or float -> float -> float)?
> One would need "for.", which doesn't seem appealing.

Another reason is that
for r = 0. to 9. step 0.001 do printf "%f" r done;;
will not necessary have the expected number of iterations, since 9. will not be 'hit' exactly (numerical round-off 
guarantees that).  For some loops, the number of times around would change depending on whether all the numbers 
involved have exact base 2 representations or not.  Very ugly.

After suffering through painful debugging sesions on programs in languages that allow the above type of loops, I am 
quite glad that Ocaml does not allow this, even if in this case it is because of typing rather than sound numerical 
analysis...

Jacques

-------------------
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