Re: Simulazione fisica C++: float o double ?

From: Elio Fabri <mc8827_at_mclink.it>
Date: Sat, 11 Dec 2004 21:07:24 +0100

Ti dico subito che concordo con tutti quelli che ti hanno consigliato
il tipo double.
A rigore si dovrebbe dire "dipende", e tu non hai dato nessuna
informazione su che tipo di calcoli vuoi fare: "giocherellare con le
leggi della dinamica" e' un po' poco...

Ma suppongo che non ti meterai a studiare sistemi di 1000 corpi, e
forse neppure di 10. Quindi i problemi di occupazione di memoria o di
cache non li avrai di certo, ne' avrai problemi di tempo di calcolo.
Invece un certo rischio di eccessivi errori di arrotondamento potresti
averlo, quindi opto per il double che non ha praticamente svantaggi in
questo caso.

Viceversa, come ti e' gia' stato detto e ribadisco, dovresti fare
attenzione all'algoritmo d'integrazione che userai.
Ti sconsiglio risolutamente il cosiddsetto "metodo di Eulero", ossia
delle differenze prime in avanti.
E' poco preciso, quindi ti obbliga a un piccolo passo temporale;
presenta in certi casi anche instabilita'.
E comunque introduce un errore sistematico che cresce come il numero
di passi, e che puoi si' verificare come ti ha indicato Giorgio, ma
non correggere.
Se per es. ti venisse in mente di studiare il moto di un pianeta,
scopriresti con raccapriccio un'orbita "a spirale"...

Molto meglio il metodo delle differenze centrali, che in forma
travestita trovi descritto anche nella "fisica di Feynman".
Se no ci sono metodi piu' sofisticati, per es. il Runge-Kutta di 4^
ordine, che permette passi temporali assai piu' lunghi. Ma bisogna
trovare le formule, che pero' sono molto diffuse, oppure ricorrere
alle "Numerical Recipes".
Pero' se vuoi capire quello che fai, meglio programmare algoritmi che
puoi capire...
------------------------------
Elio Fabri
Dip. di Fisica - Univ. di Pisa
------------------------------
Received on Sat Dec 11 2004 - 21:07:24 CET

This archive was generated by hypermail 2.3.0 : Wed Sep 18 2024 - 05:10:37 CEST