[C] lunghezza float [risolto]
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.
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.
- sya54M
- Master
- Messaggi: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- Desktop: KDE
- Località: (Salerno)
- Contatta:
[C] lunghezza float [risolto]
ciao, ho notato che con numeri a molti decimali, facendo con confronto con 0 mi risultano delle condizioni di 0.000000 e -0.000000 e nessuno di questi soddisfa l'uguaglianza a 0, mi è sembrato strano, ma pare che anche se non visualizza il settimo decimale con float, in realtà ne tenga conto.
a me andrebbe anche meglio fermarmi al terzo decimale per dire che sia uguale a 0, ma come faccio? sembra che vada all'infinito...
grazie mille per eventuali aiuti
a me andrebbe anche meglio fermarmi al terzo decimale per dire che sia uguale a 0, ma come faccio? sembra che vada all'infinito...
grazie mille per eventuali aiuti
Ultima modifica di sya54M il mer 14 apr 2010, 19:19, modificato 1 volta in totale.
- targzeta
- Iper Master
- Messaggi: 6631
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: [C] lunghezza float
Non ci ho capito molto, potresti fare un esempio? Al limite posta un po' di codice.
Emanuele
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- Ansa89
- Iper Master
- Messaggi: 2703
- Iscritto il: mer 29 ago 2007, 17:57
- Nome Cognome: Stefano Ansaloni
- Slackware: 14.2 64bit
- Kernel: 4.9.61
- Desktop: XFCE 4.12
- Località: Modena
Re: [C] lunghezza float
Moltiplica il numero da confrontare per 100 e convertilo a intero, poi lo confronti con zero.sya54M ha scritto:a me andrebbe anche meglio fermarmi al terzo decimale per dire che sia uguale a 0, ma come faccio? sembra che vada all'infinito...
grazie mille per eventuali aiuti
Comunque se il confronto fallisce vuol dire che almeno una cifra del numero da confrontare non è zero.
- Ansa89
- Iper Master
- Messaggi: 2703
- Iscritto il: mer 29 ago 2007, 17:57
- Nome Cognome: Stefano Ansaloni
- Slackware: 14.2 64bit
- Kernel: 4.9.61
- Desktop: XFCE 4.12
- Località: Modena
Re: [C] lunghezza float [risolto]
Alla fine come hai risolto?
- sya54M
- Master
- Messaggi: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] lunghezza float [risolto]
siccome non mi interessava una precisione a 6 decimali ma mi bastava anche a 3 o 4, ho aggirato il problema in questo modo:
ps: sto scrivendo un programmino per progetto e verifica di lunghe condotte (idraulica), la funzione per le tubazioni in serie l'ho appena finita
Codice: Seleziona tutto
while((Qan-Qnb) >= 0.0001 || (Qan-Qnb) <= 0.00001) {
...
if((Qan-Qnb) > 0)
Yn = Yn+0.01;
else if((Qan-Qnb) < 0)
Yn = Yn-0.01;
printf("deltaQ: %f\n", Qan-Qnb);
}
return Yn;
anche questa era una soluzione, ma ho già fatto, grazie comunqueAnsa89 ha scritto:Moltiplica il numero da confrontare per 100 e convertilo a intero, poi lo confronti con zero.
infatti, ma la cosa strana è che lo è una cifra fuori dal campo float perchè stampavo il confronto e risultava alternato (per via dei calcoli) 0.000000 e -0.000000Ansa89 ha scritto:Comunque se il confronto fallisce vuol dire che almeno una cifra del numero da confrontare non è zero.
ps: sto scrivendo un programmino per progetto e verifica di lunghe condotte (idraulica), la funzione per le tubazioni in serie l'ho appena finita
- Ansa89
- Iper Master
- Messaggi: 2703
- Iscritto il: mer 29 ago 2007, 17:57
- Nome Cognome: Stefano Ansaloni
- Slackware: 14.2 64bit
- Kernel: 4.9.61
- Desktop: XFCE 4.12
- Località: Modena
Re: [C] lunghezza float [risolto]
La mia soluzione era troppo sporca, molto meglio la tua.
Per caso stai lavorando su macchina a 64 bit (ricorda che la dimensione delle variabili cambia anche a seconda dell'architettura)?
Per caso stai lavorando su macchina a 64 bit (ricorda che la dimensione delle variabili cambia anche a seconda dell'architettura)?
- sya54M
- Master
- Messaggi: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] lunghezza float [risolto]
no no è a 32 bit... ma il tipo float dovrebbe creare variabili a 32 bit a prescindere no? come double a 64bit e int a 16bit...
o mi sbaglio?
o mi sbaglio?
-
- Linux 3.x
- Messaggi: 760
- Iscritto il: gio 7 ago 2008, 12:29
- Slackware: slackware64-current
- Kernel: 3.4.4-ck3
- Desktop: FluxBox-1.3.1
- Distribuzione: FreeBSD-8.1(amd64)
- Località: London
Re: [C] lunghezza float [risolto]
Puoi usare sizeof(); per vedere quanto vale un tipo nel tuo PC.sya54M ha scritto:no no è a 32 bit... ma il tipo float dovrebbe creare variabili a 32 bit a prescindere no? come double a 64bit e int a 16bit...
o mi sbaglio?
-
- Iper Master
- Messaggi: 3174
- Iscritto il: lun 3 set 2007, 21:20
- Nome Cognome: Mario Vanoni
- Slackware: 12.2
- Kernel: 3.0.4 statico
- Desktop: fluxbox/seamonkey
- Località: Cuasso al Monte (VA)
Re: [C] lunghezza float [risolto]
Scusa tanto, ma perche' non fai un cast su int,sya54M ha scritto:ciao, ho notato che con numeri a molti decimali, facendo con confronto con 0 mi risultano delle condizioni di 0.000000 e -0.000000 e nessuno di questi soddisfa l'uguaglianza a 0, mi è sembrato strano, ma pare che anche se non visualizza il settimo decimale con float, in realtà ne tenga conto.
a me andrebbe anche meglio fermarmi al terzo decimale per dire che sia uguale a 0, ma come faccio? sembra che vada all'infinito...
grazie mille per eventuali aiuti
vecchia regola UNIX e spiegato in K&R?
double a = 0.000000179;
if ((int) a == 0)
then
...
- sya54M
- Master
- Messaggi: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] lunghezza float [risolto]
perchè l'intero sarebbe sempre 0 e quindi mai verificata la condizione, mi servono 3 o 4 decimali.Mario Vanoni ha scritto:Scusa tanto, ma perche' non fai un cast su int,
si tratta del calcolo della portata in tubazioni a sezioni diverse collegate in serie, fatto con una procedura iterativa
- targzeta
- Iper Master
- Messaggi: 6631
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: [C] lunghezza float [risolto]
Perchè a lui interessa una precisione di 3 o 4 cifre da quello che ho capito. Con la tua vecchia regola anche (int) 0.2 è uguale a 0 e non si ha la pracisione voluta. Personalmente mi piace di più la soluzione di Ansa89 (leggila è vedrai che diceva la stessa cosa che vuoi dire tu, solo che con la sua si può scegliere la precisione).Mario Vanoni ha scritto:...
Scusa tanto, ma perche' non fai un cast su int,
vecchia regola UNIX e spiegato in K&R?
double a = 0.000000179;
if ((int) a == 0)
then
...
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
-
- Linux 2.x
- Messaggi: 397
- Iscritto il: sab 15 nov 2008, 2:28
- Nome Cognome: Pasquale
- Slackware: current
- Kernel: 2.6.35.7
- Desktop: KDE 4.5.2
Re: [C] lunghezza float [risolto]
float e duoble entrambe 8byte, ma float in virgola mobile (ieee 754) mentre double a virgola fissa!
- sya54M
- Master
- Messaggi: 1665
- Iscritto il: mer 6 giu 2007, 14:44
- Nome Cognome: Andrea Peluso
- Slackware: 64-current
- Kernel: ultimo
- Desktop: KDE
- Località: (Salerno)
- Contatta:
Re: [C] lunghezza float [risolto]
come dici tu float dovrebbe essere a 64bit (8bytex8) come double, ma:zxzxasas ha scritto:float e duoble entrambe 8byte, ma float in virgola mobile (ieee 754) mentre double a virgola fissa!
http://programmazione.html.it/guide/lez ... bili-in-c/
è chiaramente scritto che solo double è a 64bit
-
- Linux 2.x
- Messaggi: 397
- Iscritto il: sab 15 nov 2008, 2:28
- Nome Cognome: Pasquale
- Slackware: current
- Kernel: 2.6.35.7
- Desktop: KDE 4.5.2
Re: [C] lunghezza float [risolto]
Beh in effetti:
Ed effettivamente, lo standard (754) prevede sia 32 che 64 che 128 bit...
Sistema a 32 bit...pasquale@DarkStar:~$ cat index.c
#include <stdio.h>
main(){
int lunghezza;
lunghezza=sizeof(double);
printf("\nLa lunghezza di un double è %d byte",lunghezza);
lunghezza=sizeof(float);
printf("\nLa lunghezza di un float è %d byte",lunghezza);
}
pasquale@DarkStar:~$ gcc index.c -o index
pasquale@DarkStar:~$ ./index
La lunghezza di un double è 8 byte
La lunghezza di un float è 4 byte
Ed effettivamente, lo standard (754) prevede sia 32 che 64 che 128 bit...
- Ansa89
- Iper Master
- Messaggi: 2703
- Iscritto il: mer 29 ago 2007, 17:57
- Nome Cognome: Stefano Ansaloni
- Slackware: 14.2 64bit
- Kernel: 4.9.61
- Desktop: XFCE 4.12
- Località: Modena
Re: [C] lunghezza float [risolto]
Come anche la mia soluzione ha un piccolo problema: se il numero da convertire a int è 10^30, c'è un leggero problema di overflow; mentre con la soluzione di sya54M non ci sono problemi di questo tipo .Mario Vanoni ha scritto:Scusa tanto, ma perche' non fai un cast su int,
vecchia regola UNIX e spiegato in K&R?
double a = 0.000000179;
if ((int) a == 0)
then
...