PDA

View Full Version : [C] problema con i float per windows 7 a 64 bit


peppozzolo
05-09-2010, 09:10
Il problema e piu o meno questo:
ho seven a 64 bit e praticamente ogni programma che scrivo che includa float anche per una semplice divisione mi da sempre risultati con la parte decimale uguale a zero
conoscete un modo per risolvere?
ps uso devc++ 4.9.9.2

tuccio`
05-09-2010, 09:12
se hai scaricato Dev-C++ con il compilatore integrato è una roba del paleolitico.. prova a scaricare l'ultima versione di MinGW e usare quella

peppozzolo
05-09-2010, 09:59
lo so ma purtroppo al'uni mi dato questo e non posso scappare

ps adesso ho provato anche su xp a 32 bit e mi rida il problema
#include<stdio.h>
#include<stdlib.h>

main(){
float x;
x=4/3;
printf("%f",x);
system("pause");
}

anche facendo una cosa cosi stupida mi dovrebbe uscire tipo 1,qualcosa ma esce sempre e solo 1(anzi 1.0000000)

tuccio`
05-09-2010, 10:33
perché quando ha due interi il C fa la divisione intera (quella con resto)

se invece di x = 4/3 scrivi x = 4.0f / 3.0f ti dà il risultato corretto

peppozzolo
05-09-2010, 10:44
perché quando ha due interi il C fa la divisione intera (quella con resto)

se invece di x = 4/3 scrivi x = 4.0f / 3.0f ti dà il risultato corretto

grazie per l'aiuto ma per capire un po meglio cos'e quella f

e poi se avessi due variabili al posto di 4 e 3 come faccio ad avere un risultato reale?

tuccio`
05-09-2010, 10:47
la f serve a specificare che è una costante float e non intera

se avessi

int a = 4, b = 3;

basterebbe castare a float

float x = (float)a/b;

oNaSsIs
05-09-2010, 10:56
Prova questo:

#include<stdio.h>
#include<stdlib.h>

main(){
float x;
x=4.0/3.0;
printf("%f",x);
system("pause");
}


se scrivi solo 4 anzichè 4.0 viene eseguita una divisione tra interi che poi viene salvata in un float, ma se l'intero vale 1 allora il float vale 1.000000.
Scrivendo invece 4.0 e 3.0 la divisione viene fatta tra float e quindi il risultato è un numero decimale...

peppozzolo
05-09-2010, 11:06
grazie a tutti ragazzi adesso e molto chiaro alla fine per cavarsela in questa casi basta solo imporre al compilatore il tipo di risultato che si vuole ottenere quindi mi sa che la soluzione migliore e l'operazione di cast