help-octave
[Top][All Lists]

## Re: Possible loss of accuracy

 From: Laurent Hoeltgen Subject: Re: Possible loss of accuracy Date: Wed, 15 May 2013 15:53:20 +0200 User-agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130510 Thunderbird/17.0.6

```On 15/05/13 11:27, Marco Caliari wrote:
```
```Dear all,

if I compute

t=50
(1-2^(-t))^(2^t)

I get (different versions, machines, ...)

ans =  3.67879441128629e-01

which is correct to the 10th digit (compared with www.wolframalpha.com).
I can stay with it, but Matlab is correct to the 15th digit. While
trying to understand, I wrote the following Fortran code

program test
integer t
t = 50
write(6,'(1x,e24.16)') (1.d0-2.d0**(-t))**(2.d0**t)
write(6,'(1x,e24.16)') (1.d0-2.d0**(-50))**(2.d0**50)
stop
end

If I compile with gfortran test.f (gfortran 4.3.3) and run, I get

0.3678794411286288E+00 (~ Octave value)
0.3678794411714422E+00 (~ Matlab value)

and if I compile with gfortran -O2 test.f and run, I get

0.3678794411714422E+00
0.3678794411714422E+00

So, I understand that compiler optimizations are involved. On the other
hand, I compiled Octave with -O2 (and other flags).

Can anyone point me to the right direction?

Thanks,

Marco
_______________________________________________
Help-octave mailing list
https://mailman.cae.wisc.edu/listinfo/help-octave
```
```
Hi,

if I compile your program on my Xubuntu 12.04 laptop I get

0.3678794411714422E+00
0.3678794411714422E+00

```
with gfortran 4.6.4 and gfortran 4.8.0 (with -O2 and -O3 flags). Not sure if this is helpful for you, though.
```
Regards,
Laurent

```