Repository 32bit  Forum
Repository 64bit  Wiki

[C] lunghezza float [risolto]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Re: [C] lunghezza float [risolto]

Messaggioda robbybby » gio apr 15, 2010 12:15

float e double a virgola mobile (e ci mancherebbe altro). Sui PC, io ho sempre visto float a 32 bit, e double a 64 bit.
Io, per confrontare due umeri in virgola mobile, di solito faccio:
Codice: Seleziona tutto
const double epsilon = 0.0001;  //questa è la max differenza che ammetti per i tuoi calcoli, e la faccio come costante globale
double dbN1 = 0;
double dbN2 = 0;

  if(fabs(dbN1 - dbN1) < epsilon)
    ...


Per gli interi, lo standard impone solo che:
short <= int <= long.
Tra l'altro, a 64 bit, Win$ e Linux hanno lunghezze differenti per gli interi. Il long è 64 bit per entrambi, non ricordo invece come siano messi short e int.
Avatar utente
robbybby
Linux 3.x
Linux 3.x
 
Messaggi: 1178
Iscritto il: sab dic 16, 2006 10:48
Località: Fra Trantor e Terminus
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5

Re: [C] lunghezza float [risolto]

Messaggioda sya54M » gio apr 15, 2010 15:09

robbybby ha scritto:float e double a virgola mobile (e ci mancherebbe altro). Sui PC, io ho sempre visto float a 32 bit, e double a 64 bit.

bravo, è quello che sapevo io.
robbybby ha scritto:Io, per confrontare due umeri in virgola mobile, di solito faccio:
Codice: Seleziona tutto
const double epsilon = 0.0001;  //questa è la max differenza che ammetti per i tuoi calcoli, e la faccio come costante globale
double dbN1 = 0;
double dbN2 = 0;

  if(fabs(dbN1 - dbN1) < epsilon)
    ...


ah ecco, il concetto è quasi quello che ho fatto io, solo che il tuo è più elegante perchè fai il valore assoluto, ci avevo provato con abs() ma ho visto che me lo troncava ad intero, perciò avevo fatto il doppio confronto, solo ora che me lo hai ricordato ho capito che abs() va bene solo in c++ e in c si usa fabs().
Avatar utente
sya54M
Linux 3.x
Linux 3.x
 
Messaggi: 1434
Iscritto il: mer giu 06, 2007 13:44
Località: (Salerno)
Nome Cognome: Andrea P.
Slackware: 64-current
Kernel: 3.17.x
Desktop: KDE 4.14

Re: [C] lunghezza float [risolto]

Messaggioda metrofox » gio apr 15, 2010 15:23

La lunghezza di un double e': 8 byte, 64 bit
La lunghezza di un float e': 4 byte, 32 bit
La lunghezza di un int e': 4 byte, 32 bit
La lunghezza di un char e': 1 byte, 8 bit
La lunghezza di un void e': 1 byte, 8 bit
La lunghezza di un long e': 8 byte, 64 bit
La lunghezza di un short e': 2 byte, 16 bit



Quindi, tipi a 64bit ce ne sono 2 nei sistemi a 64bit(long e double), mentre sui sistemi a 32bit solo double.

Su un sistema a 64bit(slackware64-current-Mon Apr 5 03:06:19 UTC 2010).
Avatar utente
metrofox
Linux 2.6
Linux 2.6
 
Messaggi: 758
Iscritto il: gio ago 07, 2008 11:29
Slackware: slackware64-current
Kernel: 3.4.4-ck3
Desktop: FluxBox-1.3.1
Distribuzione: FreeBSD-8.1(amd64)

Re: [C] lunghezza float [risolto]

Messaggioda robbybby » ven apr 16, 2010 9:04

Per le dimensioni degli interi sulle varie piattaforme ho trovato questo:
http://stackoverflow.com/questions/3845 ... it-windows

Riassumendo qui:
Codice: Seleziona tutto
Type           Linux64  Win$ 64
char             8         8
short            16        16
int              32        32
long             64        32
long long        64        64
pointer          64        64
Avatar utente
robbybby
Linux 3.x
Linux 3.x
 
Messaggi: 1178
Iscritto il: sab dic 16, 2006 10:48
Località: Fra Trantor e Terminus
Slackware: 13.1 / 64 bit
Kernel: 3.3.x
Desktop: KDE 4.4.5

Re: [C] lunghezza float [risolto]

Messaggioda metrofox » ven apr 16, 2010 13:22

La lunghezza di un tipo dipende comunque dal tipo di processore, e sizeof è stato fatto apposta anche per motivi di portabilità, perciò si può anche fare un programma che tramite sizeof ne calcoli la dimensione di un tipo(in byte), come ad esempio:

Codice: Seleziona tutto
#include <stdio.h>

int main()
{

int lunghezza[8];
int i;

for(i=0; i<=7; i++){
   if (i == 0){
      lunghezza[i] = sizeof(double);
      printf("La lunghezza di un double e': \t%d byte\n", lunghezza[i]);
      }
   if (i == 1){
      lunghezza[i] = sizeof(float);
      printf("La lunghezza di un float e': \t%d byte\n", lunghezza[i]);
      }
   if (i == 2){
      lunghezza[i] = sizeof(int);
      printf("La lunghezza di un int e': \t%d byte\n", lunghezza[i]);
      }
   if (i == 3){
      lunghezza[i] = sizeof(char);
      printf("La lunghezza di un char e': \t%d byte\n", lunghezza[i]);
      }
   if (i == 4){
      lunghezza[i] = sizeof(void);
      printf("La lunghezza di un void e': \t%d byte\n", lunghezza[i]);
      }
   if (i == 5){
      lunghezza[i] = sizeof(long);
      printf("La lunghezza di un long e': \t%d byte\n", lunghezza[i]);
      }
   if (i == 6){
      lunghezza[i] = sizeof(short);
      printf("La lunghezza di un short e': \t%d byte\n", lunghezza[i]);
      }
   if (i == 7){
      lunghezza[i] = sizeof(size_t);
      printf("La lunghezza di size_t e': \t%d byte\n", lunghezza[i]);
      }
   }
return 0;
}


Basta compilare ed eseguire per vedere quanto vale un tipo specifico nel proprio processore.
Avatar utente
metrofox
Linux 2.6
Linux 2.6
 
Messaggi: 758
Iscritto il: gio ago 07, 2008 11:29
Slackware: slackware64-current
Kernel: 3.4.4-ck3
Desktop: FluxBox-1.3.1
Distribuzione: FreeBSD-8.1(amd64)

Precedente

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

cron