[zxspectrum] Re: z88dk e artirmetica floating point... ho trovato un'anomalia?

  • From: Marcello Zaniboni <marcello.zaniboni@xxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Tue, 18 Oct 2005 18:45:18 +0200

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.

Other related posts: