How Can I Find Correction Factors for Tropical Years in Historical Data?

Click For Summary
SUMMARY

This discussion focuses on deriving correction factors for tropical years using a specific C code implementation. The code calculates the tropical year based on Julian Date (JD) with a reference epoch of January 1, 2000 (JD 2451545). Users inquire about the availability of historical T values for earlier epochs and the algorithm's applicability over time. The provided C code successfully computes tropical years, demonstrating its utility for astronomical calculations.

PREREQUISITES
  • Understanding of Julian Date (JD) in astronomy
  • Basic proficiency in C programming
  • Familiarity with correction factors in astronomical calculations
  • Knowledge of tropical year definitions and calculations
NEXT STEPS
  • Research historical T values for tropical years in astronomical databases
  • Explore the implications of different epochs on tropical year calculations
  • Learn about the Julian Calendar and its relationship to tropical years
  • Investigate advanced C programming techniques for numerical methods in astronomy
USEFUL FOR

Astronomers, software developers in scientific computing, and researchers interested in historical astronomical data and calculations will benefit from this discussion.

jim mcnamara
Mentor
Messages
4,789
Reaction score
3,853
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:
Astronomy news on Phys.org
Not really.
 
  • Like
Likes   Reactions: Greg Bernhardt

Similar threads

Replies
1
Views
4K
  • · Replies 7 ·
Replies
7
Views
76K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 6 ·
Replies
6
Views
3K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 5 ·
Replies
5
Views
11K