Newsgroup: it.comp.lang.visual-basic
Titolo: [info] a proposito di double

volete farvi due risate?
provate questo codice, e traete le vostre deduzioni.
Private Sub Command1_Click()
Dim V#(7)
Dim A#, B#, C#, D#, I%, AI#
    AI# = 20
    V#(0) = 19.2
    V#(1) = 6#
    V#(2) = 144.24
    V#(3) = 10#
    V#(4) = 30.16
    V#(5) = 4.34
    V#(6) = 32.23
    V#(7) = 22#
    A# = V#(0) + V#(1) + V#(2) + V#(3) + V#(4) + V#(5) + V#(6) + V#(7)
    B# = 0
    For I% = 0 To 7
        B# = B# + V#(I%)
    Next I%
    C# = 0
    For I% = 7 To 0 Step -1
        C# = C# + V#(I%)
    Next I%
    D# = V#(7) + V#(6) + V#(5) + V#(4) + V#(3) + V#(2) + V#(1) + V#(0)
    A# = A# / (1 + AI# / 100)
    B# = B# / (1 + AI# / 100)
    C# = C# / (1 + AI# / 100)
    D# = D# / (1 + AI# / 100)
Debug.Print A#, Int(A# * 100 + 0.5) / 100; "Esatto :)"
Debug.Print B#, Int(B# * 100 + 0.5) / 100; "Sbagliato :("
Debug.Print C#, Int(C# * 100 + 0.5) / 100; "Esatto :O"
Debug.Print D#, Int(D# * 100 + 0.5) / 100; "Esatto :O"
End Sub

 
Ho provato (VB6 SP5 win98SE), ma non mi viene da ridere ... ;-(
sigh
		maxx


ne ero certo!
c'e' da piangere ...
roberto
p.s.: (VB6 SP5 W2K)

c'e' da piangere ...
Piu' che altro c'e' da studiare :-(
Mi riferisco alla rappresentazione interna del Double ed alla
conversione tra numeri su base 10 (come li intendiamo noi umani)
e numeri su base 2 (come li intendono i processori).
Prova un po' a giocare con la calcolatrice di windows
in modalita' scientifica, passando da Dec a Bin con in
numeri decimali.
Su questo ng se ne e' parlato parecchio anche di recente,
prova farti un giro su google.
Anche msdn tratta l' argomento.
A proposito, se vuoi far funzionare la funzione che hai postato,
sostituisci i Double con i Decimal ;-)
-- 
ciao, hal

aggiungo:
----> e' un giochetto che converte un valore esadecimale in decimale
a virgola mobile:
Decompose IEEE Floating Point Number
http://www.markworld.com/showfloat.html
----> spiega come e' fatto un Double
IEEE Floating-Point Representation
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_IEEE_Floating.2d.Point_Representation_and_Microsoft_Languages.asp
----> il titolo e' chiaro ;-)
Why Floating-Point Numbers May Lose Precision
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_why_floating_point_numbers_may_lose_precision.asp
-- 
ciao, hal

 Roal Zanazzi
il problema, che volevo segnalare non e' quello della rappresentazione
dei floating point,  che conosco bene, ma il comportamento della funzione
Int().
ma questo lo si poteva capire solo facendo girare l'esempio.
lo stile in cui ho scritto il codice del messaggio era quello piu' sintetico
possibile.
in quanto all'uso del tipo Decimal: peccato che non si possano
dimensionare variabili.
roberto

dimensionare variabili.
Dim a As Variant
a = CDec(0)
... adesso a e' un Decimal ;-)
-- 
ciao, hal

 ciao, hal
se si tratta di codice nuovo sono d'accordo con te.
il problema e' fare quel tipo di modifica su codice pre-esistente.
se poi il programma e' composto circa 700 file FRM e 250 BAS
lo sconforto e' totale.
roberto

lo sconforto e' totale.
Ah, capisco, sono passato anch' io da esperienze simili :-(
Mi sono quasi riscritto interi programmi (inserendo delle classette
furbe dove ho potuto, pero' ;-)
In bocca al lupo ;-)
-- 
ciao, hal

 In bocca al lupo ;-)
chi risponde "crepi il lupo" gli mando i fioretti di san francesco scanditi
in tiff non compresso :)
j.lupoide

 j.lupoide
G.Paperoide ?

 E figuriamoci Lupo cosa gli manda, allora...
Me lo slurpo, arf-arf, me lo mordicchio, arf-arf, me lo assimilo, arf-arf.
Blop-blop (pardon).

> curiosita': quanto stazza in ram un oggetto simile ?
5 exe di circa 1,4 Mb l'uno (alcuni file sono in piu' exe)
roberto

 5 exe di circa 1,4 Mb l'uno (alcuni file sono in piu' exe)
Beh, mi sento una merdaccia, mi spieghi come hai fatto?
Il mio gestionale è fatto di 3 EXE per procedura, normalmente solo uno per
ogni procedura è in RAM, ma altrettanto normalmente almeno 3 procedure sono
aperte:
Base, 4/5 Mb
Contabilità 7/8 Mb
Magazzino 9/10 Mb.