Comprensione dell'aritmetica in C

1

Ho una domanda imbarazzante, ma devo assicurarmi di averlo capito correttamente. Ho un file * .c con la seguente riga:

    CSRConstant = 2*macroParticleCharge*particleCharge/pow(3*rho0*rho0, 1./3.)/(4*PI*epsilon_o*particleMass*sqr(c_mks));

È interpretato come:

    
posta user1886681 21.06.2014 - 09:07
fonte

2 risposte

2

La risposta è quasi altrettanto imbarazzante. No, assolutamente no, e qualsiasi cosa tu faccia per cambiare ciò che hai scritto sarà molto probabilmente sbagliata finché non avrai letto e capito Che cosa ogni scienziato informatico dovrebbe sapere sull'aritmetica virgola mobile

Capisco solo 1/4 di quel documento, ma ne capisco abbastanza per sapere che le mie possibilità di ottenere un virgola mobile sono basse. Fortunatamente nella mia linea di lavoro, come molti programmatori, il punto di virgola mobile è facilmente evitabile o abbastanza semplice, quindi quando devo andare lì posso dedicarmi a farlo bene.

In sostanza, il documento descrive come viene raggiunto il punto in virgola mobile sui computer e quali tipi di errori possono verificarsi in grado di generare risultati errati. A prima vista, la tua implementazione della formula probabilmente mostrerà la maggior parte degli errori descritti nel link.

    
risposta data 21.06.2014 - 10:08
fonte
1

Sì, per quanto posso dire l'espressione nella forma che hai scritto produrrà un'approssimazione molto buona al risultato corretto di valutare quella formula su un intervallo molto ampio di valori di input.

Hai eseguito una semplificazione specifica di un calcolo costante, per motivi che non capisco. Se hai intenzione di semplificare un calcolo, perché non semplificarli tutti?

Se questo calcolo viene visualizzato all'interno di un ciclo, è possibile controllare quanto è buono il compilatore per ottimizzare i calcoli in virgola mobile, in particolare le costanti. In caso contrario, potresti volerlo.

Ci sono alcuni problemi piuttosto specifici che possono sorgere nell'usare calcoli in virgola mobile sui computer, sia quando si gestiscono numeri con valori estremi (piccoli e grandi) o quando si eseguono operazioni che perdono cifre significative (come la sottrazione, in particolare) . Non vedo nessuno di quelli qui.

Non ti preoccupare. Il computer dice di sì. Questa volta.

    
risposta data 22.06.2014 - 08:33
fonte

Leggi altre domande sui tag