Tropical year

  • #1
jim mcnamara
Mentor
3,723
1,987

Main Question or Discussion Point

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:
#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:

Answers and Replies

  • #2
18,044
7,405
  • #3
jim mcnamara
Mentor
3,723
1,987
Not really.
 

Related Threads for: Tropical year

  • Last Post
Replies
12
Views
10K
Replies
1
Views
2K
Replies
7
Views
5K
Replies
5
Views
38K
  • Last Post
2
Replies
26
Views
4K
Replies
3
Views
2K
  • Last Post
Replies
7
Views
4K
  • Last Post
Replies
3
Views
909
Top