another 64-bit issue

Steve Kargl sgk@troutmask.apl.washington.edu
Wed Aug 25 23:49:00 GMT 2004


On Wed, Aug 25, 2004 at 03:18:07PM -0700, Steve Kargl wrote:
> On Wed, Aug 25, 2004 at 02:42:18PM -0700, Steve Kargl wrote:
> > On Wed, Aug 25, 2004 at 02:27:40PM -0700, Steve Kargl wrote:
> > > Consider this program
> > > 
> > >   program t
> > >    real(8) y
> > >    print*, 'huge(y) = ', huge(y)
> > >   end program t
> > > 
> > > on my 64-bit amd64 FreeBSD system.  The compiled
> > > program hangs without printing any thing to stdout.
> > > I've traced the problem with gdb and it appears
> > > that the line
> > > 
> > > calculate_exp (d=15) at ../../../gcc/libgfortran/io/write.c:143
> > > spins in an infinite loop.
> > > 
> > 
> > I misread the gdb trace.  The problem may be in output_float().
> > 
> 
> Yep, the problem is in output_float().  I sprinkled some
> printfs in it and found that
> 
> line 288:  sca = g.scale_factor;
> line 289:  n = value;
> 
> gives
> 
> sca   = 1
> n     = 1.79769313486231571e+308
> value = 1.79769313486231571e+308
> 
> We next end up inside the 
> 
>   if (ft == FMT_F || ft == FMT_E || ft == FMT_D)
> 
> block with "sca = 1", which means this block 
> is executed
> 
>       /* Calculate the new val of the number with consideration
>          of global scale value.  */
>       while (sca >  0)
>         {
>           minv *= 10.0;
>           maxv *= 10.0;
>           n *= 10.0;
>   printf("%.17e\n", n);
>           sca -- ;
>           neval --;
> 
> and we get "n = inf", which is not a Good Thing..
> 

This is nw PR 17195.


-- 
Steve



More information about the Fortran mailing list