Problema numeri troppo grandi C

  • Autore discussione Autore discussione IRQL
  • Data d'inizio Data d'inizio
Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

IRQL

Utente Attivo
Messaggi
762
Reazioni
15
Punteggio
60
salve a tutti..

da un po' di tempo programmo in c con VIsual C++ Express....

ho creato un programma che esegue alcuni calcoli, ma se vengono inseriti numeri troppo grandi il programma sballa...

ad esempio, con una scanf chiedo all'utente di inserire un numero che verrà memorizzato in una variabile... ma se viene digitato un numero troppo grande, nella variabile viene memorizzato un valore errato...

sapete dirmi come mai accade questo?
 
questo perchè quando dichiari una variabile indichi anche la dimensione

ad esempio int a; vuol dire che allochi lo spazio per una variabile di 2byte ...in memoria di metti i bit e quindi puoi mettere 2 byte di bit e quindi se hai fatto qualcosa di binario viene fuori che il massimo numero rappresentabile e quello derivante da 2 byte tutti di 1..se te vuoi un numero più grande devi usare il long ad esempio che mi sembra sia 4 byte. Se tu inserisci un numero più grande del previsto quello che fa è che lo castra...cioè metti che tu inserisci un numero da 3byte ecco lui ne prende solo 2...poi lo castra con il metodo big endian o little endian..ma è un pò lunga da spiegare
 
Gli interi sono a 2 byte... usa 4 byte, cioé 32 bit.... evidentemente stai sforando oltre. :( il numero più grande scrivibile in un int è (2^16)-1, se ne scrivi uno più grande non te lo prende.
Comunque basta dichiarare la variabile come long int se è un intero.
 
grazie per le risposte...

quindi dichiarando le variabili come long int posso inserire numeri enormi? o c'è un limite anche per i long int?
 
Ma quindi come fanno nei programmi professionali a consentirti di immettere numeri enormi?
 
Ma lo sai quanto è 2^32!?
Comunque usa un double. Penso vada bene, puoi scrivere un sacco di roba in un double, oppure se usi solo valori positivi usa un unsigned. Ciao ancora.

Edit: no scusa l'ho detta grossa non sono sicuro funzioni riguardo al double fai due prove. Alcuni compilatori supportano anche int64 (interi a 64 bit), che possono scrivere numeri enormi. Ciao ancora.
 
Ultima modifica da un moderatore:
Codice:
ho creato un programma che esegue alcuni calcoli, ma se vengono inseriti numeri troppo grandi il programma sballa...
non dici di che numeri si tratta. Sono tutti interi o vuoi rappresentare anche razionali?

Mi sa che c'è un po' di confusione su cosa siano gli interi nel linguaggio C.
La grandezza di un int dipende dal compilatore che si utilizza e dall'architettura, può variare dai 2 ai 4 byte (in un sistema a 32 bit).

Per avere la certezza di cosa si stia dichiarando ed avere il controllo sulla grandezza va prefissata con
Codice:
unsigned/signed short/long int
.

Poi dire di utilizza i double non è un buon consiglio (se a IRQL serve rappresentare numeri interi e basta). I double non sono interi, sono numeri floating point, che possono contenere anche numeri interi con decimali a 0, ma questa possibilità va valutata caso per caso anche se è vero che possono contenere grandi interi. Se ricordo bene una limitazione su un sistema a 64 bit, si risce a rappresentare un numero 2^53 in modo preciso. Oltre c'è uno scarto di errore da pagare.
 
Ultima modifica da un moderatore:
Usando interi a 32 bit puoi scrivere numeri fino a 4 miliardi e qualcosa. Se non dovessero bastare si scrive il programma a 64 bit e si arriva a numeri veramente improbonibili.

Edit: il numero preciso (il numero massimo teorico) è 4.294.967.295 (i punti li ho messi per comodità).

Invece a 64 bit puoi usare numeri fino a 18.446.744.073.709.551.615 (miliardi di miliardi). La condizione è sempre avere un processore a 64 bit ,l'OS a 64 bit e un compilatore a 64 bit.
 
Ultima modifica:
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top