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


-----Messaggio Originale----- Da: "Marcello Zaniboni" <marcello.zaniboni@xxxxxxxxx>
A: <zxspectrum@xxxxxxxxxxxxx>
Data invio: martedì 18 ottobre 2005 18.23
Oggetto: [zxspectrum] z88dk e artirmetica floating point... ho trovato un'anomalia?



Ciao a tutti
In previsione degli ultimi ritocchi al giochino AITTT, nel tempo perso
sto provando un po' a giocare con z88dk. Ho trovato però qualcosa di
strano: se compilo il seguente programmino

/*-------------------------------------------*/

#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.


EMG

--
EMAG Software Homepage: http://www.emagsoftware.it
The EMG's ZX-Spectrum Page: http://www.emagsoftware.it/spectrum
The Best of Spectrum Games: http://www.emagsoftware.it/tbosg
The EMG Music page: http://www.emagsoftware.it/emgmusic



Other related posts: