Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Problema calcoli Double
Forum - Visual Basic 6 - Problema calcoli Double

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 18:26
Giovedì, 08/10/2009
Ok, mi arrendo... Perchè il tipo di dati Double mi da risultati sbagliati se i due numeri, per esempio in una sottrazione, hanno diverso numero di decimali? Non è che mi piaccia molto questa cosa...


//EDIT: Rettifico, anche con lo stesso numero di decimali, ma non ho ancora capito con quale logica. Per esempio, 22,22 - 22,24 risulta 9,99999999999979E-03. Non mi torna particolarmente.

Ultima modifica effettuata da ilmettiu il 08/10/2009 alle 18:28
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 19:41
Giovedì, 08/10/2009
Sono errori caratteristici derivanti dalla rappresentazione binaria dei valori decimali.

Non derivano da questo o quel linguaggio, ma dal tipo di rappresentazione usata.

PM Quote
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 20:22
Giovedì, 08/10/2009
Che cu*o... In sostanza, il risultato è sbagliato o sono io che non lo so leggere?

EDIT: moderiamo le parole, cmq il risultato non è sbagliato xD

Ultima modifica effettuata da GrG il 08/10/2009 alle 20:25
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 23:30
Giovedì, 08/10/2009
Ripeto ... e' un problema della rappresentazione, non un tuo errore o un tuo esclusivo problema.

Il risultato e' sbagliato ma deriva, appunto, dalla rappresentazione binaria con un numero di decimali limitato.

Per capirci, anche in decimale esistono problemi simili ... ad esempio

1 / 3 fa 0,33333

ma se fai 0,33333 x 3 non avrai 1 (e neanche se aggiungi altri decimali) ... allora, dimmi, e' il risultato giusto?

Puoi rimediare visualizzando il risultato tramite la Format che approssima in modo corretto aggirando il problema ...

P.S. L'esempio che hai fatto, forse, non e' quello corretto ...


PM Quote
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 0:05
Venerdì, 09/10/2009
Inizialmente ho rimediato con Round, ma qualche volta da risultati ancora più assurdi, e allora non c'è niente da fare -.-" Sto continuando il programma utilizzando Single, ma ovviamente non è la stessa cosa. Cosa intendi con l'ultima frase? I valori che ho preso non sono teorici: Sono quelli che ho provato al primo inserimento, e su cui di conseguenza mi sono impuntato :) E ho ricopiato pari pari il risultato. Faccio qualche altra prova e cerco di trarne una regola generale. Perchè magari sei riuscito a farmi capire in che cosa consiste il problema, ma la funzione Format non è una soluzione (come neanche Round o utilizzare il tipo Single): Sono tutti provvedimenti provvisori, perchè non danno la precisione che mi serve. Grazie per la delucidazione, se trovo una soluzione definitiva la posto qui :k:

Ultima modifica effettuata da ilmettiu il 09/10/2009 alle 0:06
PM Quote
Avatar
Alfonso (Ex-Member)
Guru


Messaggi: 688
Iscritto: 30/09/2009

Segnala al moderatore
Postato alle 9:36
Venerdì, 09/10/2009
Usa Currency

ci sono miglioramenti.

PM Quote
Avatar
GrG (Member)
Guru^2


Messaggi: 3430
Iscritto: 21/08/2007

Segnala al moderatore
Postato alle 9:52
Venerdì, 09/10/2009
Testo quotato

Postato originariamente da theprogrammer:
Il risultato e' sbagliato ma deriva, appunto, dalla rappresentazione binaria con un numero di decimali limitato.



lol non pensavo... :-|

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 11:43
Venerdì, 09/10/2009
Per rimediare, prova ad usare il tipo Variant sottotipo Decimal.

L'esempio che hai fatto era

22,22 - 22,24 = 9,99999999999979E-03

ma non mi pare sia giusto ...

PM Quote
Avatar
ilmettiu (Ex-Member)
Pro


Messaggi: 88
Iscritto: 17/09/2009

Segnala al moderatore
Postato alle 14:43
Venerdì, 09/10/2009
Il risultato effettivamente è stato diviso per 2, mi scuso per la svista :) Comunque ho verificato che è proprio la sottrazione a dare problemi. E Currency, cosa sarebbe? Un tipo di dati? Comunque non son capace di usare Decimal, avevo già provato in un altro programma:
Qui http://msdn.microsoft.com/en-us/library/xtba3z33.aspx viene dichiato tranquillamente, ma a me dà "tipo definito dall'utente non definito".

Per il resto, applicando un po' meglio la funzione Round sono riuscito a correggere tutti gli errori. Il problema è che non sono sicuro al 100% di aver fixato i risultati anomali per ogni possibile valore di minuendo e sottraendo. Per ora non ho trovato valori che impallino tutto, ma non so come escludere che ce ne siano.

Ultima modifica effettuata da ilmettiu il 09/10/2009 alle 14:43
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo