Here's one of my little tough problems which I am unable to solve
myself, even after looking at the source code of ast-ksh. The problem
below requires a good understanding how floating point numbers are
implemented in computers.

I'm trying to prototype code and like to iterate over a small, linear
area by using the C library function nextafter() to step forward the
smallest possible distance between each step, and print the number of
iterations needed to cover the distance between 4 and 4.000000000001:
ksh -c 'float v ; integer iter ; for ((iter=0,v=4 ; v < 4.000000000001
&& iter < 10000000; v=nextafter(v,4.000000000001))) ; do
((iter++));done;print $iter '
2305843

The result 2305843 is correct.

However, if I use typeset -E (or just typeset) to declare the variable
v the loop runs forever, or in this case until it hits iter < 10000000
which I added as safeguard later:
ksh -c 'typeset -E v ; integer iter ; for ((iter=0,v=4 ; v <
4.000000000001 && iter < 10000000; v=nextafter(v,4.000000000001))) ;
do ((iter++));done;print $iter '
10000000

Can anyone explain this?

Tina
-- 
Tina Harriott  - Women in Mathematics
Contact: [email protected]
_______________________________________________
ast-users mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to