Il lunedì 19 maggio 2008 14:20:48 SG ha scritto: > jack ha scritto: > > E' questo che mi lascia perplesso: lo step 3 altro non e' se non l' "Int" > > (od il "Fix") del valore di ritorno di step 2 che e' "555"...perche', > > invece, si ha "554"? > > Ciao jack, > ha ragione ... c'è qualcosa che non va. > > Al volo non mi era sembrato strano avere 554 come ritorno di INT( > operazione che da come risultato quasi 554,xxxxxxx e qualcosa) perchè > poteva non esser vero che.... (come dicevi qualche messaggio fa) > > /"In teoria son tutti double, quindi non dovrebbero esserci errori di > conversione " /
Invece secondo me si tratta proprio di un problema di conversione Bisogna ricordarsi che il computer ragiona sempre in binario quindi con le potenze del 2 Quando si tratta di numeri con la virgola quindi, il pc ragiona sempre con le potenze del 2 ma esponenti negativi (ovviamente) Ad esempio, 0.5 è uguale a (1*2^-1), perciò in base 2 si scriverà 0.1 allo stesso modo 0.625 si scriverà 0.101 (base2) ovvero 1*(2^-1) + 0*(2^-2) + 1*(2^-3) Per scrivere 0.555 in forma binaria con una precisione arbitraria però, servirebbe un numero infinito di decimali (forse sarebbe meglio chiamarli "binariali"?) dato che nella conversione il numero diventa periodico. Questo capita molto spesso nelle conversioni dei numeri con la virgola. La precisione arbitraria però non può esistere nel computer, perciò ad un certo punto le cifre binarie dopo la virgola vengono troncate. Quando viene effettuata la conversione inversa, da binario a decimale, avremo perciò che il nostro 0.555 iniziale sarà diventato .55499999999...eccetera Ovviamente moltiplicando per 1000 e troncando i decimali ti ritroverai con un 554 In sostanza, per tener conto di questo problema dovresti effettuare *prima* le moltiplicazioni, e solo dopo la divisione. Oppure, lavori sulla rappresentazione testuale del numero. ciao Paolo M --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
