2014-06-23 7 views
5

Se faccio una precisione di funzionamento singolo con i valori, che darà un risultato che termina con 8:Matlab (2008a-32bit) singolo bug precisione

>> single(single(6.500001e+02)*single(-64.1775131)*single(0.65)*single(2)) 
ans = -5.4230008e+004 

poi faccio qualsiasi operazione utilizzando doppia precisione, e la stessa operazione come prima, con precisione singola, il risultato sarà diverso dalla prima volta faccio funzionare:

>> double(6.5000012e+02)*double(-64.1775131)*double(0.65)*double(2) 
ans = -5.423000858119204e+004 

>> single(single(6.500001e+02)*single(-64.1775131)*single(0.65)*single(2)) 
ans = -5.4230004e+004 

Questo problema si verifica in Matlab 2008a 32 bit. Questo non è un problema in Matlab 2012b 64 bit.

Qualche idea su come evitare questo problema?

Grazie.

+0

Non riesco a riprodurre questo effetto in MATLAB Versione: 8.2.0.701 (R2013b). Ottengo il secondo singolo risultato anche la prima volta. Solo per la cronaca. –

+0

Non riesco a riprodurre su MATLAB R2012a/32 bit (win32). –

+0

Inoltre, verifica questo, sembra correlato: https://www.mathworks.com/matlabcentral/newsreader/view_thread/246425 Sembra che tu abbia accesso a R2012b, perché non utilizzarlo? –

risposta

2

Non ho potuto testare ma, da quello che ho trovato su MATLAB Central, sembra che ci sia un bug nel Global Workspace @versions R2008 *. Quindi, per evitare il problema:

  • Non eseguire codice dalla finestra di comando;
  • Attacca con precisione doppia, a meno che non sia sottoposto a severi vincoli di memoria (è ancora più veloce, perché il tipo predefinito è doppio);
  • Lavoro in funzioni anziché in script (apparentemente la funzione locale Workspace non è interessata da questo bug)
  • Utilizzare una versione R2009 + MATLAB, che sembra aver risolto il bug.
+0

Grazie per la risposta. Usando le funzioni effettivamente ha funzionato! – RodrigoReis