1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Tropical year

  1. May 12, 2008 #1

    jim mcnamara

    User Avatar
    Science Advisor
    Gold Member

    Using this:
    http://scienceworld.wolfram.com/astronomy/TropicalYear.html
    I derived this unix C code, which duplicates expected outputs. Note the constant T which is a correction factor for the epoch based in 2000, or so I assume because 2451545 is Jan 1 2000. And I have about epochs in calculations.

    Questions:

    1. I'm not an astronomer, where do I find similar T values for past times?

    2. How far back in time does the algorithm below "work"? From: Lyle Huber at nmsu:
    http://astro.nmsu.edu/~lhuber/leaphist.html

    Code (Text):

    #include <stdlib.h>
    #include <float.h>
    #include <stdio.h>

    double tropical_year(const double JD)
    {
        const double T= (JD - 2451545.)/ 36526.;  /* use epoch 2000 */
        double T2=T * T;
        double T3=T2 * T;
        double result=365.2421896698 -(.00000615359 *T)
                                     -(7.29e-10 * T2)
                                     +(2.64e-10 *T3);
        return result;
    }

    int process(const double JD)
    {
        int retval=0;
       
        if(JD > DBL_EPSILON)
            printf("JD %.2f  Tropical year:%.6f\n", JD, tropical_year(JD));
        else
        {
            printf("JD %f  Tropical year:undefined\n", JD);
            retval=1;  
        }  
        return retval;
    }

    int main(int argc, char **argv)
    {
        int retval=0;
        double JD=0.;
       
        if(argc>1) /* read arg list */
        {
            int i=0;
            for(i=1; i < argc; i++)
            {
                JD=atof(argv[i]);
                retval!=process(JD);
            }      
        }
        else /* read from stdin */
        {
            char tmp[128]={0x0};
            while(fgets(tmp, sizeof(tmp), stdin)!=NULL)
            {
                JD=atof(tmp);
                retval!=process(JD);
            }
        }
        return 0;
    }
     
     
  2. jcsd
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Can you help with the solution or looking for help too?
Draft saved Draft deleted