PDA

View Full Version : [c++] risultato double con parametri int


Rizzolo
08-05-2010, 13:14
Mi è capitato di sbatter la testa tutta la notte per la seguente formula:


//posizione sito 13°22'29";41°45'54"
int long_gradi=13.0;
int long_primi=22.0;
int long_secondi=29.0;
int lat_gradi=41.0;
int lat_primi=45.0;
int lat_sec=54.0;

//posizione del sito in rif. inerziale
double teta=gst_s+((long_gradi+long_primi/60+long_secondi/3600)*pi/180);


teta non mi restituiva un risultato corretto finché non ho cambiato la tipologia di array dei parametri da int a double.


double long_gradi=13.0;
double long_primi=22.0;
double long_secondi=29.0;
double lat_gradi=41.0;
double lat_primi=45.0;
double lat_sec=54.0;


Mi sapreste spiegare perché?

Lavorare con gli int comporta qualche grossa approssimazione per caso?

cionci
08-05-2010, 14:14
Mi sembra normale, 22 / 60 con gli int fa 0.

Rizzolo
08-05-2010, 14:29
Ok quindi non importa se il risultato richiesto è espresso in double, cmq sia il prodotto fra int si azzera.
A questo punto conviene sempre utilizzare le double praticamente.

cionci
09-05-2010, 11:51
Immaginati gli operatori aritmetici come delle funzioni.
Esistono diverse di funzioni che hanno operandi di tipo identico, quindi int / int, double / double, long / long etc etc
La funzione da applicare viene scelta in base al tipo degli operandi, viene scelto il tipo che garantisce la minor perdita di precisione.
E' chiaro che se entrambi gli operandi sono interi verrà usato il tipo intero e la divisione fra interi restituirà un intero. Quindi 22 / 60 con una divisione intera fa 0.