[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avrlibccommit] [2336] Edited equation_of_time.
From: 
Mike Rice 
Subject: 
[avrlibccommit] [2336] Edited equation_of_time. 
Date: 
Sun, 07 Apr 2013 16:09:25 +0000 
Revision: 2336
http://svn.sv.gnu.org/viewvc/?view=rev&root=avrlibc&revision=2336
Author: swfltek
Date: 20130407 16:09:23 +0000 (Sun, 07 Apr 2013)
Log Message:

Edited equation_of_time. Separating the tropical and anomalous portions
provided several more bits to work with.
Modified Paths:

trunk/avrlibc/libc/time/equation_of_time.c
Modified: trunk/avrlibc/libc/time/equation_of_time.c
===================================================================
 trunk/avrlibc/libc/time/equation_of_time.c 20130406 19:23:16 UTC (rev
2335)
+++ trunk/avrlibc/libc/time/equation_of_time.c 20130407 16:09:23 UTC (rev
2336)
@@ 29,52 +29,53 @@
/* $Id$ */
/*
 The so called Equation of Time. We determine the orbital position of
the mothership,
 and solve a two term polynomial. More accurate equations are available
(more terms), but
 without a true double there is little point in that.
+ The so called Equation of Time.
*/
#include <time.h>
#include <math.h>
+#define TROP_YEAR 31556925
+#define ANOM_YEAR 31558433
+#define PERIHELION 31218166 /* perihelion of 1999 */
+#define SOLSTICE 836160 /* winter solstice of 1999 */
+#define TWO_PI 6.283185307179586
+
int
equation_of_time(time_t * timer)
{
 unsigned long s, p, y;
 double d, lf, hf;
+ unsigned long s, p, y;
+ double d, lf, hf;
 /* s = time since solstice */
 s = *timer + 836160UL;
+ /* s = time since solstice */
+ s = * timer % TROP_YEAR;
+ s += SOLSTICE;
 /* p = time since perihelion */
 p = *timer  191857UL;
+ /* p = time since perihelion */
+ p = *timer % ANOM_YEAR;
+ p += PERIHELION;
 /* limit to 1 tropical year */
 y = 31556926;
 s %= y;
 p %= y;
+ /* low frequency component has 1 year period */
+ lf = p;
+ lf /= ANOM_YEAR;
 /* low frequency component has 1 year period */
 lf = p;
 lf /= y;
+ /* high frequency component has 1/2 year period */
+ y = TROP_YEAR / 2;
+ hf = s;
+ hf /= y;
 /* high frequency component has 1/2 year period */
 y /= 2;
 hf = s;
 hf /= y;
+ /* convert years to radians */
+ d = 6.283185307179586;
+ hf *= d;
+ lf *= d;
 /* convert years to radians */
 d = 6.283185307179586;
 hf *= d;
 lf *= d;
+ /* hf has magnitude 592.2 */
+ hf = sin(hf) * 592.2;
 /* hf has magnitude 592.2 */
 hf = sin(hf) * 592.2;
+ /* lf has magnitude 451.8 */
+ lf = sin(lf) * 451.8;
 /* lf has magnitude 451.8 */
 lf = sin(lf) * 451.8;
+ d = lf + hf;
 d = lf + hf;

 return d;
+ return d;
}
[Prev in Thread] 
Current Thread 
[Next in Thread] 
 [avrlibccommit] [2336] Edited equation_of_time.,
Mike Rice <=