On Fri, Nov 30, 2012 at 11:04:30AM +0100, a.furi...@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; _______________________________________________ Gfoss@lists.gfoss.it http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. Non inviate messaggi commerciali. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 605 iscritti al 10.7.2012