Newsgroup: it.comp.lang.visual-basic
Titolo: HELP! Ma che precisione!!

C'e' qualche possibilità di migliorare la precisione dei calcoli in VB?
Lavorando ad una idea e ottenendo dei risultati errati.... ho fatto delle
prove e...
guardate cosa mi succede con un poco di trigonometria ed un semplice
triangolo rettangolo... :-(
Dim a As Double, b As Double, c As Double, beta As Double, alfa As Double
a = 1	'fisso la lungheza di un cateto del triangolo
piGreco = 4 * Atn(1)	'Valore di PiGreco in gradi radianti
Beta = piGreco / 4  'fisso un angolo a 45 gradi.. che comunque corrisponde
a Atn(1)
'Dato l'angolo ed un cateto, determino l'altro cateto del triangolo (che
deve essere = 1)
b = a * Tan(beta)
Ed ecco i fantastici risultati!!
Debug.print  b              'Avendo il triangolo due lati a 45 gradi, print
restituisce, com'e' giusto che sia, b=1
Debug.print  b = 1       'restituisce FALSO!!  Quindi c'e' uno scarto... il
vero valore di b non e' 1
Debug.print  fix(1)       'restituisce 0 :-(
Debug.print  int(1)       'restituisce 0 :-(((
Debug.print  fix(b) / b  'restituisce un numero inferiore a 1!! Confermato
quindi che b <> 1
Conseguentemente, se utilizzassi quel valore di b per ricalcolare l'altro
cateto oppure l'ipotenusa, otterrei dei risultati, anche se di poco,
errati.
Ma che felicità  :-(((
Qualche idea??
-- 
Ciao da MioMao!
---------------------------------------------------
+++++  Visita la mia CasaPagina! +++++
++++ 
http://www.digibank.it/miomao
 ++++

Ciao,
senza andare a cercare il pgreco e i triangoli guarda questo codice:
*************************
Dim n As Double
Dim t As Double
n = 0.14
t = 0.02 - (n - 0.12)
MsgBox t
scommessa t sarà uguale a 0????????
****************************************
MioMao wrote in message <01be542d$d02b1b20$9a9d85c2@katiariva>...


 wrote in message 79pj66$e8c$1...@nslave1.tin.it...

Mi sembra che questa discussione sia un po' fuori binario.
--
Ciao.
Maurizio

> Mi sembra che questa discussione sia un po' fuori binario.
La mia, la sua o la tua?  :-)


 Infatti la base è decimale...
Spiegare.. spiegare a me che io capire e poi imparare, pliz!
'Azzie! :-)


errati.
Non vorrei dire una boiata (a me non è mai successo, non di dire boiate, la
storia sugli arrotondamenti, probabilmente perchè evito sempre se possibile
di usare valori a virgola mobile) ma dev'essere a causa della natura dei
Double:
Un double anche se lo imposti a 0 in realtà ha intrinseco un'arrotondamento
essendo un numero reale e non naturale, il che puo' portare a volte ad
approssimazioni.
Invece di usare fix e int usa CInt() CLng() che sono più appropriate per le
conversioni ad intero.
Ciao.

 conversioni ad intero.
Sempre cortese il Zanna! :-)
Ti ringrazio, faccio delle prove.... e poi torno (aaaargh!)  :-)))


'Azzie! :-)
Scusa se ho tardato. In realta' non avevo nessuna intenzione di rispondere
in quanto *non* so rispondere o, almeno, non lo so fare con la *precisione*
che vorrei. Speravo che intervenisse qualcuno piu' dotato di me perche'
l'argomento lo merita. Purtroppo siamo finiti in un *binario* morto (insisto
con l'uso e l'abuso di questa parola perche' e' la chiave di tutto e nelle
mie intenzioni doveva far accendere piu' di qualche lampadina ;).
Si', la base e' decimale, ma i numeri vengono convertiti in binario e
riconvertiti in decimale (ed in virgola mobile!). Questo va e vieni produce
l'"errore" da te osservato. In realta' *prima* di usare un (qualsiasi)
linguaggio di programmazione bisogna individuarne la precisione ed in ogni
espressione, in cui sia necessario, aggiungere l'opportuna correzione. Come?
Qui casca l'asino (io). L'argomento dovrebbe essere trattato in un qualsiasi
libro sui linguaggi di programmazione. Se riesco a trovare il tempo ne pesco
uno e condivido.
--
Ciao.
Maurizio

La mia, la sua o la tua?  :-)
Per discussione intendo una (e una sola) conversazione fra piu'
partecipanti, quindi non so rispondere alla domanda. Scusa la precisione.
--
Ciao.
Maurizio

Sempre cortese il Zanna! :-)
Beh, nella vita le cose vanno fatte con un po' di stile.
Se poi nella vita programmi la cosa è un'obbligo.
Ciao.