Phases of the Moon for the HP-41
Overview
-The following programs compute the date & time of a phase of the
Moon that occurs near a given date.
-A few secular terms are used in the first version which is valid over
the time-span [1000,3000] ( the accuracy remains of the order of
a few minutes )
-The second program uses more secular terms and an accuracy of the
order of 10 minutes is achieved near 3000 B.C. ( compared to DE406/LE406
)
-See also "Eclipses for the HP-41" for a non-standard definition of
the phases.
Program Listing1
Data Registers: R00 = T = instant of the mean phase is expressed in millennia since J2000.
R01 = M
where M = mean anomaly of the Sun
R04 = phase
R02 = M'-180°
where M' = mean anomaly of the Moon
R05 = 0 for a New Moon or a Full Moon, 1 otherwise
R03 = 1 for a Full Moon, 0 otherwise and then 2 F
R06 = 7.38264721 x 4k
where F = mean argument of latitude of the Moon
Flags: none. However, set flag F04 for dates before 1582/10/15 if you use "J1" and "D1" instead of "J0" & "DT"
Subroutines: "J0" & "DT" ( cf "Julian
& Gregorian Calendars for the HP-41" ) or "J1" & "D1" or
"J2" & "D2"
none if you have a TIME Module, provided the dates are after 1582/10/14
-If you have a TIME Module, line 03 may be replaced by 1.012
STO 07 X<>Y DDAYS
-In this case, key in the date in the current format: MDY or
DMY
-If you have a TIME Module, lines 148-149 may be replaced by
RCL 07 RCL Z DATE+
01 LBL "PHASE"
02 DEG 03 XEQ "J0" 04 7.38264721 05 STO 06 06 / 07 INT 08 STO 00 09 ST* 06 10 4 11 MOD 12 STO 04 13 2 14 STO 03 15 X#Y? 16 ST- 03 17 ST/ 03 18 MOD 19 STO 05 20 221 21 * 22 RCL 03 23 - 24 407 25 + 26 RCL 00 27 49474 28 / 29 STO 00 30 8 31 % |
32 +
33 4771976.76 34 + 35 RCL 00 36 * 37 465 38 SQRT 39 + 40 STO 02 41 SIN 42 * 43 1 44 RCL 00 45 40 46 / 47 - 48 RCL 00 49 359989.6 50 * 51 13 52 LN 53 + 54 STO 01 55 SIN 56 * 57 172 58 RCL 03 59 + 60 * 61 + 62 16 |
63 RCL 05
64 7 65 * 66 - 67 RCL 02 68 ST+ X 69 SIN 70 * 71 + 72 5 73 RCL 05 74 - 75 ST+ X 76 RCL 00 77 9664016 78 * 79 39 80 - 81 STO 03 82 SIN 83 * 84 + 85 RCL 05 86 ST+ X 87 7 88 - 89 RCL 02 90 RCL 01 91 - 92 SIN 93 * |
94 +
95 RCL 05 96 7 97 * 98 5 99 + 100 RCL 01 101 RCL 02 102 + 103 SIN 104 * 105 + 106 RCL 01 107 ST+ X 108 SIN 109 ST+ X 110 + 111 RCL 05 112 RCL 02 113 RCL 03 114 - 115 SIN 116 ST* Y 117 + 118 + 119 RCL 04 120 2 121 - 122 RCL 05 123 * 124 3 |
125 *
126 - 127 5598 128 + 129 E3 130 / 131 RCL 00 132 X^2 133 65 134 / 135 + 136 RCL 06 137 + 138 INT 139 LASTX 140 FRC 141 X<0? 142 DSE Y 143 "" 144 24 145 ST* Y 146 MOD 147 HMS 148 X<>Y 149 XEQ "DT" 150 RCL 04 151 END |
( 231 bytes / SIZE 007 )
STACK | INPUTS | OUTPUTS |
Z | / | HH.MNSS |
Y | / | YYYY.MNDD |
X | yyyy.mndd | Phase |
where yyyy.mndd is an approximate date
Phase = 0 for a New Moon
Phase = 1 for a First Quarter
Phase = 2 for a Full Moon
Phase = 3 for a Last Quarter
YYYY.MNDD & HH.MNSS are the date & time ( in Terrestrial Time ) of the Phase
Example:
-We want to know the instant of a phase of the Moon near July 4th 2002
2002.0704
XEQ "PHASE" >>>> 3
( Execution time = 17 seconds )
RDN
2002.0702
RDN
17.2314
-There is a Last Quarter on July 2nd 2002 at 17h23 TT or 17h22 UT ( the exact value is 17h21 UT )
-If we seek a New Moon, we can guess it happens about 7 days later,
so we execute "PHASE" again with this new initial value:
2002.0709
R/S yields
0
RDN
2002.0710
RDN
10.2715
-The New Moon occurs on July 10th 2002 at 10h27 TT or 10h26 UT
( the exact value )
Other numerical checks:
1000.0101 XEQ "PHASE"
>>>> 0 RDN 1000.0109 RDN
15h32m33s TT ( New Moon on 1000/01/09 at 15h33
TT )
1600.0215
R/S >>>>
1 RDN 1600.0221 RDN
8h41m43s TT ( First Quarter on 1600/02/21 at 8h42
TT )
2500.0412
R/S >>>>
2 RDN 2500.0415 RDN
16h24m58s TT ( Full Moon on 2500/04/15 at 16h25
TT )
3000.0714
R/S >>>>
3 RDN 3000.0716 RDN
21h38m01s TT ( Last Quarter on 3000/07/16 at 21h38
TT )
-Errors can reach about 1 hour near 3000 B.C.
-Using more secular terms will increase accuracy:
Program Listing2
Data Registers: R00 = T = instant of the mean phase ( expressed in unit of 10000 julian years since J2000 )
R01 = M
where M = mean anomaly of the Sun
R04 = phase
R02 = M'-180°
where M' = mean anomaly of the Moon
R05 = 0 for a New Moon or a Full Moon, 1 otherwise
R03 = 1 for a Full Moon, 0 otherwise and then 2 F
R06 = E
where F = mean argument of latitude of the Moon
R07 = 7.382647215 x 4k
Flags: none. However, set flag F04 for dates before 1582/10/15 if you use "J1" and "D1" instead of "J0" & "DT"
Subroutines: "J0" & "DT" ( cf "Julian
& Gregorian Calendars for the HP-41" ) or "J1" & "D1" or
"J2" & "D2"
01 LBL "PHASE"
02 DEG 03 XEQ "J0" 04 7.382647215 05 STO 07 06 / 07 INT 08 STO 00 09 ST* 07 10 4 11 MOD 12 STO 04 13 2 14 STO 03 15 X#Y? 16 ST- 03 17 ST/ 03 18 MOD 19 STO 05 20 1 21 RCL 00 22 494740 23 / 24 STO 00 25 13 26 / 27 .252 28 + 29 RCL 00 30 * 31 - 32 STO 06 33 13 34 LN 35 RCL 00 36 X^2 37 9 38 / |
39 3599896
40 - 41 RCL 00 42 * 43 - 44 STO 01 45 ST+ X 46 SIN 47 ST+ X 48 * 49 RCL 01 50 SIN 51 172 52 RCL 03 53 + 54 * 55 + 56 465 57 SQRT 58 RCL 00 59 5.8 60 * 61 12.38 62 - 63 RCL 00 64 * 65 6164 66 D-R 67 - 68 RCL 00 69 * 70 47719767.64 71 - 72 RCL 00 73 * 74 - 75 STO 02 76 RCL 01 |
77 -
78 SIN 79 RCL 05 80 ST+ X 81 7 82 - 83 * 84 + 85 RCL 05 86 7 87 * 88 5 89 + 90 RCL 01 91 RCL 02 92 + 93 SIN 94 * 95 + 96 RCL 06 97 * 98 RCL 05 99 221 100 * 101 RCL 03 102 - 103 407 104 + 105 RCL 02 106 SIN 107 * 108 + 109 16 110 RCL 05 111 7 112 * 113 - 114 RCL 02 |
115 ST+ X
116 SIN 117 * 118 + 119 RCL 00 120 ST+ X 121 5 122 - 123 RCL 00 124 X^2 125 * 126 96640162 127 + 128 RCL 00 129 * 130 39 131 - 132 STO 03 133 SIN 134 5 135 RCL 05 136 - 137 ST+ X 138 * 139 + 140 RCL 05 141 RCL 02 142 RCL 03 143 - 144 SIN 145 ST* Y 146 + 147 + 148 RCL 04 149 2 150 - 151 RCL 05 152 * |
153 3
154 * 155 - 156 5598 157 + 158 73 159 RCL 00 160 * 161 150 162 - 163 RCL 00 164 * 165 1544 166 + 167 RCL 00 168 X^2 169 * 170 + 171 E3 172 / 173 RCL 07 174 + 175 INT 176 LASTX 177 FRC 178 X<0? 179 DSE Y 180 "" 181 24 182 ST* Y 183 MOD 184 HMS 185 X<>Y 186 XEQ "DT" 187 RCL 04 188 END |
( 289 bytes / SIZE 008 )
STACK | INPUTS | OUTPUTS |
Z | / | HH.MNSS |
Y | / | YYYY.MNDD |
X | yyyy.mndd | Phase |
where yyyy.mndd is an approximate date
Phase = 0 for a New Moon
Phase = 1 for a First Quarter
Phase = 2 for a Full Moon
Phase = 3 for a Last Quarter
YYYY.MNDD & HH.MNSS are the date & time ( in Terrestrial Time ) of the Phase
Example:
-3101.0210 XEQ "PHASE" returns: ---Execution time = 20s---
0
A New Moon occured
RDN -3101.0217
on -3101/02/17
Julian Calendar
( -3101 = 3102 B.C. )
RDN
22.5512
at 22h55m TT
Notes:
-All results are expressed in Terrestrial Time. The difference TT -
UT can be approximated by a formula given by Morrison & Stephenson:
TT - UT ( in seconds ) = -15 + ( 32.5 +/- 2 ).( t - 0.1
)2 where t is measured in centuries from AD 1800.
-Many other periodic terms are given in "Astronomical Algorithms"
Reference:
[1] Jean Meeus , "Astronomical Algorithms" - Willmann-Bell
- ISBN 0-943396-61-1