PDA

View Full Version : [C] Grandi numeri


Marinelli
22-05-2005, 22:20
Buonasera.

Ho bisogno di operare con numeri di grandi dimensioni, sia interi sia con la virgola. Diciamo una decina di cifre e quelli con la virgola anche con buona precisione (parecchie cifre dopo la virgola). Qualcuno saprebbe consigliarmi su quali tipi utilizzare e magari quali sono i formati (%x) da utilizzare con la printf per la stampa corretta di ciascun tipo?

Ciao e grazie :)

mjordan
23-05-2005, 05:29
Buonasera.

Ho bisogno di operare con numeri di grandi dimensioni, sia interi sia con la virgola. Diciamo una decina di cifre e quelli con la virgola anche con buona precisione (parecchie cifre dopo la virgola). Qualcuno saprebbe consigliarmi su quali tipi utilizzare e magari quali sono i formati (%x) da utilizzare con la printf per la stampa corretta di ciascun tipo?

Ciao e grazie :)

Per quanto riguarda gli interi, se hai bisogno di soltanto dieci cifre, puoi usare i comunissimi int a 32 bit, che, come riportato dalla costante INT_MAX definita in limits.h, ha un valore massimo consentito di 2.147.483.647. Se non ti interessano i valori negativi, puoi rivolgerti all'unsigned int, che porta il limite a 2^32 - 1. Se ti servono valori piu' grandi puoi sare il long long int definito dallo standard ISO C 99 che altro non e' un intero a 64 bit (che, su cmpilatori C99 e architetture 32 bit viene comunque trattato come un 32 bit) che ha un raggio di azione nell'intorno (-2^63 - 1) e (2^63 - 1). Anche questo ha un tipo unsigned se non ti interessano i relativi, sempre definito dal C99, che spazia fino a 2^64 - 1.

Per quanto riguarda le cifre dicemali, il comunissimo float supporta fino a 6 cifre decimali, mentre il tipo double va da 1E-37 a 1E+37 in notazione scientifica, a 10 cifre decimali.

Per quanto riguarda il controllo della precisione stampabile con la printf(), puoi usare il comunissimo specificatore di precisione %x.yf , %x.ye oppure %x.yE dove x indica il numero di cifre intere e y indica la parte decimale per esempio:

printf("%5.3f\n", number);


stampera' una qualsasi cifra con 5 cifre intere e 3 decimali (ad es. 25436.564

mjordan
25-05-2005, 06:37
Grazie per il feedback comunque. ;)

Marinelli
25-05-2005, 14:45
Cavolo, scusami... non so perché ero convinto di averti risposto e ringraziato! Forse l'ho pensato ma non l'ho fatto.

Ti ringrazio per la risposta ;)

Ciao :)

mjordan
25-05-2005, 15:14
Cavolo, scusami... non so perché ero convinto di averti risposto e ringraziato! Forse l'ho pensato ma non l'ho fatto.

Ti ringrazio per la risposta ;)

Ciao :)

C'e' un errore di comunicazione, non e' che volevo essere ringraziato, ci mencherebbe! :sofico:
Volevo solo accertermi che non ti fosse sfuggito il thread :D

Marinelli
25-05-2005, 16:09
No, non preoccuparti... meriti di essere ringraziato, sei stato gentile a rispondermi in modo così completo :)

Ciao :)