thanks

On Tue, 13 Aug 2013 00:00:59 +0200 =?KOI8-R?B?z8zYx8Egy9LZ1sHOz9fTy8HR?= wrote:
> Yes, for IEEE754 floating point. I hope the other fp systems have been
> eradicated from the face of the earth by now. Unless you want to port
> AST to a IBM 7094 it should work :)

> Olga

> On Mon, Aug 12, 2013 at 11:52 PM, Glenn Fowler <g...@research.att.com> wrote:
> >
> > On Sun, 11 Aug 2013 10:43:06 +0200 Tina Harriott wrote:
> >> On Wed, Jul 24, 2013 at 7:28 PM, Glenn Fowler <g...@research.att.com> 
> >> wrote:
> >> >
> >> > On Wed, 24 Jul 2013 19:02:39 +0200 Tina Harriott wrote:
> >> >> 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?
> >> >
> >> > float is an alias
> >> > this shows the alias definition
> >> >         type float
> >> > which is
> >> >         typeset -lE
> >> > this documents -l
> >> >         typeset --?l
> >> >
> >> > so for your example
> >> >         typeset -E
> >> > gave you a double v and
> >> >         typeset -lE
> >> > would give you a "long double" v
> >
> >> But why does nextafter() misbehave if I want to use a datatype smaller
> >> than "long double"? Accuracy is a good thing, but in this case we
> >> iterate too fine-grained, meaning the code should iterate over the
> >> smallest possible steps of a double, but not over the smallest
> >> possible steps of a long double.
> >
> > here is a general question about C floating point that will determine
> > how to handle different floating point types in ksh arithmetic
> >
> > given
> >         float a;
> >         long double b;
> >         float c;
> >
> >         a = <some valid float number>;
> >         b = a;
> >         c = b;
> >
> > is this always true
> >         a == c
> >
> > _______________________________________________
> > ast-users mailing list
> > ast-users@lists.research.att.com
> > http://lists.research.att.com/mailman/listinfo/ast-users

> -- 
>       ,   _                                    _   ,
>      { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
> .----'-/`-/     olga.kryzhanov...@gmail.com   \-`\-'----.
>  `'-..-| /       http://twitter.com/fleyta     \ |-..-'`
>       /\/\     Solaris/BSD//C/C++ programmer   /\/\
>       `--`                                      `--`

_______________________________________________
ast-users mailing list
ast-users@lists.research.att.com
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to