32bit vs. 64bit
Jaroslav Hajek
highegg at gmail.com
Sat Mar 14 03:50:26 CDT 2009
On Sat, Mar 14, 2009 at 8:40 AM, Michael D. Godfrey
<godfrey at isl.stanford.edu> wrote:
> This is really a question:
>
> I have some 64bit x86 architecture machines and one
> 32bit. Compiling the same Octave 3.1.54+ on 64bit
> and 32bit results in Octaves that differ by a small amount
> when computing very small differences. The difference
> is surely within rounding error.
>
> The question is: is anyone surprised that the identical inputs
> on 32 and 64 bit produce differing results? Or, more interesting,
> does anyone know why this happens? All identical arithmetic
> operations on floating point numbers should produce identical
> results on the two architectures.
>
> To give an idea of the difference, the residual difference between
> two vectors which formally should be the same (zero) is:
>
> 64 bit: -8.21e-14
> 32bit: -1.58e-13
>
> So, if anyone thinks that the results on 32bit and 64bit should match
> exactly, I will try to figure out where the difference occurs. (There is
> lots of computing down the paths: use of elementary functions
> e, sin, cos, log, ... and a lot of other transforms.) Also, the 32bit
> and 64bit gcc and gfortran may not generate excatly the same code.
>
> Michael
>
When comparing results on architectures that have guard bits, the
results obviously depend on the number of registers, unless you use
-ffloat-store. If you link to external BLAS and LAPACK, those need to
be compiled using these options, too (which will degrade their
performance). You should also specify -mieee-fp, which should prevent
optimizations that change fp results.
--
RNDr. Jaroslav Hajek
computing expert & GNU Octave developer
Aeronautical Research and Test Institute (VZLU)
Prague, Czech Republic
url: www.highegg.matfyz.cz
More information about the Bug-octave
mailing list