Ho modificato il listato così: double perc = (((double) a_part) / ((double) MOVE_MEMORY)) * 100.0; ...ma il risultato non cambia: stesso warning e stesso risultato (e anche con MingW nessuna novità: stesso comportamento corretto anche in compilazione). Marcello > > /*-------------------------------------------*/ > > > > #include <stdio.h> > > #define MOVE_MEMORY 150 > > > > unsigned int a_part = 40; > > > > int main(void) { > > float perc = > > (((float) a_part) / ((float) MOVE_MEMORY)) * 100.; > > printf("%f", perc); > > return 0; > > } > > > > /*-------------------------------------------*/ > > > > ...innanzitutto, perché ottengo un minaccioso warning? > > (sccz80:"test_fp.c" L:10 Warning:#27:Int constant in double > > expression) Ho anche castato a float... che cosa c'è di male? > > L'unica cosa che vedo io è che stai assegnando un double (il risultato > dell'operazione) ad un float con possibile perdita di precisione. > > > E poi, sebbene la compilazione non fallisca, ottengo un output che non > > mi spiego: > > 100.000000 > > (Il compilatore MingW, che è un GCC per Win32, ce la fa benissimo e mi > > stampa 26.666666) > > Un tentativo: prova a mettere "100.0" invece che "100.". Magari al compilatore > è indigesta quella notazione.