[Gfoss] Grass double precision field

Sandro Santilli strk a keybit.net
Ven 30 Nov 2012 11:22:22 CET


On Fri, Nov 30, 2012 at 11:04:30AM +0100, a.furieri a lqt.it wrote:

> e ti assicuro che ho dovuto sudare le mitiche sette camicie prima
> di riuscire faticosamente a mettere a punto una serie di test numerici
> (coordinate) che tornassero sempre e comunque gli stessi identici
> risultati su Debian, Fedora e WinOZ sia a 32 che a 64 bit.
> 
> con un'ultima insospettata regressione finale quando poi ho fatto
> girare tutta quanta la test-coverage sotto Valgrind, ed ho cosi'
> inopinatamente scoperto che in questo ambiente di test alcuni
> testcases ritornano ancora altri valori differenti :-P
> (non del tutto sorprendente, visto che Valgrind in pratica non
> usa la CPU fisica ma usa una macchina virtuale sua propria che
> emula i codici macchina x86).

Aggiungo che anche le stesse architetture possono tornare valori
diversi quando si cambiano i flag di compilazione. L'uso o meno
di registri allarga o diminuisce i bit a disposizione nelle
operazioni cambiando i risultati finali. L'uso dei registri dipende
dallo scrivere o meno una variabile in memoria, quindi:

 a = ( b / c ) * 2;

potrebbe essere diverso da

 t = b / c; // store it !
 a = t * 2;

E la seconda potrebbe essere di nuovo come la prima se si chiede
al compilatore di ottimizzare, e se il compilatore e' capace di
farlo (quindi dipende pure dalla versione).

In GEOS siamo _pieni_ di questi problemi... uno dei piu' recenti
tentativi di "stabilizzazione" e' stato quello di aggiungere uno
switch -ffloat-store alla linea di compilazione (ma funziona solo
con GCC).

--strk; 


Maggiori informazioni sulla lista Gfoss