Risultati da 1 a 5 di 5

Discussione: Precisione Excel vs VBA



  1. #1
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    525
    Versione Office
    2010 - Win10
    Likes ricevuti
    63
    Likes dati
    17

    Question Precisione Excel vs VBA

    Mi dilettavo ad implementare nuove funzioni sul mio calendario settimanale
    volevo evidenziare i giorni degli equinozi e dei solstizi
    dopo una ricerca teorica trovo un libro "Astronomical Algorithms 2th ed." di J.Meeus
    ed al capitolo 27 trovo quanto cercato

    di primo getto uso le formule nelle caselle di Excel, poi provo a crearmi una Function (usando stesso metodo e formule)
    le due starde danno risultati leggermente diversi
    recupero i dati ufficiali per il 2005 e vedi che usando le formule nelle celle di Excel l'errore è molto minore rispetto usando VBA con Function
    faccio presente che in VBA ho definito le variabili come Double (8 bytes)
    Allego il mio file cone i due risultati (per avere un confronto per l'errore l'anno deve essere e rimanere 2005)

    Sembrerebbe che meglio usare le formule nelle celle rispetto ad elaborazione in VBA, forse ci sarà anche un perchè!!!
    nel caso del Equinozio d'Autunno l'errore è sui 10 minuti, dovrebbe essere dell'ordine delle decine di secondi!!!

    Codice: 
    Const rad# = 1.74532925199433E-02
    
    Function EquiSol(anno As Integer, ES As Integer, UT As Boolean, TZ As Integer, Tlegale As Boolean) As Double
        '=EquiSol(2016;1;VERO;1;VERO)
        Y# = (anno - 2000) / 1000
        Dim S#(0 To 24)
        Select Case ES
               Case Is = 1    'Equinozio Primavera - Marzo
                    JDEo# = 2451623.80984 + 365242.37404 * Y# + 0.05169 * Y# ^ 2 - 0.00411 * Y# ^ 3 - 0.00057 * Y# ^ 4
                    oL# = 0
               Case Is = 2    'Solstizio Estate - Giugno
                    JDEo = 2451716.56767 + 365241.62603 * Y# + 0.00325 * Y# ^ 2 + 0.00888 * Y# ^ 3 - 0.0003 * Y# ^ 4
                    oL# = -1 / 24 * Tlegale
               Case Is = 3    'Equinozio Autunno - Settembre
                    JDEo# = 2451810.21715 + 365242.01767 * Y# - 0.11575 * Y# ^ 2 + 0.00337 * Y# ^ 3 + 0.00078 * Y# ^ 4
                    oL# = -1 / 24 * Tlegale
               Case Is = 4    'Solstizio Inverno - Dicembre
                    JDEo# = 2451900.05952 + 365242.74049 * Y# - 0.06223 * Y# ^ 2 - 0.00823 * Y# ^ 3 + 0.00032 * Y# ^ 4
                    oL# = 0
        End Select
        T# = (JDEo# - 2451545) / 36525
        
        S#(1) = 485 * Cos(324.96 * rad# + 1934.136 * rad# * T#)
        S#(2) = 203 * Cos(337.23 * rad# + 32964.467 * rad# * T#)
        S#(3) = 199 * Cos(342.08 * rad# + 20.186 * rad# * T#)
        S#(4) = 182 * Cos(27.85 * rad# + 445267.112 * rad# * T#)
        S#(5) = 156 * Cos(73.14 * rad# + 45036.886 * rad# * T#)
        S#(6) = 136 * Cos(171.52 * rad# + 22518.443 * rad# * T#)
        S#(7) = 77 * Cos(222.54 * rad# + 65928.934 * rad# * T#)
        S#(8) = 74 * Cos(296.72 * rad# + 3034.906 * rad# * T#)
        S#(9) = 70 * Cos(243.58 * rad# + 9037.513 * rad# * T#)
        S#(10) = 58 * Cos(119.81 * rad# + 33718.147 * rad# * T#)
        S#(11) = 52 * Cos(297.17 * rad# + 150.678 * rad# * T#)
        S#(12) = 50 * Cos(21.02 * rad# + 2281.226 * rad# * T#)
        S#(13) = 45 * Cos(247.54 * rad# + 29929.562 * rad# * T#)
        S#(14) = 44 * Cos(325.15 * rad# + 31555.956 * rad# * T#)
        S#(15) = 29 * Cos(60.93 * rad# + 4443.417 * rad# * T#)
        S#(16) = 18 * Cos(155.12 * rad# + 67555.328 * rad# * T#)
        S#(17) = 17 * Cos(288.79 * rad# + 4562.452 * rad# * T#)
        S#(18) = 16 * Cos(198.04 * rad# + 62894.029 * rad# * T#)
        S#(19) = 14 * Cos(199.76 * rad# + 31436.921 * rad# * T#)
        S#(20) = 12 * Cos(95.39 * rad# + 14577.848 * rad# * T#)
        S#(21) = 12 * Cos(287.11 * rad# + 31931.756 * rad# * T#)
        S#(22) = 12 * Cos(320.81 * rad# + 34777.259 * rad# * T#)
        S#(23) = 9 * Cos(227.73 * rad# + 1222.114 * rad# * T#)
        S#(24) = 8 * Cos(15.45 * rad# + 16859.074 * rad# * T#)
        
        For i% = 1 To 24
           St# = St# + S#(i)
        Next i%
        
        W# = 35999.373 * (JDEo# - 2451545) / 36525 - 2.7
        Lambda = 1 + 0.0334 * Cos(W# * rad#) + 0.0007 * Cos(W# * 2 * rad#)
        
        JDE# = JDEo# + 0.5 - (oL# + TZ / 24) * (Not UT) + 0.00001 * St# / W#
        dataES# = JDE# - 2415019
        
        EquiSol = dataES#
        
    End Function
    File Allegati File Allegati

  2. #2

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    364
    Likes dati
    0

    Re: Precisione Excel vs VBA

    Citazione Originariamente Scritto da zio_tom Visualizza Messaggio
    ....dopo una ricerca teorica trovo un libro "Astronomical Algorithms 2th ed." di J.Meeus ed al capitolo 27 trovo quanto cercato
    Mi permetto un'osservazione, sperando che venga interpretata nel modo corretto.

    Dalla mancanza di risposte ritengo (IMHO beninteso) che l'argomento sia stato esposto in modo non abbastanza adeguato.

    Parli di un libro ma non fornisci né le formule contenute, né alcun link dove poter recuperare l'informazione; ma soprattutto lo stile in cui hai scritto il codice mi ha tolto ogni interesse e fatto desitere dallo scaricare il file.
    Non hai dichiarato le variabili, facendo - per contro - un (ab)uso dei caratteri di dichiarazione del tipo; il tutto rende il codice pesante da leggere e, soprattutto, da modificare: se volessi vedere cosa succede modificando T in Single dovrei correggere oltre 20 righe di codice!!
    Sarebbe bastato usare una sola volta Dim T as Double (o al limite usare il # sola alla prima assegnazione).
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  3. #3
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    525
    Versione Office
    2010 - Win10
    Likes ricevuti
    63
    Likes dati
    17

    Re: Precisione Excel vs VBA

    forse mi son spiegato male, il fatto del libro è solamente un fatto discorsivo
    il problema è la minor PRECISIONE dell'elaborato in VBA, pur con variabili Double che penso siano quelle che danno maggior precisione
    rispetto le stesse formule inserite nelle celle di Excel
    dico minor precisione in quanto i valori esatti sono noti
    il codice VBA ed il foglio Excel sono stati trovati in rete, prbabilmenti derivano da vecchi elaborati in basic dos
    le formule sono esattamente uguali, ma non il risultato.... questo volevo capire

  4. #4

    L'avatar di scossa
    Clicca e Apri
    Data Registrazione
    Jul 2015
    Località
    Verona Provincia
    Età
    57
    Messaggi
    1011
    Versione Office
    .
    Likes ricevuti
    364
    Likes dati
    0

    Re: Precisione Excel vs VBA

    Ciao,

    non c'è nessuna imprecisione nel VBA, è il codice della UDF che non corrisponde alla formula lato celle.
    Infatti in B7 c'è

    =K7-2415019+0,5+SE($A$2=FALSO;$A$3/24+SE($A$4=VERO;$E$1;0);0)+0,00001*AK7/AM7

    quindi sTot/Lambda mentre nel codice Lambda, pur se calcolato non viene usato:

    jde = JDEo + 0.5 - (oL + TZ / 24) * (Not UT) + 0.00001 * st / w

    se sostituisci con:

    jde = JDEo + 0.5 - (oL + TZ / 24) * (Not UT) + 0.00001 * st / lambda

    otterrai un risultato omogeneo.
    Bye!
    scossa
    scossa's web site
    ___
    Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

  5. I seguenti utenti hanno dato un "Like"


  6. #5
    L'avatar di zio_tom
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Veneto
    Messaggi
    525
    Versione Office
    2010 - Win10
    Likes ricevuti
    63
    Likes dati
    17

    Re: Precisione Excel vs VBA

    grazie, avevo controllato, tutte le formule
    ma invece di controllare le variabili (che pensavo corrette) controllavo che le cifre fossero uguali
    mi sarebbe crollato il mito del VBA.....
    ciao

    PS: è sempre vero che 4 occhi vedono meglio di 2.....

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •