Buon giorno!
sono bruno e come si vede dal titolo mi sono affacciato da poco alla programmazione.
sto seguendo un videocorso sul c++11 del professor fabrizio camuso e andando a ricopiare un suo esercizio sul
if else mi sono imbattuto su degli strani risultati.
riporto il codice e poi proseguo con la descrizione:
#include <iostream>
#include <limits>
//#include <cstdint>
using namespace std;
int main ()
{/// A definizione e inizializzazione strutture dati
/// B acquisizione dei dati INDISPENSABILI (INPUT)
/// C elaborazione dei dati ( calcoli e processi )
/// D comunicazione dei risultati (OUTPUT)
int n1=0, n2=0, n3=0;
/* ///input dati separato con INVIO per ogni dato immesso
cout << "\n inserisci n1 \n";
cin>> n1;
cout << "\n inserisci n2 \n";
cin>> n2;
cout << "\n inserisci n3 \n";
cin>> n3 ;
cout << "\n dati letti : \n" << "n1:"
<< n1 << "n2:" << n2 << "n3:" << endl;*/
/// inserimento dati sequenziali (senza invio)
cout << " inserire tre numeri interi separati da uno spazio :";
cin >> n1 >> n2 >> n3;
cout << "\n dati letti :\n" << " n1 :"
<< n1 << " n2 :" << n2 << " n3 :" << n3 << endl;
/// elaborazione
/// calcolo della media primo modo
int somma =0;
somma = n1+n2+n3;
int media1 = somma /3; /// divisione senza decimali
/// calcolo media secondo modo
int media2 = (n1+n2+n3) /3;
/// calcolo media num 3
double media3 = (n1+n2+n3) /3; /// ATTENZIONE
/// IL CALCOLO VIENE ESEGUITO FRA INTERI E VIENE
/// RESTITUITA LA PARTE INTERA ALLA VARIABILE DOUBLE
/// soluzione con forzatura di almeno uno dei membri a double
long long media4 = (n1+n2+n3) /3; /// 3.0 è stato forzato a double per ottenere i decimali
cout<< "media1 : " << media1 << endl;
cout<< "media2 : " << media2 << endl;
cout<< "media3 : " << media3 << endl;
cout<< "media4 : " << media4 << endl;
cout << "double :" <<sizeof(double) << endl;
cout << "float :" << sizeof(float)<< endl;
cout << "int :" << sizeof(int)<< endl;
cout << "long long int :" << sizeof(long long int)<< endl;
cout<< "lmax :" << LONG_MAX << endl;
cout<< "lmin :" << LONG_MIN << endl;
cout<< "int_max :" << INT_MAX << endl;
cout<< "int_min :" << INT_MIN << endl;
return 0;
}
Quando mi sono trovato a fare la prova del codice scritto, facendo lo stesso stress test del video e scrivendo per tre volte il numero 1miliardo
per testare i limiti di overflow. la variabile media4, che inizialmente è partita come un double , mi dava il medesimo numero della variabile media3.
ho provato a cambiarne il tipo , controllando anche con il sizeof la capacità, e mi ritrovo ad avere sempre un numero che non rientra
nel range di capacità, cosa che invece dovrebbe avvenire con i tipi long long e (credo anche ) double.
eppure fra l'architettura usata nel video e quella del mio pc i byte in uso per i vari tipi corrispondono.
vorrei capire dove sta l'inghippo.
inoltre , visto che sono nuovo e devo prendere ancora confidenza con le varie funzionalità di questa pagina vi chiedo: come si usa il pulsante
code? nel senso che: ho provato a premerlo quando ho ricopiato il codice ma non ne capisco sia l'uso che la necessità.
abbiate pazienza.
grazie in anticipo.