Newsgroup: it.comp.appl.access
Titolo: Access sbaglia le moltiplicazioni !?!?!?

Salve !
Avete mai provato a moltiplicare un campo "Intero lungo" * un campo a
"Precisione singola" ??
Secondo voi la moltiplicazione di 5*1,1 che risultato dovrebbe produrre ?
Secondo me il risultato dovrebbe essere 5,5.
Secondo Access 5,50000011920929
E' pazzesco non ci posso credere !! Ho provato e riprovato ma il risultato
tra questi due tipi di numeri da risultati ERRATI !!!!
Secondo voi cosa succede ???
Buon lavoro a tutti !!



succede che il campo intero viene convertito in un campo a precisioe
singola, e quindi moltplichi 2 campi reali, che sono una
rapresentazione binaria dei tuoi numeri. essendo una rapresentazione
binaria composta da un numero limitato di bit, la precisione è
limiata, e non è detto che per un numero preciso in base 10 (come 5,5)
ne esista uno corrispondete in base 2, quindi il tuo numero preciso in
base dieci viene aprossimato alla sua rapresentazione binaria più
simile, che in questo caso risulta essere 5,50000011920929.
se vuoi un numero più preciso prova ad usare la precisione doppia :-)
Ciao, Max

Scusate ma quando uno scrive una applicazione queste cose dove sono scritte
nel microsoft Book???
Che gran Cavolata

nel microsoft Book???
sono scritte nei manuali di programmazione, ed in quelli dei
coprocessori matematici :-)
ciaol, Max

 wrote in message
393e551c...@news.interbusiness.it...

Scusate ma a me sembra una cavolata in nessun manuale di access c'è scritto
di non moltiplicare un numero intero per uno con precisione doppia e di
stare attenti al risultato.
Cavolata alla ennesima potenza (attenzione al risultato può essere
sbagliato)

sbagliato)
non so cosa dicano i manuali di acces, ma le moltiplicazioni con
numeri a precisione singola e doppia vengono fatte dal coprocessore
matematico, e quello funziona cosě.
i numeri reali (con la virgola) sono rapresentati tramite un numero
binario nel coprocessore matematico (ed anche nella memoria del PC)
non č detto che per un numero preciso in base 10 ne esista una
rapresentazione precisa in base 2 (binaria), quindi un numero preciso
in base 10 puň essere leggermente diverso in base 2, infatti quello
che magari č 5,5 in base 10, diventa 5,5000000000xxxxx in base 2.
ribadisco, cosě funzionano i coprocessori matematici e le
rapresentazioni in precisione singola e doppia.
ciao, max :-)

 stare attenti al risultato.
Certo, perche' non e' access che 'sbaglia' le moltiplicazioni.
Inoltre se stai lavorando ad un progetto dove la precisione di calcolo e'
fondamentale, si presuppone che tu oltre a conoscere bene i tipi di dati e come
usarli, sappia anche cosa succede quando fai delle conversioni di tipo
(esplicite o implicite).
Bye
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------

Se posso dire anche la mia riguardo alla questione della precisione.
E' un fatto che da sempre appena ti discosti dalle variabili intere, hai di
questi problemi. Questo da sempre perché appunto come detto dagli altri
prima, è una questione di come lavora i numeri il microprocessore. E
malgrado vari progressi per garantire operazioni a esito "intero" con numeri
interi, il risultato è sempre lo stesso.
Quindi finché non è vitale, nel senso che il programma non genera errori,
allora non c'è bisogno di trafficare con int o fix per garantire l'integrità
del numero. Se no, le operazioni devono, se non si può fare altrimenti,
usare quei accorgimenti.
Ciao
Thierry