Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    precisione in VB.NET

    Salve a tutti.
    Ho problemi di precisione in un programma che sto sviluppando in VB.NET.
    Ho notato che la "semplice" espressione (x+y)^2 da problemi...
    Mi spiego:
    -le due variabili sono dichiarate DOUBLE con x che vale 8500000 ed y che dovrebbe variare nel loop di programma, ma io l'ho fissata a 30.
    -ho fatto scrivere il risulatato dell'espressione in un file, ed ho notato che il valore è diverso da quello che dovrebbe essere. MI SPIEGO: nel file il valore che scrive è 72250510278656.0, MA IL VALORE CHE MI DOVREBBE DARE E' 72250510000900.0!!!!!
    Perchè?Come faccio ad avere il risultato giusto?

    Spero in un Vostro aiuto, saluti, Teo.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mostra esattamente il codice che hai usato ...

  3. #3
    Il mio codice è composto da un main che looppa a 10ms. Al suo interno è chiamata una funzione che prende come variabili di ingresso x e y e calcola (x+y)^2.
    In altri termini (codice in versione semplificata)

    public dim ris as double

    sub main()
    dim x as double=8500000
    dim y as double=30
    ...
    call func(x,y)
    ...
    end sub

    public sub func(byval x as double, byval y as double)
    ...
    ris=(x+y)^2
    ...
    end sub


    La cosa bella è che se mettessi un breakpoint sulla riga dove calcolo ris, il risultato di (x+y)^2 è quello giusto, ma quello che viene assegnato a ris, è quello sbagliato (approssimato?).
    Ho notato anche che se scrivessi
    ris=(8500000+30)^2
    la variabile ris avrebbe il valore corretto!!!!
    Grazie della collavorazione, Teo

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cosi' come hai proposto il codice, il risultato e' corretto.

    Probabilmente commetti un errore nel salvare su file tale valore ... ma non hai mostrato il codice e quindi non posso darti altri suggerimenti ...

  5. #5
    Ho utilizzato la scrittura nel file solo per debugging.
    In realtà, se metto un breakpoint dove calcola il risultato, noto una cosa stranissima:
    -il valore assegnato a ris (risultato dell'operazione ris=(x+y)^2 ) è sbagliato. (72250510278656.0)
    -se però evidenziassi (x+y)^2, posizionandoci sopra il mouse, il valore che vb mi da è quello corretto!!! (72250510000900.0)

    Io mi chiedo, perchè il valore a secondo membro è quello che voglio, ma vb restituisce in ris uno sbagliato? Le variabili sono tutte double!

    Spero che mi diate un aiuto, grazie, Teo.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non e' che esiste piu' di una dichiarazione della variabile ris?

    A me, dato il codice che hai mostrato, il problema non si presenta.

    Non so come darti una mano in piu' ... forse vedendo tutto il codice presente nella sub func ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.