Newsgroup: it.comp.lang.visual-basic
Titolo: precisione singola

cosa significa che in visual basic ci sono i tipi di dati a precisione 
singola (solo 7 cifre sono precise ) e a precisione doppia  ?
Cioč se ad es.  ho un numero a precisione singola 12.345.678,97   vuol dire 
che il valore 8,97  puň essere piů o meno preciso : quindi anche il numero 
12345679,01 potrebbe  andare bene .
chi mi spiega sta cosa  della precisione?
grazie e ciao 

 grazie e ciao
Microsoft® Visual Basic® for Applications (VBA) provides two
floating-point data types, Single and Double. The Single data type
requires 4 bytes of memory and can store negative values between -3.402823
x 1038 and -1.401298 x 10-45 and positive values between 1.401298 x 10-45
and 3.402823 x 1038. The Double data type requires 8 bytes of memory and
can store negative values between -1.79769313486232 x 10308 and
-4.94065645841247 x 10-324 and positive values between 4.94065645841247 x
10-324 and 1.79769313486232 x 10308. 
The Single and Double data types are very precise — that is, they make it
possible for you to specify extremely small or large numbers. However,
these data types are not very accurate because they use floating-point
mathematics. Floating-point mathematics has an inherent limitation in that
it uses binary digits to represent decimals. Not all the numbers within
the range available to the Single or Double data type can be represented
exactly in binary form, so they are rounded. Also, some numbers cannot be
represented exactly with any finite number of digits — pi, for example, or
the decimal resulting from 1/3.
Because of these limitations to floating-point mathematics, you might
encounter rounding errors when you perform operations on floating-point
numbers. Compared to the size of the value you are working with, the
rounding error will be very small. If you do not require absolute accuracy
and can afford relatively small rounding errors, the floating-point data
types are ideal for representing very small or very large values. On the
other hand, if your values must be accurate — for example, if you are
working with money values — you should consider one of the scaled integer
data types.
I numeri sono memorizzati sotto forma di mantissa ed esponente.
Quello che ci perde è proprio la precisione nella memorizzazione infatti
vengono fatte continue conversioni del numero in esponente / mantissa e
viceversa con grossi problemi di arrotondamento, problemi che si fanno
sentire quando hai la necessità di conservare valori precisi.
Quello che ti posso dire con certezza per prove personali (lo dice anche
l'help) è che non tutti i numeri possono essere rappresentati.
Una semplice prova: definisci un campo single o double (su access) e
memorizzaci sopra una serie di valori interi di almeno 12 cifre e poi
goditi il risultato :)), vedrai che alcuni valori saranno conservati ed
altri invece arrotondati.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 chi mi spiega sta cosa  della precisione?
In pratica tu hai a disposizione solo un certo numero di cifre, puoi anche 
rappresentare numeri che come cifre superano quelle a disposizione, ma 
saranno solo elevati a potenza quindi non avrai precisione in quanto oltre 
le cifre a disposizione le altre saranno zeri.
ad esempio con 7 cifre
puoi rappresentare precisamente un numero di questo tipo
1234,567
o 1234567
ma non uno di questo tipo
123456789,12
che in realtà si trasformerà in
123456800,00
proprio perchè le cifre a tua disposizione sono solo 7
lo puoi anche provare
apri un progetto vuoto
inserisci
Option Explicit
Private Sub Form_Load()
Dim a As Single
a = 123456789.123
MsgBox Format(a, "000000000.000")
End Sub
e lancialo, constaterai il fenomeno con i tuoi occhi
(in realtà il concetto è che vb immaganizza il dato in modo esponenziale, e 
questo crea anche dei casini nei calcoli o quando memorizzi i dati su access 
quando devi essere preciso...)
il mio consiglio è di usare decimal o currency.
-- 
 "Io non mi iscriverei mai ad un club così miserabile da accettare tipi
come me tra i suoi iscritti."
David Ruscelli