Newsgroup: it.comp.lang.visual-basic
Titolo: VB ha bisogno di ripetizioni....

Prima di procedere premetto che questa routine č stata provata su un Pentium
III e su un Atlon e da gli stessi risultati (quindi i famosi bug dei Pentium
non dovrebbero essere la causa).
Mi dite se eseguite questo codice che cosa vi fa vedere la finestra
immediata?
   Dim sngIdx As Single
   For sngIdx = 0 To 10 Step 0.1
      Debug.Print sngIdx
      Debug.Assert sngIdx <> 9.9
   Next sngIdx
A me l'asserzione non si verifica e quindi il fatto che ad un certo punto
vengono fuori cifre con 6 cifre decimali non č un problema da imputare
all'errata visualizzazione del valore ma č proprio il valore contenuto che č
cosě.
Che ne pensate?
Dario Di Marino

 non dovrebbero essere la causa).
Prova a dare un occhiata ad un thread di due settimane fa, il titolo era
"30,7 - 30 = 0,6999999999      xche????"
A proposito di ripetizioni, ti ri-riporto una parte del messaggio di hal
<citazione>
Come giustamente rilevato, le limitazioni dei tipi in virgola mobile
sono fisiche e non dipendono dalla follia di qualche ingegnere
dell' Intel.
Su MSDN ci sono tre articoli che aiutano a schiarirsi le idee ed
approfondiscono i concetti gia' esposti da danilo e Mauro:
1.
HOWTO: Work Around Floating-Point Accuracy/Comparison Problems
Q69333
http://support.microsoft.com/support/kb/articles/Q69/3/33.ASP
da cui estraggo questo incipit:
To reliably test whether two floating-point variables or expressions are
equal
(using IEEE format or MBF), you must subtract the two variables being
compared
and test whether their difference is less than a value chosen at the limits
of significance for single or double precision.
NO OTHER TEST FOR EQUALITY WILL BE RELIABLE.
2.
INFO: IEEE Floating-Point Representation and MS Languages
Q36068
http://support.microsoft.com/support/kb/articles/Q36/0/68.ASP
3.
(Complete) Tutorial to Understand IEEE Floating-Point Errors
Q42980
http://support.microsoft.com/support/kb/articles/Q42/9/80.ASP
 hth, hal
</citazione>
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 ha scritto nel messaggio
news:aa3lgi$5n8$1...@fe2.cs.interbusiness.it...



C'è poco da pensare il problema è che usi un single
Preso da MSDN
Levariabili di tipo Single (con virgola mobile a precisione singola) sono
memorizzate
come numeri IEEE di 32 bit (4 byte) compresi nell'intervallo
fra -3,402823E38 e -1,401298E-45 per i valori negativi e
fra 1,401298E-45 e 3,402823E38 per quelli positivi.
Ilcarattere di dichiarazione del tipo per Single è il punto esclamativo (!).
In virgola mobile a 32 bit IEEE754 dovrebbe essere la rappresentazione del
tipo:
                    1 10000000 11000000000000000000000
Bit 31  = segno
Bit 23-30=Esponente
Bit 22-00=Mantissa
0.1 non è rappresentabile esattamente in binario diventa approssimato,
se usi invece un double precision avrà non 23 ma 54 bit per rappresentare
la mantissa aumentando notevolmente la precisione,
nota bene che in ogni caso il numero memorizzato nella memoria del
calcolatore
non è esattamente 0.1
Ti faccio un controesempio
Dim a As Single
Dim b As Double
a = 0.1
b = CDbl(0.1)
MsgBox   b - a
Secondo te quanto viene 0?
Provalo
    Fammi sapere
                                            danilo

Ok, non viene 0, a questo punto la mia domanda sorge spontanea: Cosa uso per
reppresentare l'euro con 4 decimali?

 reppresentare l'euro con 4 decimali?
Currency? ;)

 ha scritto nel messaggio
news:aa3rhg$1q42$1...@half.spin.it...

mmmmm...ma non avevi segnalato un comportamento strano?...eh eh! :-) ciauz!


Currency.
Ciao
Gianluca

 mmmmm...ma non avevi segnalato un comportamento strano?...eh eh! :-)
ciauz!
Ma non ha detto che intende usarlo sotto XP! ;-)
E poi il comportamenteo strano è della ccur non del tipo di dato! ;)