2008/5/20 Paolo Mantovani <[EMAIL PROTECTED]>: > 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
Credo di aver capito il problema e ti ringrazio della risposta precisa e dettagliata :) Sulla rappresentazione "testuale" c' e' un bell' esempio nel codice del seguente link: http://www.oooforum.org/forum/viewtopic.phtml?t=29932&highlight=round Ciao e grazie ancora :)
