- #1

jim mcnamara

Mentor

- 4,169

- 2,693

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

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:

```
#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;
}
```

Last edited by a moderator: