PDA

View Full Version : [C] Divisione semplicissima.


cataleen
03-04-2007, 21:27
Ragazzi ma 10 / 7 e' 1.428571429, vero?

In C ho fatto questo programma

#include <stdio.h>

int main() {
float _number;
_number = 10 / 7;

printf("%f\n", _number);
}


Come mai mi da 1.000000 come risultato? L'IDE mi da anche questo messaggio "File.c:8: Warning: control reaches end of non-void function.". Grazie.

mapomapo
03-04-2007, 21:34
x.xxxxxx
è la formattazione %f

in pratica se tu chiami la funzione

printf("%f", variabile_float);

ti verrà sempre stampato a schermo un numero seguito da 6 cifre decimali

Vito

EDIT:
ops avevo letto male...prova a fare innanzitutto
float number;

poi metti le parentesi
number=(10/7);

e vedi che succede...scusami avevo male interpretato il quesito per questo all'inizio la risposta è diversa...

P P S
ho provato a compilare e mi dà lo stesso errore...ho provato a fare il cast esplicito a float e niente....
se però inserisco 10 e 7 in due variabili float distinte allora il tutto funziona :o

vizzz
03-04-2007, 21:41
Ragazzi ma 10 / 7 e' 1.428571429, vero?

In C ho fatto questo programma

#include <stdio.h>

int main() {
float _number;
_number = 10 / 7;

printf("%f\n", _number);
}


Come mai mi da 1.000000 come risultato? L'IDE mi da anche questo messaggio "File.c:8: Warning: control reaches end of non-void function.". Grazie.

prova con:
_number = 10.0 / 7.0;

loris_p
03-04-2007, 21:44
esatto..mettendo le parentesi e basta non ho ben capito cosa sarebbe dovuto cambiare :D
cmq il modo più elegante e più portabile tra i vari compilatori secondo me è fare il casting esplicito degli interi a float:
_number = (float)10/(float)7

loris_p
03-04-2007, 21:45
P P S
ho provato a compilare e mi dà lo stesso errore...ho provato a fare il cast esplicito a float e niente....
se però inserisco 10 e 7 in due variabili float distinte allora il tutto funziona :o
impossibile che non funzioni il casting esplicito..forse sbagli a farlo:)

mapomapo
03-04-2007, 21:51
impossibile che non funzioni il casting esplicito..forse sbagli a farlo:)

sì nella fretta non avevo fatto altro che castare a float l'espressione ovvero
(float)(10/7)....ma ovviamente restituisce 1.000000 :D

VIto

andbin
03-04-2007, 21:53
float _number;
_number = 10 / 7;
Ma i due operandi sono interi, pertanto è una divisione intera, non floating-point.

_number = 10.0f / 7;

oppure

_number = (float) 10 / 7;

In entrambi i casi il primo operando diventa float (quindi pure l'altro viene portato a float per eseguire la divisione).

cataleen
03-04-2007, 22:18
grazie a tutti. mi viene piu facile fare 10.0 / 7. grazie. ciao.

loris_p
03-04-2007, 23:01
attenzione però che il casting implicito non sarebbe una bella pratica, visto che è il compilatore e non l'utente che decide se castare l'altro int a float o viceversa introducendo quindi potenziali rischi di portabilità del codice sorgente tra diversi compilatori o tra diverse versioni degli stessi..

Ziosilvio
03-04-2007, 23:46
Ragazzi ma 10 / 7 e' 1.428571429, vero?

In C ho fatto questo programma

#include <stdio.h>

int main() {
float _number;
_number = 10 / 7;

printf("%f\n", _number);
}


Come mai mi da 1.000000 come risultato?
Alla riga 5, l'operando destro dell'assegnazione è un'espressione costituita da due costanti di tipo int e dall'operatore di divisione.
Tale espressione ha tipo int, e valore 1, perché il quoziente della divisione di 10 per 7 è 1.
Essendo l'operando sinistro di tipo float, il valore int 1 viene convertito nel valore float 1.0.
L'IDE mi da anche questo messaggio "File.c:8: Warning: control reaches end of non-void function.". Grazie.
Non hai messo un valore di ritorno a main, che è giustamente di tipo int.
Usa il valore 0 per indicare la terminazione corretta.