astronomical-almanac-5.6/0000755000175000017500000000000010477076561013652 5ustar jrvjrvastronomical-almanac-5.6/aa-55.xml0000640000175000017500000001410307425134642015171 0ustar jrvjrv 1.15 Portable Application Description, or PAD for short, is a data set that is used by shareware authors to disseminate information to anyone interested in their software products. To find out more go to http://www.asp-shareware.org/pad Stephen L. Moshier 30 Frost Street Cambridge MA 02140 USA http://www.moshier.net/index.html Steve Moshier steve@moshier.net aa-55.zip 5.5 01 27 2002 0 Freeware Minor Update Install and Uninstall Win 3.1x,Win95,Win98,WinME,WinNT 3.x,WinNT 4.x,WinXP,Windows2000,Unix,Linux,MS-DOS,OS/2,OS/2 Warp,OpenVMS aa-55.zip aa-54.zip aa.zip aa.zip 382591 374 0.37 N Days Improved rise and set time calculation Education astronomy N N N ephemerides,planets,moon,sun,sunrise,moonrise,moon phase Self-contained ephemeris calculator, C source This program computes the orbital positions of planetary bodies and performs rigorous coordinate reductions to apparent geocentric and topocentric place (local altitude and azimuth). It also reduces star catalogue positions given in either the FK4 or FK5 system. The program follows the rigorous algorithms for reduction of celestial coordinates exactly as laid out in current editions of the Astronomical Almanac. Source code listings in C language are supplied. Command input to aa.exe is by single line responses to programmed prompts. The program requests date, time, and which of a menu of things to do. Menu item 0 is the Sun, 3 is the Moon. The other values 1-9 are planets; 99 opens an orbit catalogue file; 88 opens a star catalogue. Several methods of calculating the positions of the planets have been provided for in the program source code. These range in accuracy from a built-in computation using perturbation formulae to a solution from precise orbital elements that you supply from an almanac. The program uses as a default a set of trigonometric expansions for the position of the Earth and planets. These have been adjusted to match the Jet Propulsion Laboratory's DE404 Long Ephemeris (1995) with a precision ranging from about 0.1" for the Earth to 1" for Pluto. The adjustment was carried out on the interval from 3000 B.C. to 3000 A.D. for the outer planets. The adjustment for the inner planets is strictly valid only from 1350 B.C. to 3000 A.D., but may be used to 3000 B.C. with some loss of precision. The Moon's position is calculated by a modified version of the lunar theory of Chapront-Touze' and Chapront. This has a precision of 0.5 arc second relative to DE404 for all dates between 1369 B.C. and 3000 A.D. Build scripts for the program are supplied for the following software systems: Microsoft Visual C, 16-bit MSC 6, Borland C (4, 5, turbo), VMS, and generic unix or linux. http://www.moshier.net/aadoc.html http://www.moshier.net/aa-55.zip astronomical-almanac-5.6/aa.ans0000644000175000017500000005127107715277073014746 0ustar jrvjrv Steve Moshier's Ephemeris Program v5.5 Planetary and lunar positions approximate DE404. Terrestrial east longitude -71.1300 deg geocentric latitude 42.0785 deg Earth radius 0.99849 temperature 12.0 C pressure 1010 mb Input time is TDT. Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (1.000000) ? Time: Hours (0) ? Minutes (0) ? Seconds (0.000000) ? 1986 January 1 Wednesday 16h 46m 05.129s UT 1986 January 1 Wednesday 16h 47m 00.000s TDT Julian day 2446432.1993056 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (0) ? The Sun JD 2446432.20, 1986 January 1 Wednesday 16h 46m 05.129s UT 1986 January 1 Wednesday 16h 47m 00.000s TDT ecliptic long 280d 59' 11.39" lat 0d 00' 00.45" rad 9.832795E-01 light time 8.1777m, aberration dRA 1.503s dDec 1.74" nutation dRA -0.629s dDec -7.61" Apparent: R.A. 18h 47m 45.266s Dec. - 22d 59' 20.49" Apparent longitude 280.978 deg Local apparent sidereal time 18h 45m 43.315s diurnal aberration dRA 0.017s dDec 0.00" diurnal parallax dRA 0.004s dDec -8.10" atmospheric refraction 0.035 deg dRA -0.065s dDec 125.16" Topocentric: Altitude 24.772 deg, Azimuth 179.485 deg Topocentric: R.A. 18h 47m 45.222s Dec. - 22d 57' 23.43" local meridian transit 1986 January 1 Wednesday 16h 48m 07.137s UT rises 1986 January 1 Wednesday 12h 13m 33.241s UT sets 1986 January 1 Wednesday 21h 22m 49.755s UT Visible hours 9.1546 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (1.000000) ? Time: Hours (16) ? Minutes (47) ? Seconds (0.000000) ? 1986 January 1 Wednesday 20h 05m 05.129s UT 1986 January 1 Wednesday 20h 06m 00.000s TDT Julian day 2446432.3375000 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (0) ? Mercury JD 2446432.34, 1986 January 1 Wednesday 20h 05m 05.129s UT 1986 January 1 Wednesday 20h 06m 00.000s TDT ecliptic long 224d 05' 26.79" lat 0d 30' 00.63" rad 4.477981E-01 light time 10.6706m, aberration dRA -1.346s dDec 4.22" true geocentric distance 1.2831571 au equatorial diameter 5.24" approx. visual magnitude -1.5, phase 0.883 Astrometric J2000.0: R.A. 17h 35m 09.874s Dec. - 23d 08' 33.31" Astrometric B1950.0: R.A. 17h 32m 07.811s Dec. - 23d 06' 38.33" elongation from sun 17.03 degrees, light defl. dRA -0.001s dDec 0.00" annual aberration dRA -1.443s dDec 0.84" nutation dRA -0.695s dDec -6.54" Oph Ophiuchi. Apparent: R.A. 17h 34m 16.754s Dec. - 23d 08' 08.12" Apparent geocentric ecliptic long 264d 05' 19.82" lat 0d 10' 25.15" rad 1.283028E+00 Local apparent sidereal time 22h 05m 16.005s diurnal aberration dRA 0.006s dDec -0.09" diurnal parallax dRA -0.341s dDec -4.97" atmospheric refraction 0.536 deg dRA 95.530s dDec 1407.73" Topocentric: Altitude 0.157 deg, Azimuth 238.332 deg Topocentric: R.A. 17h 35m 51.950s Dec. - 22d 44' 45.45" local meridian transit 1986 January 1 Wednesday 15h 33m 39.645s UT rises 1986 January 1 Wednesday 11h 00m 41.670s UT sets 1986 January 1 Wednesday 20h 06m 17.267s UT Visible hours 9.0932 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (1.000000) ? Time: Hours (20) ? Minutes (6) ? Seconds (0.000000) ? 1986 January 1 Wednesday 11h 58m 05.129s UT 1986 January 1 Wednesday 11h 59m 00.000s TDT Julian day 2446431.9993056 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (1) ? Venus JD 2446432.00, 1986 January 1 Wednesday 11h 58m 05.129s UT 1986 January 1 Wednesday 11h 59m 00.000s TDT ecliptic long 270d 34' 41.58" lat - 0d 49' 24.86" rad 7.270590E-01 light time 14.1688m, aberration dRA -1.734s dDec 0.17" true geocentric distance 1.7036718 au equatorial diameter 9.79" approx. visual magnitude -3.9, phase 0.997 Astrometric J2000.0: R.A. 18h 28m 59.044s Dec. - 23d 37' 31.12" Astrometric B1950.0: R.A. 18h 25m 56.289s Dec. - 23d 39' 30.93" elongation from sun 4.36 degrees, light defl. dRA -0.003s dDec -0.01" annual aberration dRA -1.510s dDec -1.03" nutation dRA -0.649s dDec -7.38" Sgr Sagittarii. Apparent: R.A. 18h 28m 05.721s Dec. - 23d 38' 14.39" Apparent geocentric ecliptic long 276d 25' 55.44" lat - 0d 21' 10.55" rad 1.703651E+00 Local apparent sidereal time 13h 56m 56.005s diurnal aberration dRA 0.007s dDec 0.09" diurnal parallax dRA 0.258s dDec -3.74" atmospheric refraction 0.605 deg dRA -108.180s dDec 1588.02" Topocentric: Altitude -0.167 deg, Azimuth 121.982 deg Topocentric: R.A. 18h 26m 17.805s Dec. - 23d 11' 50.02" local meridian transit 1986 January 1 Wednesday 16h 29m 32.429s UT rises 1986 January 1 Wednesday 11h 59m 23.162s UT sets 1986 January 1 Wednesday 20h 59m 44.262s UT Visible hours 9.0059 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (1.000000) ? Time: Hours (11) ? Minutes (59) ? Seconds (0.000000) ? 1986 January 1 Wednesday 1h 51m 05.130s UT 1986 January 1 Wednesday 1h 52m 00.000s TDT Julian day 2446431.5777778 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (2) ? The Moon JD 2446431.58, 1986 January 1 Wednesday 1h 51m 05.130s UT 1986 January 1 Wednesday 1h 52m 00.000s TDT nutation dRA -0.483s dDec 5.89" Geometric lon 156.092 deg, lat 4.422 deg, rad 2.5685e-03 au Apparent geocentric longitude 156.089 deg latitude 4.422 deg Distance 60.244 Earth-radii Horizontal parallax 0d 57' 03.96" Semidiameter 0d 15' 32.90" Elongation from sun 124.15 deg, Illuminated fraction 0.78 Phase 2.8 days before Third Quarter Apparent: R.A. 10h 38m 09.360s Declination 13d 23' 08.73" Local apparent sidereal time 3h 48m 16.291s diurnal aberration dRA -0.004s dDec -0.05" diurnal parallax dRA 169.310s dDec -2358.83" atmospheric refraction 0.636 deg dRA -112.901s dDec 1585.14" Topocentric: Altitude -0.299 deg, Azimuth 71.780 deg Topocentric: R.A. 10h 39m 05.765s Dec. 13d 10' 14.99" local meridian transit 1986 January 1 Wednesday 8h 54m 13.566s UT rises 1986 January 1 Wednesday 1h 51m 44.570s UT sets 1986 January 1 Wednesday 15h 43m 38.084s UT Visible hours 13.8649 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (1.000000) ? Time: Hours (1) ? Minutes (52) ? Seconds (0.000000) ? 1986 January 2 Thursday 7h 24m 05.128s UT 1986 January 2 Thursday 7h 25m 00.000s TDT Julian day 2446432.8090278 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (3) ? Mars JD 2446432.81, 1986 January 2 Thursday 7h 24m 05.128s UT 1986 January 2 Thursday 7h 25m 00.000s TDT ecliptic long 189d 56' 41.60" lat 1d 10' 37.15" rad 1.636906E+00 light time 15.6758m, aberration dRA -0.878s dDec 4.67" true geocentric distance 1.8849135 au equatorial diameter 4.97" approx. visual magnitude 1.0, phase 0.927 Astrometric J2000.0: R.A. 14h 37m 50.877s Dec. - 14d 19' 58.06" Astrometric B1950.0: R.A. 14h 35m 06.474s Dec. - 14d 07' 00.52" elongation from sun 60.24 degrees, light defl. dRA -0.000s dDec 0.00" annual aberration dRA -0.684s dDec 2.87" nutation dRA -0.701s dDec -1.58" Lib Librae. Apparent: R.A. 14h 37m 03.433s Dec. - 14d 16' 19.88" Apparent geocentric ecliptic long 221d 22' 11.94" lat 1d 01' 15.36" rad 1.884847E+00 Local apparent sidereal time 9h 26m 07.545s diurnal aberration dRA 0.003s dDec 0.06" diurnal parallax dRA 0.232s dDec -3.21" atmospheric refraction 0.605 deg dRA -108.102s dDec 1505.18" Topocentric: Altitude -0.167 deg, Azimuth 108.721 deg Topocentric: R.A. 14h 35m 15.567s Dec. - 13d 51' 17.85" local meridian transit 1986 January 2 Thursday 12h 34m 40.946s UT rises 1986 January 2 Thursday 7h 25m 14.981s UT sets 1986 January 2 Thursday 17h 43m 47.262s UT Visible hours 10.3090 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (2.000000) ? Time: Hours (7) ? Minutes (25) ? Seconds (0.000000) ? 1986 January 2 Thursday 0h 22m 05.129s UT 1986 January 2 Thursday 0h 23m 00.000s TDT Julian day 2446432.5159722 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (4) ? Jupiter JD 2446432.52, 1986 January 2 Thursday 0h 22m 05.129s UT 1986 January 2 Thursday 0h 23m 00.000s TDT ecliptic long 325d 15' 28.65" lat - 0d 55' 17.49" rad 5.035556E+00 light time 48.1027m, aberration dRA -0.608s dDec -2.69" true geocentric distance 5.7837967 au equatorial diameter 34.04" approx. visual magnitude -2.1, phase 0.997 Astrometric J2000.0: R.A. 21h 25m 27.281s Dec. - 15d 59' 31.48" Astrometric B1950.0: R.A. 21h 22m 41.433s Dec. - 16d 12' 30.54" elongation from sun 37.18 degrees, light defl. dRA 0.001s dDec 0.00" annual aberration dRA -1.091s dDec -5.33" nutation dRA -0.508s dDec -7.27" Cap Capricorni. Apparent: R.A. 21h 24m 39.285s Dec. - 16d 03' 22.90" Apparent geocentric ecliptic long 318d 28' 17.99" lat - 0d 48' 12.87" rad 5.783837E+00 Local apparent sidereal time 2h 22m 58.223s diurnal aberration dRA 0.004s dDec -0.06" diurnal parallax dRA -0.075s dDec -1.06" atmospheric refraction 0.454 deg dRA 80.684s dDec 1145.36" Topocentric: Altitude 0.628 deg, Azimuth 247.880 deg Topocentric: R.A. 21h 25m 59.898s Dec. - 15d 44' 18.67" local meridian transit 1986 January 1 Wednesday 19h 24m 24.595s UT rises 1986 January 1 Wednesday 14h 22m 32.238s UT sets 1986 January 2 Thursday 0h 26m 23.677s UT Visible hours 10.0643 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (2.000000) ? Time: Hours (0) ? Minutes (23) ? Seconds (0.000000) ? 1986 January 2 Thursday 9h 22m 05.128s UT 1986 January 2 Thursday 9h 23m 00.000s TDT Julian day 2446432.8909722 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (5) ? Saturn JD 2446432.89, 1986 January 2 Thursday 9h 22m 05.128s UT 1986 January 2 Thursday 9h 23m 00.000s TDT ecliptic long 241d 57' 32.15" lat 1d 56' 53.33" rad 9.971808E+00 light time 89.3713m, aberration dRA -0.438s dDec 1.28" true geocentric distance 10.7459766 au equatorial diameter 15.40" approx. visual magnitude 1.3, phase 0.999 Astrometric J2000.0: R.A. 16h 15m 43.771s Dec. - 19d 26' 38.75" Astrometric B1950.0: R.A. 16h 12m 49.007s Dec. - 19d 19' 12.65" elongation from sun 36.42 degrees, light defl. dRA -0.001s dDec 0.00" annual aberration dRA -1.173s dDec 2.55" nutation dRA -0.721s dDec -4.66" Sco Scorpii. Apparent: R.A. 16h 14m 52.925s Dec. - 19d 24' 37.12" Apparent geocentric ecliptic long 245d 18' 16.83" lat 1d 48' 21.34" rad 1.074595E+01 Local apparent sidereal time 11h 24m 26.929s diurnal aberration dRA 0.005s dDec 0.08" diurnal parallax dRA 0.041s dDec -0.58" atmospheric refraction 0.620 deg dRA -111.196s dDec 1583.37" Topocentric: Altitude -0.235 deg, Azimuth 115.823 deg Topocentric: R.A. 16h 13m 01.775s Dec. - 18d 58' 14.25" local meridian transit 1986 January 2 Thursday 14h 11m 48.764s UT rises 1986 January 2 Thursday 9h 23m 48.913s UT sets 1986 January 2 Thursday 18h 59m 46.807s UT Visible hours 9.5994 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (2.000000) ? Time: Hours (9) ? Minutes (23) ? Seconds (0.000000) ? 1986 January 10 Friday 14h 41m 05.118s UT 1986 January 10 Friday 14h 42m 00.000s TDT Julian day 2446441.1125000 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (6) ? Uranus JD 2446441.11, 1986 January 10 Friday 14h 41m 05.118s UT 1986 January 10 Friday 14h 42m 00.000s TDT ecliptic long 258d 34' 43.58" lat - 0d 03' 42.90" rad 1.911987E+01 light time 166.0441m, aberration dRA -0.339s dDec 0.41" true geocentric distance 19.9650629 au equatorial diameter 3.51" approx. visual magnitude 5.7, phase 1.000 Astrometric J2000.0: R.A. 17h 17m 32.234s Dec. - 23d 08' 30.12" Astrometric B1950.0: R.A. 17h 14m 30.522s Dec. - 23d 05' 19.00" elongation from sun 30.02 degrees, light defl. dRA -0.001s dDec 0.00" annual aberration dRA -1.306s dDec 1.34" nutation dRA -0.661s dDec -6.17" Oph Ophiuchi. Apparent: R.A. 17h 16m 39.464s Dec. - 23d 07' 42.84" Apparent geocentric ecliptic long 260d 02' 40.56" lat - 0d 03' 40.26" rad 1.996503E+01 Local apparent sidereal time 17h 15m 51.807s diurnal aberration dRA 0.017s dDec 0.00" diurnal parallax dRA 0.000s dDec -0.40" atmospheric refraction 0.035 deg dRA -0.026s dDec 125.95" Topocentric: Altitude 24.636 deg, Azimuth 179.799 deg Topocentric: R.A. 17h 16m 39.455s Dec. - 23d 05' 37.29" local meridian transit 1986 January 10 Friday 14h 41m 52.669s UT rises 1986 January 10 Friday 10h 10m 21.077s UT sets 1986 January 10 Friday 19h 13m 23.775s UT Visible hours 9.0507 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (10.000000) ? Time: Hours (14) ? Minutes (42) ? Seconds (0.000000) ? 1986 January 10 Friday 15h 41m 05.118s UT 1986 January 10 Friday 15h 42m 00.000s TDT Julian day 2446441.1541667 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (7) ? Neptune JD 2446441.15, 1986 January 10 Friday 15h 41m 05.118s UT 1986 January 10 Friday 15h 42m 00.000s TDT ecliptic long 273d 26' 12.25" lat 1d 05' 43.24" rad 3.024865E+01 light time 259.4146m, aberration dRA -0.268s dDec -0.02" true geocentric distance 31.1918326 au equatorial diameter 2.15" approx. visual magnitude 8.0, phase 1.000 Astrometric J2000.0: R.A. 18h 17m 56.452s Dec. - 22d 18' 51.34" Astrometric B1950.0: R.A. 18h 14m 55.371s Dec. - 22d 20' 03.14" elongation from sun 16.19 degrees, light defl. dRA -0.002s dDec 0.00" annual aberration dRA -1.443s dDec -0.73" nutation dRA -0.607s dDec -7.18" Sgr Sagittarii. Apparent: R.A. 18h 17m 03.794s Dec. - 22d 19' 20.61" Apparent geocentric ecliptic long 273d 56' 46.62" lat 1d 03' 37.02" rad 3.119183E+01 Local apparent sidereal time 18h 16m 01.664s diurnal aberration dRA 0.017s dDec 0.00" diurnal parallax dRA 0.000s dDec -0.25" atmospheric refraction 0.034 deg dRA -0.032s dDec 121.40" Topocentric: Altitude 25.441 deg, Azimuth 179.735 deg Topocentric: R.A. 18h 17m 03.779s Dec. - 22d 17' 19.46" local meridian transit 1986 January 10 Friday 15h 42m 07.102s UT rises 1986 January 10 Friday 11h 06m 56.365s UT sets 1986 January 10 Friday 20h 17m 17.917s UT Visible hours 9.1727 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (10.000000) ? Time: Hours (15) ? Minutes (42) ? Seconds (0.000000) ? 1986 January 1 Wednesday 12h 39m 05.129s UT 1986 January 1 Wednesday 12h 40m 00.000s TDT Julian day 2446432.0277778 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (8) ? Pluto JD 2446432.03, 1986 January 1 Wednesday 12h 39m 05.129s UT 1986 January 1 Wednesday 12h 40m 00.000s TDT ecliptic long 215d 09' 19.89" lat 16d 35' 10.95" rad 2.973797E+01 light time 250.6664m, aberration dRA -0.257s dDec 1.66" true geocentric distance 30.1399615 au equatorial diameter 0.14" approx. visual magnitude 13.8, phase 1.000 Astrometric J2000.0: R.A. 14h 40m 14.990s Dec. 1d 36' 22.29" Astrometric B1950.0: R.A. 14h 37m 42.552s Dec. 1d 49' 12.88" elongation from sun 65.01 degrees, light defl. dRA -0.000s dDec 0.00" annual aberration dRA -0.691s dDec -2.09" nutation dRA -0.552s dDec -1.65" Vir Virginis. Apparent: R.A. 14h 39m 31.049s Dec. 1d 39' 53.58" Apparent geocentric ecliptic long 216d 55' 28.87" lat 16d 21' 22.92" rad 3.013996E+01 Local apparent sidereal time 14h 38m 02.740s diurnal aberration dRA 0.016s dDec -0.00" diurnal parallax dRA 0.000s dDec -0.19" atmospheric refraction 0.014 deg dRA -0.024s dDec 49.44" Topocentric: Altitude 49.407 deg, Azimuth 179.435 deg Topocentric: R.A. 14h 39m 31.041s Dec. 1d 40' 42.82" local meridian transit 1986 January 1 Wednesday 12h 40m 33.219s UT rises 1986 January 1 Wednesday 6h 32m 24.997s UT sets 1986 January 1 Wednesday 18h 48m 41.468s UT Visible hours 12.2712 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (1.000000) ? Time: Hours (12) ? Minutes (40) ? Seconds (0.000000) ? 1986 January 1 Wednesday 6h 09m 05.130s UT 1986 January 1 Wednesday 6h 10m 00.000s TDT Julian day 2446431.7569444 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (9) ? Name of star catalogue file: (star.cat) ? Line number (1) ? 2000 00 08 23.265 29 05 25.58 1.039 -16.33 -12.0 0.0240 2.06 alAnd(Alpheratz) 4 alpha Andromedae (Alpheratz) JD 2446431.76, 1986 January 1 Wednesday 6h 09m 05.130s UT 1986 January 1 Wednesday 6h 10m 00.000s TDT approx. visual magnitude 2.1 Astrometric J2000.0: R.A. 0h 08m 23.118s Dec. 29d 05' 27.86" Astrometric B1950.0: R.A. 0h 05m 48.257s Dec. 28d 48' 46.14" Astrometric of date: R.A. 0h 07m 39.711s Dec. 29d 00' 47.45" elongation from sun 93.22 degrees, light defl. dRA 0.000s dDec 0.00" annual aberration dRA -0.215s dDec 8.66" nutation dRA -0.829s dDec -3.45" Apparent: R.A. 0h 07m 38.668s Dec. 29d 00' 52.66" Local apparent sidereal time 8h 06m 58.673s diurnal aberration dRA -0.009s dDec 0.10" atmospheric refraction 0.444 deg dRA 78.482s dDec 1224.21" Topocentric: Altitude 0.692 deg, Azimuth 310.658 deg Topocentric: R.A. 0h 08m 57.141s Dec. 29d 21' 16.96" local meridian transit 1985 December 31 Tuesday 22h 11m 03.676s UT rises 1985 December 31 Tuesday 14h 07m 12.434s UT sets 1986 January 1 Wednesday 6h 14m 54.875s UT Visible hours 16.1285 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (1.000000) ? Time: Hours (6) ? Minutes (10) ? Seconds (0.000000) ? 1986 January 1 Wednesday 8h 26m 05.130s UT 1986 January 1 Wednesday 8h 27m 00.000s TDT Julian day 2446431.8520833 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (88) ? Name of orbit catalogue file: (orbit.cat) ? Line number (1) ? 2447120.5 34.0897 267.3835 73.9085 167.4675275 0.00045478773 0.994811 0.0062424619 2433282.423 5.0 0.0 Bradfield_1987s 5 Bradfield_1987s JD 2446431.85, 1986 January 1 Wednesday 8h 26m 05.130s UT 1986 January 1 Wednesday 8h 27m 00.000s TDT ecliptic long 204d 53' 52.29" lat - 31d 05' 24.56" rad 7.646820E+00 light time 65.8125m, aberration dRA -0.404s dDec 0.72" true geocentric distance 7.9128960 au equatorial diameter 0.00" approx. visual magnitude 13.9, phase 0.996 Astrometric J2000.0: R.A. 13h 11m 51.636s Dec. - 40d 14' 27.86" Astrometric B1950.0: R.A. 13h 09m 00.893s Dec. - 39d 58' 32.62" elongation from sun 70.84 degrees, light defl. dRA -0.000s dDec 0.00" annual aberration dRA -0.252s dDec 12.10" nutation dRA -1.004s dDec 1.38" Cen Centauri. Apparent: R.A. 13h 11m 02.487s Dec. - 40d 09' 47.33" Apparent geocentric ecliptic long 212d 52' 43.46" lat - 29d 56' 02.71" rad 7.913251E+00 Local apparent sidereal time 10h 24m 21.179s diurnal aberration dRA 0.015s dDec 0.10" diurnal parallax dRA 0.048s dDec -0.97" atmospheric refraction 0.583 deg dRA -89.452s dDec 1830.02" Topocentric: Altitude -0.071 deg, Azimuth 149.460 deg Topocentric: R.A. 13h 09m 33.099s Dec. - 39d 39' 18.17" local meridian transit 1986 January 1 Wednesday 11h 12m 20.801s UT rises 1986 January 1 Wednesday 8h 27m 00.770s UT sets 1986 January 1 Wednesday 13h 57m 30.796s UT Visible hours 5.5083 Enter starting date of tabulation Calendar date: Year (1986) ? Month (1-12) (1) ? Day.fraction (1.000000) ? Time: Hours (8) ? Minutes (27) ? Seconds (0.000000) ? 1985 December 30 Monday 23h 59m 05.131s UT 1985 December 31 Tuesday 0h 00m 00.000s TDT Julian day 2446430.5000000 Enter interval between tabulations in days (1.000000) ? Number of tabulations to display (1) ? Planet number 0-9 or 88 to read star, 99 to read orbit (99) ? astronomical-almanac-5.6/aa.c0000644000175000017500000001702306616726316014402 0ustar jrvjrv/* This program calculates orbits of planetary bodies and reduces * the coordinates of planets or stars to geocentric and topocentric * place. An effort has been made to use rigorous methods throughout. * * References to AA page numbers are to The Astronomical Almanac, 1986 * published by the U.S. Government Printing Office. * * The program uses as a default the PLAN404 approximations to DE404 * for planetary positions. * * Warning! Your atan2() function may not work the same as the one * assumed by this program. * atan2(x,y) computes atan(y/x), result between 0 and 2pi. * * S. L. Moshier, November, 1987 */ /* Conversion factors between degrees and radians */ double DTR = 1.7453292519943295769e-2; double RTD = 5.7295779513082320877e1; double RTS = 2.0626480624709635516e5; /* arc seconds per radian */ double STR = 4.8481368110953599359e-6; /* radians per arc second */ double PI = 3.14159265358979323846; extern double PI; /* Standard epochs. Note Julian epochs (J) are measured in * years of 365.25 days. */ double J2000 = 2451545.0; /* 2000 January 1.5 */ double B1950 = 2433282.423; /* 1950 January 0.923 Besselian epoch */ double J1900 = 2415020.0; /* 1900 January 0, 12h UT */ /* Data structures containing orbital elements of * objects that orbit the sun. See kep.h for the definition. */ #include "kep.h" #ifdef __BORLANDC__ #include #endif #ifdef _MSC_VER #if _MSC_VER >= 1000 #include #include #endif #endif /* approximate motion of right ascension and declination * of object, in radians per day */ double FAR dradt; double FAR ddecdt; /* Space for star description read from a disc file. */ struct star fstar; /* Space for orbit read from a disc file. Entering 99 for the * planet number yields a prompt for a file name containg ASCII * strings specifying the elements. */ struct orbit forbit; /* Orbits for each planet. The indicated orbital elements are * not actually used, since the positions are are now calculated * from a formula. Magnitude and semidiameter are still used. */ /* Programs to compute perturbations. */ extern struct plantbl mer404, ven404, ear404, mar404; extern struct plantbl jup404, sat404, ura404, nep404, plu404; struct orbit mercury = { "Mercury ", 2446800.5, /* January 5.0, 1987 */ 7.0048, 48.177, 29.074, 0.387098, 4.09236, 0.205628, 198.7199, 2446800.5, -0.42, 3.36, &mer404, 0.0, 0.0, 0.0 }; struct orbit venus = { "Venus ", 2446800.5, 3.3946, 76.561, 54.889, 0.723329, 1.60214, 0.006757, 9.0369, 2446800.5, /* Note the calculated apparent visual magnitude for Venus * is not very accurate. */ -4.40, 8.34, &ven404, 0.0, 0.0, 0.0 }; /* Fixed numerical values will be used for earth if read in from a file * named earth.orb. See kfiles.c, kep.h. */ struct orbit earth = { "Earth ", 2446800.5, 0.0, 0.0, 102.884, 0.999999, 0.985611, 0.016713, 1.1791, 2446800.5, -3.86, 0.0, &ear404, 0.0, 0.0, 0.0 }; extern struct orbit earth; struct orbit mars = { "Mars ", 2446800.5, 1.8498, 49.457, 286.343, 1.523710, 0.524023, 0.093472, 53.1893, 2446800.5, -1.52, 4.68, &mar404, 0.0, 0.0, 0.0 }; struct orbit jupiter = { "Jupiter ", 2446800.5, 1.3051, 100.358, 275.129, 5.20265, 0.0830948, 0.048100, 344.5086, 2446800.5, -9.40, 98.44, &jup404, 0.0, 0.0, 0.0 }; struct orbit saturn = { "Saturn ", 2446800.5, 2.4858, 113.555, 337.969, 9.54050, 0.0334510, 0.052786, 159.6327, 2446800.5, -8.88, 82.73, &sat404, 0.0, 0.0, 0.0 }; struct orbit uranus = { "Uranus ", 2446800.5, 0.7738, 73.994, 98.746, 19.2233, 0.0116943, 0.045682, 84.8516, 2446800.5, -7.19, 35.02, &ura404, 0.0, 0.0, 0.0 }; struct orbit neptune = { "Neptune ", 2446800.5, 1.7697, 131.677, 250.623, 30.1631, 0.00594978, 0.009019, 254.2568, 2446800.5, -6.87, 33.50, &nep404, 0.0, 0.0, 0.0 }; struct orbit pluto = { "Pluto ", 2446640.5, 17.1346, 110.204, 114.21, 39.4633, 0.00397570, 0.248662, 355.0554, 2446640.5, -1.0, 2.07, &plu404, 0.0, 0.0, 0.0 }; /* int otest(), ctest(); */ struct orbit test = { "Test orbit ", 2446800.5, 1.8498, 49.457, 286.343, 1.523710, 0.524023, 0.093472, 53.1893, 2446800.5, -1.52, 4.68, 0, 0.0, 0.0, 0.0 }; /* coordinates of object */ int objnum = 0; /* I.D. number of object */ double robject[3] = {0.0}; /* position */ /* ecliptic polar coordinates: * longitude, latitude in radians * radius in au */ double FAR obpolar[3]; /* coordinates of Earth */ /* Heliocentric rectangular equatorial position * of the earth at time TDT re equinox J2000 */ double FAR rearth[3]; /* Corresponding polar coordinates of earth: * longitude and latitude in radians, radius in au */ double FAR eapolar[3]; /* Julian date of ephemeris */ double JD; double TDT; double UT; /* flag = 0 if TDT assumed = UT, * = 1 if input time is TDT, * = 2 if input time is UT. */ int jdflag = 0; /* correction vector, saved for display */ double dp[3]; /* display formats for printf() */ extern char *intfmt, *dblfmt; /* display enable flag */ int prtflg = 1; /* Tabulation parameters */ static double djd = 1.0; static int ntab = 1; struct orbit *elobject; /* pointer to orbital elements of object */ /* Main program starts here. */ int main() { int i; double zgetdate(), gethms(); kinit(); loop: prtflg = 1; printf( "Enter starting date of tabulation\n" ); JD = zgetdate(); /* date */ JD += gethms(); /* time of day */ update(); /* find UT and ET */ printf( "Julian day %.7f\n", JD ); getnum( "Enter interval between tabulations in days", &djd, dblfmt ); getnum( "Number of tabulations to display", &ntab, intfmt ); if( ntab <= 0 ) ntab = 1; loop1: getnum( "Planet number 0-9 or 88 to read star, 99 to read orbit", &objnum, intfmt ); switch(objnum) { case -1: exit(0); case 0: elobject = 0; printf( "\n The Sun\n" ); break; case 1: elobject = &mercury; break; case 2: elobject = &venus; break; case 3: elobject = 0; printf( "\n The Moon\n" ); break; case 4: elobject = &mars; break; case 5: elobject = &jupiter; break; case 6: elobject = &saturn; break; case 7: elobject = &uranus; break; case 8: elobject = &neptune; break; case 9: elobject = &pluto; break; case 10: elobject = &test; break; case 88: elobject = (struct orbit *)&fstar; i = getstar( (struct star *) elobject ); if( i == 1 ) goto loop1; if( i == 0 ) break; goto operr; case 99: elobject = &forbit; i = getorbit( elobject ); if( i == 1 ) goto loop1; if( i == 0 ) break; default: operr: printf( "Operator error.\n" ); goto loop; } if( elobject == (struct orbit *)&fstar ) showcname( &elobject->obname[0] ); else if( elobject ) printf( "\n %s\n", &elobject->obname[0] ); for( i=0; i?!<='?!Kfde}ʎ?v΁?]YXR 7?=#+O[ DXw r7[ kO1mQM@;1N_ݐ{a] k> 1#N`⪾GOT٩A "db c^a/0VpD%aT$. uF: 6%|:DQkzH9I?t$?)L%!FKAyl[nlUv ӍX&;ysTo2 Ou08O{z_r_[ab lQ.;1:lJlJ7LRSí£o{ 't ҉沽\B f -3"x+,vm{l 6·Av|LYga)=y̔o)k*|&igY>Cy<<|?ThivJ*u9!K9(^Ԙ˶-ީ*ƺucoVa;B;1EFo%|_ NmVfLo e(+3 {)s?@s@0"C[[cg]Q ,!q/.{j++]Cn:d"d^rW6I>H\ EV57 .\e'Y>k|Per `<,'T٪Zlh zS0,}UDjeQ~Wސ 6v[A{}g¾v% dok}n8_ :@p )$/(AkBmliM sy\IWWU ClFlVڃm'; 6}[þʰoKط5A&܏뺇lS8YV7eͽ+?fj 1^2Ie   y%ݣ@[ t5B:mvfLVv% ՘mQ1Tþְ/ .۱%?G%lRj I^?ٰ=z fkhՎV Z>kAP8(^T Jejessl[of ɛ\רEw=U;}?r}ͫcxq~?~FѰ36X#c`DFG f6z85&ɰd؍*/LI[%%llz@JNH{xa ~yRBBc2QnmeJodI^y^ %_|o|L^E JkKJ_(m {GMtd TO2y5f>p(s`ԘmJ4lCeRu U릴QUZ9[gE#&T|PmTLh5Pާþ\ܯ: dxh3oD LM)vuF%{`?zUnӶN[}<R;V듨涵(mAP5V[y;!I̡J ⁜mo1[AFxgx%*؏|IC$8deYi }|;m'ڎc:&A #~<*]% v[T_D X͡ \`: sr'[?,T6w}dI(L78'=OD;<#g[3c;*O9`~ElYd9~dÐ(d7"k%7Q3{%*,<3T;cVtyxXW9Tɚ_Ø dyOq1ڛW_R>ކo@TXJ.V}Zۢ6|ZЋSy(lN$n=L#44ОEU͂Tei,[MIk6JHRREPUY]0`Ė6q[qIBFs+Г MڒۄVF(XuEPX-<܎MQ5oiHq/C|e>EF C{raɜWю5tͰ`a:jcplG|V 54|r`U]$0lhLNvG2vvքvk>481d(0ؚ8"݀Ϥ?0bRN^̵k請 ܋P(6C fBx%`O&_4$R k6$+v4obdoU *b>I3U+lF[zқEE냝|D grLvye$gjmyNN 50\ME5~D*IC惷>ޟ# VHji }$*E_7RVQę֨vskj~iDޜ-'tlk?rPG)Z@T ]nE&p:ο=j|̀b5W?W֬\En)& \n3잀B'0x2 .me^lVL LWVnXlhZc? ә'[ z~87gG*|rSrU7p(6;JP77k:m:}vJ{l- : D 5}PT|(A;"ohCF{8Y K_ juMLATbnAGO;ݶն:ն'q '7; - jzDkK1/%>-2ot]{r 0Ay|4<. \1vVsEOS;*aENcۛkm2E }}[W5PSuBjiQuIMIy>+%<%ۍ9@uf>ߊQOe~W^xo0bݮe~%7F5O` F]"jQ ڮuE]Q{s#]k䝠 mā\v,%[Ԉlu9QА+ '$kHw:~ĻXrP*ju>K 7Lb|W-pFUhRμfCMrzQ-"T^ r;%_tޕ7E`4pа n(=?ԹRځYřEz14s\}7= ˍէu_q8܍X;LL^@&U+NR8!@k'Bf}ф;~e8\c|\#މ ;1UZqD#EGx-{ʦ Ri/8Y\ OɍC^/68?.凋5YrدݤLn~__ nAu Nvl}rUCn,=s T6KqE#Ϧ6%86yF,mKP7?BPHub6ȏj ^Ul}| 3a$Tl]}:S|K;ԅT1ҝ ĺ康@ |Ic8 %[/UG^D"H\fJuAWPf~}_iFIZhϟy;7;oDnou+w owh,% Tax[ոa0qm6?q⌓/D̓1B }$P b'M>/ n9(A{S>ܩR༢frofTlQѶll%EJ=KpCOzEeG1j-EŻMQ sm.?XjZ˶g1s= `B/A1F_h SH#^gpt޹]{mBAo%CϨ:1/h@eU$M"[1;K[({b {1#~( bub@ L0N' & kx"LL%*P^QGM0mSdEFI ݝ1䳐Jd#c,7Tdk3Ƣxh*x-I\`i?.˾%Ŋr<'h 9l)[\E*3UGeo Jͨm8WF Ao}ҭj&SE]+Zv)7^QۍYzDќfֱO@Sx nj}x *uL@j _5m~2qlXJbւv2'/y]1?]vYd;٥8~FZYA$Qʋ2){s!cU ٞHK¶:^U${P^}Qv%W0I.e%|!zv~^*_*n Vb]qk}%sFraznˤbj;<8ѧe*vBP͙.Oڎ1v9K̈́ b`UM/,~!(N=ߒ~sh:HbHˆҧʆF -M5Iy$o!ԉ|'I)f;hEO3Dqgx"p?UrUEPF55m$#&ٰM&QT0lN$Rk;5 2cm^ũ\-Ų{3^?9a~TRZ%gAWc'<>:/D2 qPG%BE#@UL$ﻃnِ~qj6tu%*VH/pȁېكdR\˻~:tY*?oEc/ǀ\D/Y ͉nǭӂUaJ2?Y\kuCZ R+oP%*4Jiw`7/N Mu#UG1#O|I9[͆H âB\#W=* erRpj nS8ϗO0F? "ڢP ,MCs1W&,98vrb ?ŨQ_ %~ -B#d \~9G!͚8E񋼷fGɮ{4wk!F'3% O>F ?ӎҞ8J 2as㄀2}5GկAN !8up$R@N yhZyp^t#KC)QڈļQ/LzO=آ稺l/ezGtu4LmECb>[a|ǧDZ[/%X1(Q$1oS QJr4>Ӫ [h`>ficcFvm_F *|ܲudAa7;OvkTxv%^G-XLphs5]mGqMiZﶀ ZrA_-(7W߶sۨ <;Zrӹ:[Y悱 dM H[6k橓|qJ%FZ;.MvK5{&/ʩ<^k%@13J&PCF[qb2be)ݴ2{i&o_lz]P'` 2y,21+b{2V*5* EjL lQqj`,ޱ A)LmìDm*E6U-QY:VLZ|fkm}:\bxٜq_~b+M'alꡠCŵdl}M&nmpX~ej2eV7vQYƴ/֡A 7>mg ;2'$ԙ8Pf\|(q "Y1* z[$i.#7/*rk1\(x!V/6XrZ{hlkm)ztzr06?zt*pZh- ; nG'ǤK[q \`A]=G߇LuęM YC7Yq T5,E*hǃG0yn[_U5~,@on˚;g,4A Nm~Ьĭ/ VHaN1k[`u:Vjt9 w3%GTFh) Gyǖ$OF{ALHn@ֱ\ &ŸS@$ޓQ$&K}M_gü>{g0a%@ ք4Wɶ}mՑ0둍!pNқe1& !^%˶mTa6x`҅%qjl!%; Xm{q"`Egy]"XTeZ%$Y H.Ož\ )lX,Q"_u4E,vOw[Ø`N@mއ5]ej}C($IXS7l+_U2>+nGJ^|bCB𜫯ԯP$.!B;—w?n@n aMx,qIw.~pldW"W@'-7Ģ'x^:wbr"ĎRҩ/ޥsnQ'ޅȶiTI[GCYo6lhkw juB zIιC6ahr bIPӳR etn1{. պI>.xY[Ytb5^Z'Qj?EHkF_\2gqdGb*U')cTBdYTt^zc3؄yvZÕE]|d?=: TJr?{/'`PEjˢɣϾka$**oQl<äBU2ܮv_>m}A*Cj8V 9Ψg/y*9wԀ~0)Cs\Ƨ.,#0r6LR3iHWIOT]N"*`大gѫ.'mLz^0(RRBWhl`&qE* T/}j>!5pT .jIp&r`8 *3aP*:fإT,J&$1jT tM0UEye\AJ橰j>KJ5jx EU./0U)B ۢU lWv_{ &n3SSWiRGqU QΪ.5uc~CCe?Q7PyyqWj_NdFYlHqXM E4Sk,;!L}Gz=-RFELG&6ㅶ1oW.emݒ~׽b#3g:Pr!v>RydzoOgW~遗*OX"y$y˻'VerFoB=뇻#nf/;/>/s=mlpdIֿ\菂ez߷l˚a\W4glmGx}?B͙ylS3X)ow?bg]8{| ;M5[:ſdϹm393o6j뷟{wJL8rS>x=黇f.lfm~/+uQsKv;fK?CߚrCW#~Ԝ_X5os͙ۛc3-#yj;w"}Ⱥ 5{5cMNJwdKSۡ?y.Ö̱n?}pڱ̟}x2crY5_[լw^ykڛٟ=K9nZ⼢9}^i}>vD|2?_|=_ج.}>uȿ~kfrgG7s~Αݯ g-D&fnH|'履xYy=^w QE:*-3.nq`|r`Mu&;12Zlwd{wHݠl⳰XCuW?"-ZF+1vwVDM!zoFq X]AѸ; vt,7SMGhG@.}UDb?bi>"]վqBtWlDu])3XU{ɩEAz"hr !7@xaXue-;K*1SrElO%w}oUҋ,! {`w N+mm,Q G+ՃcՂvT>^&wo4Ѷ٩z#g2>}?䨱|l ^>6bJ`[!G^$Gym-."i B:>ԭ՟>?ѕ +(gۀc,j|9?I4|}s8E vQ.8# V5 ~ Xux%_ax_ mH;Q}Z̐Ev- ]ȂUD MUF4UۺTdcTMJD"qHdbŶ܀ j*}d.MF F!D' N8y!;\ w+;f5SFŤuj w,Uponӑѱq*YH!Aє" .%* #?|=bE6QA9TnX o/'^rOlJd5Sqqw)JtoK>'˵/Q\-UҋxoG/;ݹJ%FVCwػSrF++ߍ&~}\x*+}]$oqrSe;ڧ^Ѯi_K4҄u\N ^JmuD'ؗH J}4G9e9*w$nّ-ɎŒk{mGpfyGP lB@ick"l]0 B2՘l6 V[0]?`U~_A2o;LCwKqF ~fyR< ;NZѮWUS&GX~THG~Zə@\ +4HD%j=.B}.AnӁ4zU NVj?KjG% " v Hpu)M@^B*2M1G`^5Bm'ҙSk'ދ`g=Li( hCm0v15 2engux7v5+nujp8pTfiZl}QP_A@֦wIkEJAH m Km|6ԈEIX teMmTQ+o?¿ 0wOVF Jc oJ7+oP"N M9 DDIxtQSCe%:GR%"kQ`߫0(lV/u{/^4F MLjOK,˪~U .-1wUo] V={eW樎i4i(/Z])#Nʡ0<}u+wy]3TXj+'3P7n(ʿUZ0Zɜo}sjU]Mno^}#/}K+uU85~o 8pR E\ I9h5BpnūD0jaȢˇ.k2 rxR:zjP!u Nc{~ΔE /)as$ 8=|=qw~eV/A(֡yx}Yn>[{QDg˼dSԉao$GlzlF/YYբSUtMpzZa bpBabU/Nj׻DWT$6¯qfunzBCHӒ9ig!ꚵxB7Jp ;_槾,ϿdM;o_i}isJԓQJDK\P"?FI{Қ(v]֣=Ci)ҎJƴxyz( oYЬ&M M?y\OpWD&p-}& }Fj 32%SÍ@o;s=-^W(nB^6&h6ș M|p}+1^[z,&,(~t7NԹCWHGYC_+Gs,%9-E萫<ࣻb52[&Ӄ~?&q7#WدObX=Q˕O䈁& bo+q`ʫT $_~/bub#5Xs嘓;J 7kҒiW=HKN_a54v UgF&Wdkf,ĀVіo#ץH<:7J<*ca0*U F2bL\ Fk5:ڀ  tF{ ߎ>,2N<29كxږM :RykzGfk|Չg=k{a:iANTc)OFo- ~N[>"nMTaO__\ o.>هe*FL3NmS KBk Dvۊl6vNR*z=})y,`.JQ큶{G ”tȅyBNkSʯd]#MKn+8TWx:Byme6/,vpW%7U+iPTXqR>k姖09|>:GJYZ&|Ǘ.67GfLG sȃtHİX|Tk2Gr pL!AP {m4k+e/mGe!E'1_uj~V(mA-&(L緿LIBNP6ȧUOaП{Bz9I{묨9>1FvM5ە絓i`PɫjWЫ\W{ hIIol+h,jRd UW2+$:{c{FAVwʶ/r ~B>S/̶FEmAHنkR)FgDS =qXwz ޜ_@ɐEUqyO+Ԇ3guzFTJNKIv$r\Ok#12xL^V1~Apa5_krz2EgA脶YTRW ijfئF4 T$GUw UjdrST@%nl3 A"a&t^J8[^Fx`ƒPѫx/!\q>]X<V@(v 3=zmU&)h~GgYJm]UJub<`.ۉbmG7՟Ŕm@y@.:+>x7;P!WWǔR W큟>$Retm!+ٵm֮%zZAbiWxLmD6ٶl*y|p,4(~K9By`Vɛģy\d"J$:UV[ Zd-*0yShM&'@͆%ʐJQ BT܆TI.º:m,ĻEk9zE5~|dN.:6:OwO4]6z{<Dz} N.!$_c3ysnʻXj ߩ2Lޘڴ?9-5Y&kK7 /A,(f0OHjh>$ܐ-[=\)e:[}JHiB}@y!u3< 0 {Uӊ=?9L lh[D+8SZ ȴpԇi$ ؂  ?8흠jw MD:e9̊iro&4wQ?۪N0]9!LYwEy [eQ[^ѽO-bJkPH+8*OY@mtֱB2K<[&w>(xÒlib %2O{`1Jl#Agn]Ѕ:2qZcAl\}1Y CΪk?V$+U 'VZUDgrC)C&jFjH]my`ޫ f@T[7AM`$0#Jg7XɼdMolxEˈubwVŻ#AY=(}}U(h0kL^K(B itaR-(ܥETlxsp0m9fIN_d>xN3h3o^Fɲ QYks+5У;"oOS25?aYqZ=kےUl?2ʉS<m#z!.a}5y &6h}lW|G˭# *~[};g]$<܋  :8X ʡ82䔲~  XLhXt+v*ҲM%/+7 #0.77Y#Ql(,MƬDY@V9711m ] Hw5*h}ŎjW;jt;rݟ wlUxMhu^erG.Elv'@zB:ɴیg '6~w*."p'0;ߘ8c l1Z+Z Ge7s˗LO@cWP=Ec}K.ӪӂW'Wf91+VeܧogϮ GJ(BOɱ,Q>x#}{":Iٓ*FG .Hv; %"p"GYVgV6=Ω8 J\6c4([cad# WRA&=v3wUٕ|kKr?5F@^  -e~Q6E3rM.} u( /1% Fқ>?}P2LB\OBx4':J I3!kaR|\AM9ZOVQ#hb之|ht&sJ(Y!fØr]uPJ jKhX 5&!~ ަP+U dG9W T(w4r"JAOHs%QlS5rspo=_@?w<vȚoq\gyUį:o{Ec i|<ף@BC;,~y ^ w#LrDt _:%O#TP/K殺37[c~H@/5^TdT? *YEm?[TN" ¢~-rQ*jc,!t'MKSfU[?ofC6/\zpXZP^eNXQ[;S95 B=<=sX:)57⭝ӱWs0ovSsvfrà얦Ne*Xqfqkp?/ "\Y B}¿yu '}2.N(msx3Z}aelE|r=])+ЋdOސxi"%$h x犦W< [*F@TPWu@fFr{M]6kTl@#YXT"t+MJs` | vcU ƱF 2 w9w.]:h ϒw(FlO"v\hd}ˎR<9 $z ͚X wxz[w'~Vo;3`6^,aU%GƖzbaLvV! L8:q苪jh(dp2YvvP]RRL1   ˋC. e]' tKk/׈g1'#mER-淨xeeTr.)Z7@7L'mcc1A5N vS:5:vfc(T%zXDϱ2%^Pm|~{|'2'h}|>'rq=wR{E;/_Cu07\XWŶ }q4]lmG`5S~ӄVhFe!ikƽ<Il.և˔8 E>u m)r"xo>OL33屯9_9X}<~^VKr&` ZA !XPz!#]pžy4n!ώFXƔ[bkW9ѻ/Fz*l@l"} 5/z)|m?>d|3TZѥ_n߻Qu0=$WJ#8XF|"2 x@L䟦< 3w{½ᖻoEܚ3domv~>^Btʹl FXшwr>\qI!rz&WpҞct~/7ۏ6mDndֿ!D C/Ch mfYaѰW.o+ ۼPS[)° 'a1jO:!^P\mNtOn-zGkt8蒬zj[):қP`;Rv]F&4N|F,0Iӱ&9(P6àR%> '!k~!îFBV`I'p,,Iuu:>~Fu rd"2SZߡFГw5ˍ&]U+#'Ab "4w9wPD]5Z`)PzZ !^Պ#'׭[К˞@O&[y_2/X"΍S*B,T<(H2z9(-4=!AKS/ d!%Y77tJMKO_5 fťF;W:`M:ިsL/|ҺDgXoqNcca~4G01uXs Yz1mDƷfkrYL`H@2k(*̔b̺H3D&`]=ӍȨYkYr`Ɔ ; EdF"qTtr|B֥5jYޫi#44t@-{@!G_j@Dd}&1޶CL<h~POb ^,]N p {<'duI1bK8Kt!-oe/ Jw>pKpl0?-2"[Tu=Û@"T'և/[đo?L;Q^d gѝa W2}J3 h^j ;6"^E]/{q`#K (#jeb uF9ЀF!Sƻe/PdfVqXחQ _H;U8/2Ptyh@ A+8Mi ڀA,~Ɣ.xf{Ƹ5h-Bo2K4,-B.*28R,H/Dt'2Z@l?4?O6vWk0H©>S85!(&H^P!hpJVIS(3(}tF /7ʹhxr1h!hE !+2=;e9 A`,złt9k_6 aJkuF}bo?`wug'>ң>`{tI΢`v#]>eV)7}&:>UA_Y1X~WwuȨNkĔ~2-WY_Ec5IVlʚ AjXpD(BgVHdkB3wb㇦ɼa^=T+?H~įt׺s ('RM,@TP/W(-ʱ_YR@;EZ`zoX ҂1 I҂iABIZ0QZ0ɿiB_20Zt`_9P(HC)vK߹?omh3caXK;KJ! EƮ=;śZB b@ph Yk3G&dՆt:DܯߣMHt n77F‚o\h,v[a^S?N -/NgU+mTWh }ةz$BYWΙuDUwh?ET1W9KYZl0;.߱:Qۜ#;a} MI< Vi!\Aht#XB07R2;~!=PQ W}AE.~Kh7˵ʠNQ2tquEπQDS^F]cHk8"6c ϧ 3?UΟuPXM*w0{|!74TI#zwSXv؛jXhi)du~謡\Jo‚m8]uPt,%ah^7PR(ݖ)h!QFc_C\a~Yuќr4KTeePX1h\%ݪqpOv BM7ZU>oy.Gؗ<[]Xp}6zo/p74{3cڌV[0oR]&=O1 ]o,+u Lugbq5خ{u^}zSYs\}y.:(Bj-Cho{&/K~K玀˗*>ze~cEa/dԩ&ŽJl[/m,Y[yUFl;[ֿvux{5%/3OG琅0#+1oEdW*) {*D}9OnoXlC`X)s7h4ɝD"~X+A#xSdLAwUcjr]8'a#xn2 ':&v_{'3a>LrFy\@d-s9g#>mn^1HmvC1Rߜ&  up)1+`3RT:e[lByh2|_SLlDhFJj.VM r^{ ^MuA \gzCSuus_aPdFZq.L߀k.u_rԧ.,c"9,2#y.Ne"{ymd*t_ iT,;FEL|(cJ s ֙B~ |* /Ν*uwrB.1ڈUUA[bTL` @;F\Q_qΧH 4;N}aF#g p,>O]SBol]d#Y;Bq#\8gQp 2`ͳf(i@!7Qǿ]mK?Jß XAAyuF:4{wFSwD%HugN(/2e,1y 9?D)GȂ;UM_7ԣ;֧y< uKӄIuX`$%~q~17yk h}7(x6F7/vFN"3uSZq$)*o!rF&^UXo;kUHw l2rs)3;}fA )꾚DHWvﮇG+Kefq ^Ƃp-FN3 ga9=yڃNPH-0a-"\D%ddO'8}+w" ^.M |K˝؍h | 2) `66u܈&,Tvuw]3PV+K"軤KvMgJ3?u޻Po,x(X%ចK3/Q}݋3(8ˋ}ŋsA'7 GՃg_Ib/W뻆5TufX*{t-K'^GM8O̭0 [zVhHbjo?>`{܉E&9 ހX7Vʝo")Vg^{\V=$HʰjYP"a;5^<$tN$M(qRDCz\w˫X!{.r{qsYE'2Dͤxƍ vah8b һ3&d k<1vޙrP/r)"_ހ_!w { cGVZ1dr G9o>Njbv=mѡ'݇X8>B;Fm܄"wZ}phGRܫyp2/⨔;leWG2֔RDT.ϔj[1e^5DG Qa—^c8$ۛ% ;J(Σaz,/M@jE%jŞ T]mK,;-0Z-[j7O(XF#lTځ+mա!k64b4ň(3C>~;} PS}wBWMS/*?k[ʨ5S &nIZy 2CiKYQEf?#(su*:nw @ O&`ꦞ`x(,l!X4&Ð⣾o;O'VXr>d:Ro@kjxhP32q >-NP.f DXAvLx7}Q^n>4}OFN:|I.6"CqOљ^S0}we|&NO& ^7*+<0'^j:n+^Ю)(e n,$,6hHv4bGF@"t(a?vRl1;ےdǍ)GQR1C-ǜy/t meWWiNi')h\87ƣkuu4nu1+ތꞫI%g6ub~v?jOFۀJ~}_Ҕi8;4e4岸AMiZP R6a4Un4j;:"/`iB*bό% NU 6bnڑxP` e{Qr fKkΨ&F:$O zJ<<~gH.[6wdi~oAԄ@U7aqdrXl*!;<3  #i[r φƌk)zGqFnE c%?<:>A 40'тmơ{DOa C;ME/[u3 Xq*mi&+Bqp=¡$)]Z6:Ǣ08h_#0Q^r(! va{)#'QM#s٬*7FeY&i.7X h` %s@/6L';f`Bp.e@4 ˋ}~gb0Y:X9QkM75A%j^Kw/ɂUԦw;ٖ@QF+_ Mh0?u|X`lqʹ7o@OU4JāpM1WA<5&2y1 21|(@o)eX f`ΑËȺ' ^1OrXpJe}z)TPz 1iN3iމ4l\3Pu6jO.W|X],*/Yj9ͦ jS[l( }6hP5~'k ΃I"B9soHzg|7->H7I&ܙKg<3ͧЈpLXzUma (g Ʋ< j&R]WRa 0qc$-pgdͥqҊ !P^ZaP<  x{"IBlY(JVġl eJ..h8F]+ur~>8|G\,IէueԬA'_1\xRYOkF*U'%yU: EYDٻ UlDwhZ6f 4zUc=:~N- 2d/{凋Ɩ7#Fm!^"R9>şfIuuRQӤDaMRJ5./Ou("qp˛At5V!k#PO WC`ⱡ؅%3|Lвa\}EI"jp xI i5>3\cTu_?NU`Or dGP6:ٝ#/r+Iv᷊2l.)(64zMqq<ҒC2idYu{ i|9iZ3/ rb>{7,BFuWFA8*k~А|0`t}4aJ:{I|fKRU$NDOi",c8d$ζJiԹQM#&~vн|sU3m{ Ⱦxwg <M[.kH$wB+ȡOkul??RK9ds6ɨ[%QV(FHy((*sX;^a%}׏n遷p"&+FV5!Ks*_j4LA=vJJ?@d}_sql>1`˛qL",xyL$|UqJ,މQt%~x0kcXq -bp'a݋$3l}oߛ]gJߒn:W؛۵73)^rKsc [OJcE\%+Պ^RoX VY[/Np`^ ٛ:~s.TI hK%! iLj̊5)^CƊ!\lהxchO6gt YCڢCT?IMYZ1N'd^}JG-vrZ|zgڅQG.!r ;"r"Κ rèҡX>s(| Ŕ^ᓅCir%[)x4FYX؇xN %d]|c6ՓmNvc\;9r,`bu hРY nruW_M6SI( : _|_i-Lsq8#|oD^XzzSx$Prőε톰"?a+9`YbeO/W8*`bhEK2 -T㋁YQW@_JHoNr|SI; qjhE#UuS#a෭L bа˪ο|{TQ`\OZ\X`ܘwfOQsL3FXν [^Z3mI.ҧߣ%wSstsw4&h&M,ۨo{>y92hOyyaMZёb@zkt)XMT󁻡~k_uْæ>/0\~U%[XX4~^3}.o*ҟ7?4S@\B%>@|] Lx󐽷$3 >0QǢAұzs @,#n Cj!7C Ws(Hՙ;W(XVG^"'.T3L ƿK7܆>Oo2@n/$SAgKiBO6~<#~~_I#l }~ÿ PNW\a/y~w CaSKJ (:9[tZѾ^B~l}J6iC.b64dN:AoCwP^S2VގsPZ)3ݧ?f㯩ϒamB` ,!l}N᫻y~{?ѺYz:I`F(kcx |"׼E Efb ׿:p %ڒ-YvuqxB}hn4/x)JIЍ=u)0|PD!Ę/A\5=n0 E=2*$[imZ 70DI");KOaSQ3mGՖr[28o6H_28 ȼ9r+ Ro;DkEpw/Akat]Y^Օ/oX|ֶQuB $w}87-Ŕ>@@l*4pgϲB\=u6}* lȮh h eB).u%)齾{04l-o2?Ƌb/;"Pmhj&@yұzc0Zc] 4KCJ#\|j{)gO3$[dEv99{SDvҶ6j$ުad_ߦ6Њg0l[gy`6"~=)Ndl1e+YPr^_\a"\yY L |VnO]tW'_cj@;d3lol(S୅XA@^9] 3ZCۮ\ ^9l޹T6rNB&6(|7Ok2\̛5(*B[=;hYG,nJ O4^CO0OQ'ҁ*ت* p- a&^0XQaX~(vx'$/Ha{yh k|ciXJP÷7¡=bX.xq/Kan4X|郲%Hl/NInထ;2yfد1o in@XgO]R ^sџM@\gBL?PVEg2|gO=M҉qZ*[\\,Kwȶ3#`/lGQz ,[Dv.j.h+)HEqU6q!CJrҢk%aJWW8p8˫$ 10j4h|zjZ@ϝq(MFlÛ_Mu3e ś8zs>*ueᝠkpf 2ОXhl聆z?r1y*{CUzWi8iڝv4zrէt~]w7lj5tuyo(Qnӆ1jE;n}9}1. O iY nQ6uyvgi}:1Leg }Ppj'K츑;4ڸ;&w?+981U9 2lQF_3?Qm|5X07!s=}d?L~8 ݕFdn~8e?,zi=!Y~Te1;?+vdn>AƘnO>ZFI<9#ɱ"&Gg t<1R=!xUM!r\Ƣiٹ,W^䀱\ʝb'KW@re7 GQ4Yhsʒ\$*lp#Sތ.3pOⅸؒ)-!CI-_.?\|ŁurE|#i&rYJNH%tD@g{ߖNR<U;8g?꼻Vzقwh %y  tgQ#(7>H9HXr1że5 OjħSJӛ*x$KϏ~)_bCoZU8Y;bڬB2v; U(o .m ?_'V@3_iw@k:;ZOWҷc]B'\6ւ \~W~ 4rZνy;ƀ2FՒX<^,nd[#}1+7B3Wb\~>}P \'ǛJj44$|@c5MtG${_=*瑺7:c«6}V1K_w m(0v5%azXiJ?pS{I|#2)<ܧ"n%"DD_I8 0b"=  ? `cá!J4=a cmcdG/މzkS7QƔ8WW?0W{"{s$E!$)\ym爫n7a{/j`HQE/ 6& D8(6$4N|__ađ#`UrgL#⚷$ѭ,z=+1gXE*`͸e:d~jX& o옎_~?k5`efWWԕ; ljuRC%-JCAc8^!`HHt3\9f 5J d 6S:j/&(bZ+وLM55J6MM !uX|FN&.22 QPl64XCOiz!: ƀibQ_9g*dvRP%5~?V7 $Y[@(Axi 7c_z @7qJn3l,>BcJp}QV>Hq:ScpYOQi('嗬'tފ9]Lg)vT!7Z)^#.wa8ؙ%W4}ajqwya)[~we5Pq_rK,_eɶmP9^陽b^axt!"Za[lHn=7lۗ EȶE8Em}0Xe[jJJ1BFP ?"@(/هtk| Ơ`,i)WLKXm@ױ_zB9دΆmg+XQ¦b; R?1^r7zn;  ڱ A*v<`{+J7A+͇Jϙ'ڻwBqsiKqan9cwi<_5R;hQSjϻ7]'ok.+Je?F!qW}2xwbl=c.[Kb\xWJCr]#QƬ!F4 a}I :w3A8D2pN1ܭ=%rLX#Z1U(+w|0R0d$@}K,dhڃםU+ =ߓc|Nsqމe/X6`b׼ЛU{m9;YdYG<6qՂdq&k\ӸvK *p=)|=D`\7{`\ H4nA?&h@ЬVPۀ / Qp!:_=}q輌拆i8hT/)g!n;vEo]X8F^b,uh!KאEV3$"Q^qvA@o'BQ~Wnhr< *^(?=Q x`Tg_dgX]U iX:oRݥx䅩90~pq3H  : [dIuʻ%[Ac ?Wcт1 KbKgwLQ4hPY@G%CG"0;$V~\@_ޱ脐<b6:]U=s 5 ,y 80(ĜOR 1簭J P Bϴb*8⩎d:l(ٚQ !Vw;=xl^K:NwH1iNuy[ҼŘEw9}Yv<Bv|z@ԥ0BmD(-CnZG4ϔ 'u!SV2A)VTMgPnX\&e\NJoWnuk1N_t.yj.mȥr =Y_[p-T,9*>4~m'PKj3SCWLvcՂ"vΖ  |NO2{zX;)/Y++Y=I:fd: ;OvL,oe}$S3'*pkhS(!&aƹlZ9l_ob vvz@um񉐳yLnΡ'텥G:tw29܌t'wmg1I!vGz~*,c8<ӧ5YatSx\>n)})8\͑an v#jp^]z8!o,$ xBs3+qgp#Dv p'+VʭcwU+7S[۸1XphPuQہVF܆ta[T(s?P^߷{?H&T›CC Kz곿w0 s8ô:g,W`hcyl>Yr_ĬT~]xM)x^/9S}6Tp)+/^GŦegb$Gn0q87ŗ>ޟd"I?_dK ELf?zsz X;g2WeD5'\%qjcpS 'jbܩ#R & RxB[ 2c'ѳ(jVɲӒ+& #E!.Ҡ|n^ƾneaya]`D93gpL[FY#%-9;61AR#hSlv.u_Bfdxle;(i >)Bc{>Rd)D,Έ%AMr"hSrXimj.FЦ;C9lE͚yfe\v}`WEЖ0SmY. to_Rae֪s؁\vG\A+e*Zi MOe<*rfe+"[agDMm?:";‹*nE2%"O*M?WD`_TSd^y8<rde Ĕ3xdb*2eF}2kr09A/( KWzH3xp_.V!h0\~(R:&jαD9B= (ȟ7A+} fH %q>[z F){ykؔxq\;OQU9GR)UؼՀh֬eMr (eK69))c,#&m1H=C]O)\LߌZds CjX{"<]E)4WܜM?9ǘ?- Ȍhx 58p?t5\󡩧 "6ĩA~Ÿ7 {6Z~zz]>;6⃧2qBDqpl~-5պ{!!5ʳwjsmT|7\MJbgALe?"rFw<[SaNctsMIPqrzrdy6,7FpוLtL?f~^w[8^rn_%c>8g8;O릇NfxBId`:Nx-Q7X0nz@=/ܒdf*#R%P):Dz`vu][u66Q|y6:jM nd~SLP-+4fޘ'4/XXjc6N-ڛڦs|C`y񳍠t)U1ԧɎnfwzB" wx#o9gr<_ 8<)/&泟 $Iܘn} ɔ\OZ>9djgR>KH2ᙜF$9 Hbܒz/Fsx#gv|v"X8s[>@Ó}4digj>5dYgZ>@t ;$r<}Iϝl@s=3٬$s<l@33]=d}gV>HR㙝_P"i9Bs=|v,QdwҒ6ꙛ8fgniI3#iSl@vA> %-ՓnHޕ}.HKgQ>|$>J8*JkgD^=Kٛi|;ϵQqs]>k"3>5D@r<0Y0c+:Q [7" hAHc.[| '/y *Nr]X a!MhZ4 -B#Z.,컐˿D<^r|9_|<8 *9y&щaylm/o /I /Zݏμ4K8u(LAg;xFsq2~"zc& 3V )\\ae.9MriVȳqHFEv+MTٙVmټhRcflE7WX6g’CDCO( i:CKk#[1LrԢMĝaVSzWΣ{HЩ6bHrh)o+L!%ZQ9S$^]M,Ih!&{~D\rc/QbZ o -|tka=z;Bӛ*Ftxد-G5w8v;D Ŕl('=ӌR.upG)Ao,7RAor#C5Pҫ KMaaW.f>t#ow2@6Ls _O nG1<[jBoyVn2 ,kAJ撙[4&kN79E,pz15ʵ/}ӕx_IW2Gj_M<$/߳Yx/J}rmhfhFT=4،wZщuPqUszcq& %}\'6 V<^%.ܓ̣Zd.oEm}dZXz't?5ލ[EfS2EIK>SЙ;0| 9+#iG ' P-ޡ㣞a>/6KrrfB'`ؕhTS8wYu/|βK;EP&bv!WTaWv؇o oyajiG#wijBcǚ8akg[cH;wӟSKN  ǞsMs%)#]V *J/r UH|ooS+9R4伵Ȑޔ?8 ?|^p\S+bb 7,/^P=Ka _ӊ8^e1P?txL؈DyAwqs } dY( -'⽹Xw~ڥ3N~æh6Q%u͡nī?@ wCaC:ڛCwgCPJ4i$įB&{!FptkX-7=y<e>P`kG%x:-QN(9=J7>k'RwLi/_(8x{!-ݍf|s1^1+po29 Wc5 S} X ]_IY zUպ0|: 1?nT<mfR5/b7:4;w= rCOA {Ϭ6n>6(N-r>TYv84oá/Wɲ(U' ^,|f7- 9F- q1|LhOn>L <=/U56w63`E(=oKC9SFOUxlRZcV<^C7Tf86|Xq-XO9g`Kߛ?>.l;W*GbK|1OD ,ݸ_?H[KS0ζzcZnxrd68-?MP+8MMt5~l@ü@66VR<8]37Id1F߈ X% @1#PrP]eKI_o'B=A5Jox =Hr 5eqczNl&1Hj"orPv=K..ZJ.>rwF\l O~SaiVgy/ l6ۺAL[o3M% 'x|pk%) & //Lxjp(w~U7UՆOG%Y߅y*NO~: J<ߛ{=PU6MuS+ a韓xӨ:ݔ WY!5MOzok _,_`5{3Mcޗz=S Uu/ Y Eo•ˌ\3QGAN+`I^a8&jrj 折 gȩtJqcIl䖖U@? )d]_Wx눕9fyþ ^0Qo@=,;9S7.8:S˫W2~P /@W!_b(^ iaT(nPf8}:vv>'~ v]aSê](FԡpՠA=j,$]>Uxr?8̲:Ι^A|"5~rs#~r^7OsaA{'x M=)DGvuJ# B!oK| Rh|XRX`9뇑SBx. }į3D1RzOil/vDo_Cq4]ԃ08U0vܠ2ECQv Kt B/ {zH_͠A^|ߟ8Ɇ& ʆB',Y1jR(I;2"dŊd`޼>4U7oDKU3r̎cZF%iZrLWJpywBE]kt d=M㥡0EBi1tCdlX%=O4Fh~Hm:Cvu:_,k#:EͿ|iՌvzoB|oO?eD6a7XSMvD,^@-GaBoZrEy5g7˼ҳɼA\6e*a`-u_ W#+(;>ڲ"|5J՚?Ts䱂pdja CxݔE&3yYK|5 JeT*mYV6_Mbm *HT[eiU"4nPڀ+,=_R| زiM*[x4WO5֜<8 Bj`Ú/̕zFzP:gaBCsEDYBxAج=е04I7nJ.١GHwIByQ[c%tohG ' re%K8qm\7;=Sp)Wb~=l_\.};5o\v|E?NHi5Z067Uꚸ|ğx̟O ~֫_lPl[:/1L?iUZ*i~}Jg؊b\~;$ sQo6hLjCAFB0M0imuY[yg L,GJLeHd {kc)A xg>O}LiW~+k.ꫵ_\GODskg?DnJֹ$oF޾2 )h i?Z^8?Aj 보 ɹs &>YeL,˄A,_Y}CcStOh=|]˿Lb/߲2Z~~T~{LDNK@o|j \c*+s`OekYoc*!EVsL)<}D1Tg0 "z 4@#\~ˬI1>]?Fc(gYe?^㙡/ 0b37Ur8}PDrKt))=Zԯm ǶTiݱOjw^BJx 1/;cɼal(zL]w~ =Srz o2 r E[xf){SK'e{GR9"-a] }=nRUX멄:,dc(% E*qVVL8 pL aqr# Ij81L{*fw`ePn!6>BV װT˿5.[{!guk;#%)̹_M_H !kD)B+ "ʆ"_9aq'&s0f1vb*3mo"5C6N@*! ÜDgish0P5 sNNߋb.׽}~FD4ÀM"'OimL r%߅_zX˱뽶<6Q:؊{YjBS}t\4O%EΑ i;咨T /r~ }~_/;I[[Bg=****c,vQ@P`cUb(TD;d<~߽Ͻ\4{6d2$Ģ3噭ia0p00jV.Eg}QΨQ"ŋ" {Bq u3whZCnfU?hBX!fR²͖r+YOXd"+Bi0sp>Q߂Dڰ=Sb\/¹Tt?1)¨{ D5yH3͹u7s saoj?xr&MhI>e:}ߟ﫚l#5Y#MgH f;zu:)OIn0P@4 GrF Ck@oltxT7 dF*Wyb/oc<u6/o6Ƨa1?{ ][bTn93GUc4 R?T _$mi3T8;IˬU zlC { |)lL6`vmȷR4DM:4w~>`HcS8rb< %LdRE}> V?&Ut%Ͷ`Ik})+ \l3reE_v=ỌxcwvzqsG~qtğN1)|; ń+T⧛f:r^[Lf,~J1h<5cǠT<:.o?7~]T RAO?~C-a&+ Kor 4'nRA!l0).yfr+Ӡ.ST~\t|N)snĦ ~N15 1B5VbEsƄ68Sx9NeԿuYatᶕ6yy"p̤ zCU64)ިjrZr(c ɅHA:K&`H\2C?]RیfŀzE|t%}DdVCj-3\XCUSxIJlCt6wG m؆B]B#N=y^XaFnM@?7Rgr6c؋\Jտcu}TŤ?N>HYŘ/XAϓ>YnI,:]c$Ddmx}kElg>fX9 FE`c^V;J:aosH9ij @*8b';C8)ydj9,F\=vz}N0qI2ژhj1y;%3-MJ^4Q۔]hmIWdEg4S d晣Y<ӣ=?qvsl>e.2hɵi. ӫ ܀#[C4 |iCTU?6w> @w6\cv8d6o<7.a:?+(CB6/5qnvnfif\m_m3iG7sdALcn^ygaa34iͼpqcjSԳF7Hm,w5iϚ@i Ww LE/y,'-~ ♊H^S 860S)#Y>[`E5/is{A{%_z| s ,,$oKO(Uʚ ,$\u݈k3\D}tw9!ͣB Kum;2N#q=bx0v5}^Z?Q$¯y#=r9/ sWf.`.yWǮXäq\ `[+CWrDžAQRQ< _824an筎nZ[Zc| *+ 3Ĺ4=סmcDCJaT(0'(ØwxVN%w6 Oxc{X:IeLy8ͬ`tBǼc$lķhBө9s\c c=Kn"0c 2Տ_=ϓWb' p1@;)&&y<րǞcg N=bYv|g~Yg>]KZ}L q={5>N3]:|ϭ[zu5/8og7́."XXtG uixR%4M71}T{xq!?tL>9(Ic1OQ(z{d6^. _? |?؀R JN*t&t  M(XtX/O7`be}/smkr 7Yfl2$16MtѨOjyf*Ri4iٚȂiVlƸ&90DD ڠ?Ӈ9iQߝwq/]Gcގb吉\Ԁ-|:`G Z K"R%>`[XLӕ]-å(\WO!hܳR[I6b0קk{a__tyc+Kh}KѶ}Ɨ|pLnIItm^CRH6<6UxD /BjvFlX$vR6%¶ؓ[Wp 2~\K`b8N: 5t0-.#K'WdE8awSXt)ڠ<,o1߶*rTjXW/Vk> 0@?e pe /L^Y2/X 0 z~`>N ~_o=Mcmۼ=\DSD`PM ,iɫdl<.6]M^'ĺg vp1αHgt/.%sXZCl,mX&n5Cx {b҄&*fy <4F߰V9z9}={unefvTeTIee32ʞ/0fuh}ξ%Rb_g.V :cCkDM3Gݻ]Df 6~%%`DX)u/L&/W"\l3(^=> n6{A}%.m[z[w@uo`60l[HtnjWhvzzJcv7Ɏb^\k.b[X]-aU!9Jp&xJ֦q 8a imF𶌮!=%bNJL1oR`@GtHݪ8a30<{$Em@s8E: XX,aF[f|~~okQ&<ۅ nx^c&7Y&خ>|Su.o 5~LMRM)@f0d9FJ}M 3*=rv8!$W{HSqyk E+J2?\)/^&7},rc:h>*K{SJ ϾʂVѠG ]eh8)qGS+cjzw8 iNcq=+tC);]9 vs Ji4 B[m͡$;͖ba')`rŗ!Rh0gr<3B6/aռGN 6Y ĨJ?`1YjVh'k*Z@wNHۉ $ft0愚V\HvNKhV&]㘃Oџt qO1^loMZf^%8bW)|g BӀ~KrAaOX]<$Գ H`1yˆazкgJ:v(([T[8mYOr[`7ahNAY#f=Ld¿_\4#n D/OWP-F\e]=?3؜2\A<:>/Lɕώv2Zoa$]Ks]FIKbL}VZ)CiROJ>NNk5)|CxOm}dgSk&9 i> c.L*t}Kǝdf n)_a#Sc}?7LN5L^\{s rIzI? Tq L!t'hf8mt)5r3?Vk]..j%_x5staWZs'`Z㓚WVl ="Z"S&@bfs?'5s)/ASmdkM `z4CrYgyn3\gDzkJ0 ޗjbxsG3cΰ#C(8v.&}g_>$CbX+X䫉mOW&rjxJV]s4BÛXϗP?Ӽy ك9sCcfsgX| ~pyccvwX`vP{'T2A.. \MJ6h(*E4. -2 [ںd:Q'$Ė4bºGO@ /YN,,M! Ъ?%G*+fS_ ޏ_/ï} YԦBc*1JaLM>ԍ GtZagSz ܜuV3F&Tq %X-,(B{B;B%(Uho^(V' [Up"E#+)KwȎCMrԘў?ṏt'x>3lpo1P'I;=?mW{u0$ةy,v0+M= ƚ.~Kn1\ [q>\NJ;;U`TΪ2ۊc-|ahHd1S83ꅾ}#mPXzXM$j z)w}p:go`nd1Y &ɾdO/ <0wқ{e.Ŝ; |Mq]ߪz:7Q4%(Lsiz_H 2\:GUl)\z}U/0j 烸}YnW٦2izDA|Pt }. vw~mD'twX|uMM%`D\="z M1o_jߓ/m:y3fm]u;%Msu;ٗyA!).`IE d2Nsc ? ]D1? l4f8i|-^ y<+>.qSh~N[<cȇH.mUM:wP, s()>625T~3ucb}*Os6Hk^;a@Q7UX4,/-ֆz=VEcٚ:34MyR:SF=h<3[,RLci\~( eKd_?|RVD>}i]gSwMB!3Nvg^Һa0yDJM p!R|2Y-Agy l-YA>Vfb=Fgȑ2V aY?x0rB?ur$ 5;&}f"Q0jb)`3<1\lf8p?gFc163Br9etI._H-}anIRYsActQ/jbLIkM,# ӄ hgct9 -|>>0O-j7p41w~adX]k vî ص `W]=صvbWovήٵ?fW?v d`v cW#e׉Ů1:]v]®+u n`-캃]kfz]v:&k>dק]߲]?k k:f4kI^.˟2~v!x<~N^O\x-Y D]nhWFpզ7-jo_zUiWɣ^,Wg˕bD1V6$ȁ:4<7^=4l\xа@nӦM Cƒ"qxXh1(43M+¾07k Rn_Qw Q 0MݤD~P/b7w)F}q'&4]mS Işn$O[7"[{$r=V;nUh4uAkn^C#>ͻy9>K5H;y̝ }.k,wЪ]% PV5e_W)uD?$2`8P%Z0Z:Ói?m*ypQ-X ǪW@ |8!y N7ei}y~ȶ|#'f# .{F5*WO['>)#yB_8^_ZMn{gvrD/ߍ<]7Z'v% _ۥ/Ljprfv/(OۥCdX??VyClܫT4c>;^C덒0!CGH/k.ذ|MViu+W5e'Zýdk+hhvjH3KyXΓ MA: G*BY c_w΄M=}s7N?o&=AMnz{˾zԩִp3`CF5/8J*w12?#;@o9XFp_%r^qsN#kCpL@2_Ba(nHctͱMruŮ[:>6ܥt^חw<.,ҿrtf3ZV繧P$%IFCh o?.g# ;A! ~FCh;$2M*|C8CZ7Axlox#Α#@a  o4tuj6$4$~  ǒ?|"W(VK?LPxxhxb<PZQ:b4D8cH|k4 U  ~X,?\Q:2Ϛ n cm|HG[-Zr%6LB7 Ah 3B0B 6A8 Cx+i4:Ch?p3!,N! B&n rj@h -nCaXK l!!7@pBA&A{!p/!| q)<CaqCXa=}C8B;Cx B!oe?'\!`Paj{z;އI,85SK*;$v8X,6Xy//@}8淥W}>=ޟ f$_԰o0/{;LiL PײMob<=>O/ay=q~_HLJS cCm(oU{L8\P~V GxjX< cT!EN^21a^/kA=m>kXU~qo- !y'oZV$M|~qo-sZV>N?~ Ŀ?ZR$h%db\&^(Ê8GX7 qb$#3]~;.{2 /?}VB_)x߉HC!cyT 28M#+Gq4 aZ q,;q(cY E4҅ooaobǼ6mct;s$1Cü1/,׀wm?y4(5R'Q׮h!qX<i1?9 E}k* ,oo|a>&܁2!Qc\ q7ߜd "qxy$xYX?cy8cSqƚGXg07x*}F3 ^J0F0^Igx(n.b|Cz64$~_[ w /}ϰ<=cYDgH%fͱ<[^_qz 1?+x0^?{;āDzWGe~zF񯳠 BiqL/ƿ.g:ϣ"o/K weMl .Y,X}7N3jߑ>Gj\ubfdwXC'?afXL#ǫI7:a@1>` 4I?^aܓ×tmCfeY/1=rx,A\y|%NO75GX{wڇ}IRx}6\ͱ#Ʊ~wX>?Hs%w0z xe3m=+c;pvD+yjbmei\GX+,8L^ּ Gq^ߓk z2<6i s{x8xO6Ae^//DZ~x} ^/ qv=aC4v?7X㘟* {e=9ƻH|~G8}Y X7M0C]w~S B+Y ?x8xO<4+S5$^6amv7/$Gy:w8FaV/M M0?W`_: =e㶂^;p|=( a8~ba6Wae8L,/6TDX0O޹U&ۚīKXƵ"-ii(˴4{?Б~5BaPmTmTdP0>AA[xӄ=&Auhw7@p7?8477 G!Cm܆ h8DÃB 7w G+o$~npk0 aPAvAC0k/_,4(;<4zOBVB "GCHPHj* (om}:70p0HPv;z2D45"6"GJ aXp_P9*!2 ' bmG ` x?2vaڍn7.I큖 I| }'P4NAC 0NuŠN22 b`v;   y«АP(QW$d1v@6 5 2h940HHm Fm8܆GJ ށ``d5pHc!6VTgwXgX7Н@J w 0p³ϥC |{@GaH=IѢ=zB'0,1pH@֐/з4+ 9W{i<` kP(\Fެ;r42R DYDH (*<0T!E%lBbhoV0!VF`m 5B#C$Y00SCDdŭp))mגau&\#Z`ՇU*YqN7<-R\PwqmVtG" >ЬB )L/@ם?goOvy:E9t:'qc W7O b+> \lqNϬ1_b{OM9`}mZؔqIֿo/dF}O}}Nt_Kf:_3 Am6QXVU:'˧=ՖҮT6J*Kg%9rhrfN~dȾ}:jK'f^dʙ+f6@k[+obs.]m{-59tsX0!aPC?qtLu8Qvt!O UgX_e67a {8~*֩YKy 'n|ÇW !38a0fGCsh7>00OHF6irx߄3բf>^ F yſ#df͐P8|_Bq@C5֫*y*HdHe#u-w@-!v+`(XڅIDq1ޏO}p0H{0:JU &)PKŧ6W 257F:0Uw?Ouhm%ׇGLC&Yx@Rn/l2%G1AՀ.Km^#p9Xhe7X?|#?m,Rg1EpHj}f!}#He6ےbb5Wr,ZtRR$uu n6܇bY 8 #IYBT&tp~]3,lTXgԆ|\eIgp}nqq<woOk Z ʳ@{*)sLR$]# KI\Eqx*aI3J.%-".?C_Z@- ႛo ?w+b}RD,I,Hݕ,ta޿D1ֆvCPL'Io^Y,kaqgŒBYk 1_ix, INF]7A`Z_+X7CkPV*.ydXbpAci4pW`"7yVpmqSqЫXI 6Cm434C6A<XA# @gJhۻ-x`@IPiy]JzwE0ʏáNPz,7߁AdA~3y + @;eS/<[WF'|_ʜgk @L4:^A Pnϖva=C8Cijc;sp H ={nb2FS9%<q,!ttH(W [C[G@hFNu0wO\!:)cwq_ 'C];ϱI$Novog2M/֍{XmC=?B ,n@; }~1N0{ 5O -ln8.ޱ=P웗a`EýЗh9 2Gw74>x7vay=Fy y=]Bcbq|{*8Z𱽵+#c;Co3@%>ԇ0-@q|!:Lrx|ޯDXx)ƾD;! ~p =H{baGM=qǾϖB l{yEuy{xXB9 4n%:o}q ' t1~aG<d! ^ .qn] m '48tx}VHV蚖y"σp' l؅{/ԝ#%# ćqg9Q8.X< GbLAf`?6:BE)puzIAk.EBxĜKYJxtLGFr8p#c+0;?x!?x?`)Ƃjb|uD ǵPꂺvEnhWpAx^fpEoMP|n>*EEE{#߁t{. 4dΚ8/r gqLA ~_Yɰx - +9y=/6}5^ulCs>{Q[$\}*~? ccXI hO>,.;i\Iq.h"8W|mkuS~Ʊ7'W?N /ߪW8?g>L;1&.?C J|~NUNh,16Rq|Le{#}οCx+tF$"/اqnq 0 k]|rUV'X,#,1iW'~!vNqsMFΒ ^5nKxQ A~C'\@9Na*גE>A{ CASjT p~^ި?x%Q/V-R񝛯TiT핛0n:&ZAoE} A*=N] BZME  p8po5,lolϧXcxC/I!ǐ c-0HA( @6 ا cE98y^ I7 y O9 =7"\6’W?lk0@%s}o+`U!u`?CZK̃X3 {^|~:>e X,O/^߃6*Ӗ+-wi, @(_Q?"okޣ< W9j:^$`?XFI_c؈w=Oo3uʴl-V9wJOfZ"/S-;Z6`;eYC* \D\A㸋_sTU^Nws'Wd ze|X?k-)r0 [ S۩W?~sߣp埼gn^rePWu-<_]<%׷/ 1W_5w_f ncc!#r1UN,,`˕N}M_ฃ;Wir'8)1(++p~x-poQR]҅$WIO});Aj(s: y;s8l~So*?i@OHp /~Xg֊{<ӿU| %y\C!mY)L(^\N1pPT<ù#նNiQvׅ Auug˜pBN00qi>4]#^^X巧5||nqD5 )H */P`6O'kN;/|wsf /ky>PU'PXu1em{؃j&4^I\Gq|D|vLo1gL.8_su=BQ.q྅ `$QƘ)Y9鱯w|;óP_!Mk#  |hoh=0+i>[qj$$ wB%B~-k++0#u N(ŵ Pw>%>B(T=n[E:\1UcDh$,$CFESv|LF:̲'4mqn((hqPл4q=~TMk7vG/ zA3O+˴t*Rt%V?5X^GSWm}@^f4! qZEYIp a{c4nq~(hTԣF (2*.w~7cm}a ߆@@^,d.}G${#qzA놲p-'7f}Y\6k,kHGK#!Ѩ~S.mfxcCHgHO}w@pnwh_K􁷢}0ϳ2ݼy'ADP.5oaZQ0UE&OUK|lGWEx#|peټnoE:lgMieqL&;WTl*jr.lMm_6[8r|Ak,3S'8ޥr<]*|Qo.dpHt]fn ˲Hx{!y?*;đV8r\|qa/(p_7> |_l:[jXe*⽺ x%[Tb9ltFdj;N=$Zꤵiu]^k+4t^զ Njlrl5pNc2ZNu;g[-a,[V wA R鴙:C˂aϱ5$-{4Zh -g9`MEA #akrWIe H3 ;A {Y VKÔ8!m lY鰞/ :F`Xh`*bg3(dr2IwH6' QF[=Ցaā}8-6OB bR$Z7)l~؍=EB'곎n`BG8JǟC.z:}̖KϚ72bɴu-v'f9mS tҲ+,H{?:˻ZܫaZ5_ ZWbٽkޡY;Ne4wxZnJYUwF;v:%i`$G uֱt:ԑE!$8|WJĤ2Zӻu&ztI˽ؚTRӶ]w{ -K}u-|U[wQuZ>)Py}{>Bͭn)cWz6=nC7EНo>r=yGheAnIm"3Z*H63ig_n\b[+nߚX:*wYѺ[J'nқb˥XEVN,q'$႙RRr \~茐o8.\ttyo {&7{8DJyټ|/^Wep'˝} :"(>w om+632*5x9a:?AejY*w8LI<fykot`$㧫(zwj̝) ޝw^|VPna! q㔱JXtU6Ci57ʅ*nR%:+~n+W8a]pbն})hηLN(2 k=hݛ/bZiU t[IR_NEvkTbz?TbHvcBɛS@/Y=x~YYQ3| Z&5}H*k5VuL$]tmJ;:i5kh^" 5l||3Hz eѝKjs0bU'Y׸ܮD=P*-E~2} 67ϯ=6dx0v|kjmZɊt&1)ʥzx9G(#gzN}}j]N={Z*@w~^;Xnۤ۽G ]޶_D !xYGN7}Y:h(w88{o\J},(-w"qD im_ͿV;/xebIi$k;^C. eJso7UQ:x?YYjvyZ~oYWh&Bjh]qcy7׻tiEHo䝙ҖFtow?l Grq~15"-+ eo[QNÔ}ΓKOxŃ:>//OAl_ꓮjꗑIǮ9gypu[T`&ʥZ]4tn*-Zx(ήR")Ls.iz`'e곓DJnrǥq> 6 ;)-)>nr?p5:(F@-=d$orWeGWڵ9j0p{ X]b3и:G7>>ٍhkMKR:eu"'4?nrݭz;_v|gg6PƑ Z+jN,nlrٙ5?̘ l ;Y_&!r8xݦ>p<Ӛz 1^d{9d,'6?G;\P0q&@?Oǁq,/2J&ݷs :|#~w/)V853I&]__Fk761 [ts'}vçTx=d`(N_WI 蔐X,W2(iS7%؀~^*0{U5y h9{Co =tGK *#_Wveפf ]>gdJ'K:vzRwe5 _?uqBDB3h) 93gȉ9PЩIAFG'X[W(m )|yyEW/?kq1l3+Ԟ/iTv|?/ xQXDOLK,/hY3;Ñ_/JMZTt}բ7+Hz(3GxQ}fĭz 0E/6aQ:z˥;ZI1x3shNk0*=|ıOi׀N ?o%xpKMOȦ!֙~aK4VyXu4 jcmwȕ[FTzqsbyM]kD{{5ypq$'ұ'f}g9}x!J;IGcAU9_:y|To8aCaEԶ6rj[rEw}\b"DIEKo!|]30R{Օ儯RȰet.M_uhB^;ᲜtkϽe{\a%%^0UηÍqx}Kf2SzL3$@WMq0BңO]xх+Vp2y$)v&n ;_Fxٮ%ҹg +ʏTC7cCB6kN̦qZޘ7e[5} Tx< eb$&X-{$m4vR. 6H#7#.қ⹞+Qs9CdmNm+zv'ϛD:=rrQ]#>u4Q~5PTOrR[qrCq)?%Ȩ$-"J˳UX ̾e.H;@2u^6kԴpԴ}EkǤќJ.^.$ xHşMEZ w]whv0WmBb LӰg2aGdӼE>T#_Dv2]Rw\оgIh!-srY3W>.y3kx>o_MS 7\AOKazU!,J\ΤʉݗXums cQc`z&)̹Il76(YJ$߲I2k>[◊sҦ_}AIZ  ȿ(o_τ|.}>!5b+b-rZ: 8:l!sj3) (#BQ$; ƐD\0 'l]=M]_A)j L.K?\pb?Qz> eY3^˟Wo{Gر`BlIPܶWa 7l9DڷZ(,~R2oKhsoʦɻ(|@ YGtC<2Si&Y@2zM cWy!.\K}6P-k \|9 8븡uoYBYۉ$v~ )Dsdɡ 'U[S+>sU~;Ls.G9?^Z{\I QܖIl0 |U5m&{!Pz2c[\+)#q ^amuG6YC8Y7VLay?Be^oSs+96]0ye]*s4ɤ(&Jկ 'jirf%J6}P=giw^iz~1\mq!d׭|Aڧ֛,wj̚N=ݳxT8u?WMn22׆uזkOj3kn4EqtqŜw)ck~8B53֓(&ySw#Ae-\$?&uRmk,/Tg Q[2fk>"r;*N@oOI u;_Rh(ѼI~2UWCnsZÑ =Y11v%jxcjq$2H]ن%j ʹ(_wK7z`vz󳞑dgDZ^|On+/TH̺nݛ!֍k[&#q)zh;S h\Iݦ|fO./t3[y"(NQ"/Qŕ8z}U(pe˩c?0k$a Z_ل%\Nqy-7/rT{N'Y@O09i!Sb#ܦ XEθi#V=z–I_lǜxR$'gU]X<$l:Y쳾!L.MW2-%@Y[ ݛ|s|l3McԫϑpoU AwX??_0Y\C߄(6&nOZ7w WX}Ava37^S|q{QA;dʦ'ro4 ;,?gt NjY1]en:6eQuWtCwg7nWP)^p~pHZ )nUU&h[+xsHo˸b~>yLmRƠ;fxTX|<.֭)[>[OZɓws]w(ferʏ N_3>.:5 cW_zr{L/(#vt'^w̎52NQ65y6SƏ{mVt$)$ '-.)ۮjEta:%꾤P ?źi)mq聒t^.?[AAI _ 8GW5` ~P(Bۊqar˩o~7Kq-}k].YAxn]Q zNmq&UlH=jH'}{Kbhc?Ѽsn]{ \4I:Q^ &r| Kڽ.)mʧ0>v@ymX! +LtT;kџIc~ zly6;Ҋ(x|p<=Xpb<]{RC Rc#HQ 5 uC6cg_, b 2/j#dt kEx ~ikKC[~Y}1Vn?>I qzGپڒGL*[}Ω)jIDЛG6r%*P]-ցw|ʏ V [NUX^9Dɨ MQOO.o5L8*b]4&3ZƁK;QSe{uRA~9 t\&fFW8>3TYV&+}u߶'t$]ÿ)pPbeZLNPNi[osU9_%V~(ߴkA /]^ҡkU77BRiY*Mg(?Ln o8Ab1ʇ֛|W@W tEuE[8w_4U}T~XY>jgH= g\qH`|*]a˛(lN0B]Q| F.e$3-5 w\oz6ar8[f9mܥʟŊ਴r^NR.)t*݆۩>}SI{p,#/l!^()@Jr;jnm/qGeez>qI~3N$ _Mq Ln4REϙ0]/p2bbg(?\Il #]sӫյhQ(AF=5{r˥ѽPiMMnhg&|^i}+އw ,J)?(ΖDHBF#Bؚe .sIVNL2 8+|b(6y=n߶=)OWض\A*(!l~ha/I?rM.%L}g9̄ˌKZ`,|¥_i%Ǎ&FdOUO)-l]ٕVH^D82[s, \,gWVؼ,3۠W&[__ﻕb'YzV;:NIjN[`ľr.PSClE:ը '-_-糑|T~OɃ{Ѳ~ź#cSqzrsda\ulᓾ/aj Rs(}+P̿)a d?j&||ozL>Sare oj뷿h-Nyʅ{TVBQvSRM\"%2Kwn,}A\!ol|~lGv%v$g"P<ͩ$39+[?ZT&|sfN7#_"L x5(/ ,RpjnP ng͒'f1r/ /)gFOlTpToRXseYo>Wd^fˣϮ?I1B8LL2w~J E$آR%R}aF!uPuI#O .0DmJPO*LwY9:cYE|V:~.]פ 2US֦" o1OeS9ypV7CYNǖ_LWտ"ebKH8U/y2O:lXl,WD7f2F ]Ջ}? ,Ü*_#Lh ϛwIW8q9O?0hC暴$0Cj?Xu_IRȅ"h[~(%3U lVC ~/:iBy7QZ3 5JJf7ľQ?rbmJv d~Yf6|/ O@ؗO)t?0ejTwQԸ}ʧ2ci2[?(0u1P F~Z{m4)|qr-7n׉O'./ FvD C<sha^Rc3(aۅRl5޳)ӜVOP[hXIס8z+R?T? Ȱl$ý~1*dΨEyDUy} EݖOK65xm!c;<7ldvڰDzK\T:pP9m57P=+*+1;f#s~>W*F+=cS&P9Do4TqN$ѱNf/y\vn;r2hs6iBzfd.Yw2}Z mh0Z# =*K d\O"3S@\l!_E=d7ԏE%MV;:l\AQ`tTTjK6,0nV/YH:m .2<%v$/6?rS#qa@9/s חN|nJ5d:z>a䫼>n_~_1&?"ih8bZ/*h(L'͸WҰb;/=W!^Q|4Ty3p^]<恚1ϕy]Oٸaۑ+)zލL+e.76y7m|gxH<:/"Cp%eʡTaɍ4x,bh }._֌SGd/g%QR2qQrs^;M?p>[G+B¥PB:_ۆQ%+~J5q2r|G3E5F-P{&M3V@}9 (߆N s6=6GL.L^<?W>'2X^"|B-'Ef_ݸ^yaj=l>;_FvFw [w.U]avߋ)l,p}]?7S;xr>|ЧKy> ̼E"Nk0k֭.SoOٺ&e>Jnm.$_ SqbG*~Əgp@;I슂Sh%2x21nů!U*Ϧ#_ wbt*g.,WoAV>/r.WH>̔J#hzؕQۍu?ϧ^лSn4iP0 Zѩ]"~d.#G%Btӓ!9Y뾿d,uve6:϶t46$xnE[ll[Fcؤ=NvhaVǾ ?: ew,6ې#7C{ΰ/[fmmjjƼhXfPeaX>ɞ0V:[XUc/1hegc_0u .׊aL* ,9UqlC] ýMH&{ZKR566ge<:-jV=AϠu_,F=)5z K-Kiaߧaa@.f0o9,\m"-|rDk6+5j_mwC6 D@e Ҋ K L'Mtm!|>!6z7aIOG »̃FBɵmZ:~M~&pXFrUmaM"ᵆ/OBÇ!$a )ž2Oр/C5H%˹uv6Wۧ#n 9:GB#+G<G⹖a# j(y|C !ᆰЈ <':6h٠NZo-<61%Bwp?8*)JRR߲`x0lVӋ0(/?`9OѝգGw)H`=;,4c YH-5/ w/GZ# -iI/|``b o oG[9`/?0#Bg l"ZXD"?J!Z7raVXNA!Hv'Rٻpߡ(/I8 =N08MKF[<{v;^$3ыOОӭɧϨrO" }oY3%7 ]@f˝RKr|'O+3 \n7;('<&L<|arIYfuL V0\e퇤"3}MqRc*^&zo\vT?r;) oV(_''|ݷL@K"䏸(A]o7hzI.}R5JLs;y:)'ZT{y\8\Mf3hؔ]Kم+R#y}Vt՞4:-f]Ћ(ϷCd8."l>f SQf4O(`Qt^QyZO`v?V&z<ϟ-f9*za2*> $¾˯LI+,WVou)Fw٤H sL- !l ;bݶEȭQc}Xׂ?j j}ISأ%LX@f~@j(lRjOOL_NNx V0=2?="S E&M.G9%P(j[:J'E밉h,}ϙHweJI'ۮ| Y(jρb2Qgz u RWSzLQ)7Es#SrC*p|:L}A C*̮Vr`;P" ͸CGUTi5vRF45=kS NH14?+`/2SN+_ߡl.[VZ_Y8+jo>j˻\xN#l~ Pn>VRԸul*(kB,RC~=rylv(ò p=M|M120JuJtk*%Ҵ8üUdg8E(!6 %E2a;3dNȂY'vYhn}!^NR5cIۖHvril_[DZ)oi`&hǑdqY =8hT;p0k2N-~kɨr=Q{azT8|齇|HHSNݻ)7m\s}MݎJfoc^Kc4R)t6SRacOT<u?k7P枉0A R)ln$řB!A0ടQWyrDmg_E 79D!|~0~ W9ܑP`fB8ߺޜѡ,{Ba|FhT`Xk4CQ*ȆOК١=a:\/U^9x0˛)c$ Y3;P"a׶(T2pw?$8>OW{A4\1U9& 7?>c {T(삶 {_5pCJ&K14:5iFEaLBt9"X2yw YSfp"w SDڒ:)ˁk'OSy8Z^,vPqd*(([>YH0(av  Ɗelwt+Ŀ$lc. %ސB褰}lWɩ O}J!3uߵd4rioTy0ѸDmtGw VONQ=={rم9F {xԅvgefQ0ϐW f&+׋)_=C؇B@O2F`}=0}V=`;M9Qw~P|u] }8eꟌvܭ0<}ZzwqBS-M; ݢ[VPn{zGjpũDOp݅ž7e%s3)$ rN0$Z+2 }(^'j?V=λL=m۽6w]/䄷tPLywgXo>6Sa6Q)R6~q2z; CfP/ILNVP?7j6.Q//ǨQm/zHY'ã&2 I ҵ&n\Y掚5(bjy)Ѳ܅_zrß Sf^x"}PۭD՟e~l.&h^Q~;UO,\WԪ'b~&ﮰcogdnAfz_zEkH^%gX1h&簁p3 3]@U,jOl%Q+g߇&2p ZrrWtsY]Xf+҉ }醙$\?#ȑս:vcrU^[V}פ^Sxn&eԼnd)g?P4?5*Tk=I–nv)jeRGd;Ymݛj ~@QD~}VU]^DUGj ;tkұSUmNuݮCqURϪj-լ#Uz||d3)32pфgLsb&ƅ )פz}ު?~9z >Ž=cH+$v.V;3z8N+L&eML>}6ړۏ?E=+LjFJ1x[eQnﺆvrq{0='*oSspUtD>-dgSӄzH8pQxt7Ww<JwSϪ[ĸUz(_%a'l8k,UWJwj*>U\FPVHyTXc粕n 3d?6GDb/褭WEYo^%*b\!Dl[+\;V;;~\#=t0ۅ\aadP1G9"7ky6? Aj;p&$Eysr!˅V B޿H:p"ݫ:peU a7NM/rs-v#Յ2ZIν{+"\ V\&DйU85A,9dXEuM(t=j09[BR?rV;&j$X03˨j尓|_=Ln+֋ t.o}x2_#\~dgX7E.FЍh.C_jPljqUTI:e1޶lfw_=[}-'"!ZG%Վ۷UO"[I_0Z-jڛq'a*!?vnͻNRs/a ?b@U1k{V6 #LpUh"ճǩ19>ZY/ZOd1!\NOwR^NUh\CZ͇nan&V^;VŬ"k.0;,տS.gyI{%B\a˳4{_ϤX}/<^~7k yy_kXKX%8AW0{x}HC:9(ƣ>D+U>Fjǥ!_woP^՛ 9kU{`uNF %]4Fg b]8'V@Wqb)gYea%-<q62@eD`H%Q[J{M T;GP< g/xe{x=*ߡM{Rj0j)Eo˄]!*ϳ<Ȋf6ao?E#V =+M|{@ء̰xUUxUv夲 jTP1GӅ]p8ӌ">ms\H]UUM;Uqn1%"%1mGaJUmVW0c8'(J>^Jk)ȯ |\JY(@}^ Ћ muFK3 Šs膥H,Qfzd!b޾I8a+5Q}xE-~O&8i]+ QDOˠ:yvj!2N! ~sGh_&P:'^io4<_0u&Q]+-wW];KA'6ܬOupZ{NUBo7OZ][eפf;k-7]N0y|23+a+5De_?,ʧOIRQKj{4~*'`~!|U}$)\U"oM֗A1oA5OLxE:hbz\fnbcQu B4*V`Až2;WzK/7(]*sI SZ;@vRwo 䉊 +AB.nj{XUNC /wOUu8tUA֑/oDUy*UT?N!i]g~l0R|N~*ϴWU7z% whIxJNɲNnS6ov e{-tOXmb ΙN RoW+I&܎"mܲYR/gK]؆.ؔG0/c7`)N]kzOA[}Jznl­t0`HK;N|"OrꯏSHk]J~.(Sm {:z/eNCy(eW{}ܘr>X*K9c M/z>METLU_i;:Ω~8I~zņkR)7Y.p>&܏g_XmަL]~?avo̝I0Q 9H2}?BGtm_#M{'_?V윙QwK$?tzNI)sazz›74`CI OS~țD>os1/G/jT+9 9=n7^뢅ُa(1M _6߭Q|@e$[)%H-%kgւDG ?ge-O_!ADz4KY+rktGUeg JI\A:| cb%en' }HS.OtcQ^5-ۙ/'!SMP{;)^a(.2#V\az|c/ 6Cs?Dޠ9qr f'B葌"\oq6Qݫ۱1Bzo͎#}3IFNSdNjL(_f%!s,"+Mx:\0v ;rB)S+-^YR}۳_wZex\Q⿤Br!bX g ~fqFYU~>.$WhU8!E_wPGLO G~z!0sw8^$7—hdOp2ȍ,$|lU o SP"εP~)y>PFC {s彲 L*+}+xp浐TԦ=)^{m)  b=ގ@qjcT*~U*?K\YKH(i+5I 8E޺ '{ȠS+`υt]R$qeI͚̓X)&ajνelK"-CJHH.m*7Os<㲂/68VpY&R憚dvT,oTUbjz  }5N!O귝|_ },M91.n)B:$dלDr8r,*o<ǽ(SHD~An4uu~2=tLSSr9vIQ-Q4c I6Bx^ -&X׭~ 'Y&uQBrn e LFB7_Sfn2.laHdN`,:$(>׫U9G6B6:kKQa?&(;fsODWEDr+ Q1p?+g~ f8_!_L%nw Lޕtp=܋|r*䩩[@otr✣`qNe !1\L~|s,osN6&'vl*B:u,j~kTPر9OQ_sSz\穄K@=Bx@ض^M{9;ͧ\1NJ(?gz+$~{֕2r?9ʼCϖs]W=yߠ{-X,IZF?A ød_Kٌf,[)̿Ϫ|#?\/DD|UoR?Pf:[< z.xn~87mIpt^`zl)) &RLY-\>AةLyO+vGBjNaOv =1~Pb9ڥfUst=7pf2oߘLE WU=9D'3T%'u8I` 1 YDFkooY)…(0X=2։(RWNc+s_%f*, 5Wnň cK9>K(aḇb(e.`e1uUF^Ly:Ϝlzz*|_p9Qd|[({8z| u'qeӛO%X0eA^%N 9P}Mv?Մ S'WVaMM|x<o65Z+0Xlx`g'PV_Ù W h$@ΎF<3}6FB"9H6Nv:_:6am[Kv%CRzç{ `nC/n Sy;_s;Zݍ\%tTۼl!B$lWGo[DÜ QlG9&Gp{ZՋ3~N\94iᾀ [CbM(E BJ't^hj7퉘+Oqr^ r [ {#fCoQ~cQsSoڴiO,(DiG!),|Zl3c7Ec"9G+-[Ԉvxn+:|Y(w*a&iS"?3u+s7]nBEdnSL!0U,;ҁ63+rL.n3rĺamn~"t)_> bV>q%OHo|,OMFv3UI$ .g{$)/޷zv?dQu+N([)ZnUGKo7e9AQ=qy+v~A)Z,,>G$qJS*{3ɎЕw.{)QTs@*җ0TÃ-;l {s 鎹Ak3 lI/8OQu)Ʉh |3/r#l Sv<΃) pw3,^1ʭL|rߠӬ:{;egZLȴ[o(= |/gsղ{<>T.|/Pu^:~&x׀;dOUpoMFx>L̿7SW_<+⼘ȿ$32qаmUВ5}DrdbT-3kޑ{BvBęݦŘcQVUMgH ⌋¶(#?'vtOvv8m_)rc]qgEyY)7'Z{E 3r&), }O>A+ґm!uJj2{7C#6]uU%SxV q's>WVuv.)*~ī` ˨=섦Qk3ާK+0!%gn (!u$ISV +Ƹ] d,(6ӽPPASS&~2x&ye(Ȥpɜy-#̅KʎB tGΠBYXfZ42)egq͢5#f]wERUW[ƃ^tmQ3v\] U`ph,+Bfǂdq%s.T{`m^o)64&a>ܸR2e%rm쪜W"殺3cWV N{ݩ-;Ty&œ8t|NVzXu8X5/"R|oo0ÕfS4܈맂 ?(asʶ F ]=K.apu@^e"QUN0|]M; [RܭCs}Z_Yew[vd2'8'![DZ4]ކOTCY;Wh˷uݹb*y[9/\XV&kiaX^ߘM/OnP+Ίu' VN0x2@1܊hf'b,5w畅%.(~bb>F93';>jXY(89<c"y|-!G|{YLeafAk[oa b_mr e޼[>، kŘڜ+.lז @Jޟc3\zs7CL D!s\VP+FГ Q XYƃúlΊrrN.ez|!տNXXͣ,;ʑ~L4$NZç&*QG06BdWX{gFO% %'i*O7 [Xk|z k?U3T ŽT\U1HcztҖ/9KRL!zc*y|}#xJrrWAiM݁`XA[VSţl|e;R#@AԱ|` 4Z(G,\* k/cjcQzm9VsOcz$&P﹂m> r*5Gd6 Jވ12wKIgօ4ڠ?5ߍ80ٯCkI{ש5Dy#0-RBb E1TIY5h9Ow#w M\&Pӷ_p4>Z,[5 ~|f0' HN_dP#PlAl>Y)P\_7 t7;Ult$()1!:sHUAcO$ƶ:\@8umI~;K]\iĢ^JEc4)tkCObk/E\>j $] *o`1\nϟܮEc)Mâz T(1=k[L٤IO>AU%y|_H/@z*ւ J%aK"Vg:H}.U$PQQ0ѺהL(*2l RHG(\WӸX@#Z'?? xaLxs5M"Q/KOhT{r_ĥVIPOP%} t%Xm`9&Zv›jMFG|J5U?i(}Tm +BQX96 䔖ñ0HfY4hӮ'!?6i0[y3czzbcX’#Ƿ<ĈY|}畅NV y[2\A9"yb556 %h`+6M12Q/+״@ϛ7ݡR#1EzH=!5mLI_0-LMw pftQۑ1xr[ 3SKޤu׺㧨؍.jE6B*%(Fu br3n7.9swҘtj妜 6J< tS+=(I>Pr\3=1y#r8 ):bx&<[X &o/W=9(ﺡhot X-Ro*1z#7qPXg kܥ,W*zONPy@`F;wlY 9 T}#]5k<8W@lO=cAqO@AW 0OkP 1)¨_[zԃFUH9)0FU hBuBFPiۇcf) bZG pǗ̲Pi#4iy\g+}cngKS.%Q߾ܒ]kĀ>WK+[|F'A7q 1}#î f!ϞhwU$FzEY(rˎWk*u\@paVw}zD,WkaG;ձ!Kjgxy$K̘/9fۃ2VL0[9в~b=SEy;uV2G DmX {Oh:A!Gy[d[r#[=ᴯ!d!p>e!vsd{?Y rS;k-3)eMdژ ,[TCԛ}dGLV?GyA9x|yw-FaL`j[1Ŀ1?Y1GB\[]H+e(WOBpR&Q} {h?*R ĮM_/Դ8 3agA('hAab_:1q*rqEH ~r a=˱#m~" %А{ U;ʦc2-S QVe`GJ7(LM硢1) \-%V/lQynfWk~ Y"3p8<XMlN}XNogi7W^N Pap¹aGsa_N\r:l~ ܲ?\eNbGs/) ϻh|7~{{.>L /xל7~OC&xGAS>wv7=CEyρLP"xZ3 Ϥ; _@; 7paw-RLٽ9/WM Jo=pa[$;t`zt47ǓqQx׎ߏ84bnz7?z"~| qaͣo+X':};z%Pv}ͯi 0USwim%c;UӺxL7_E7ĘhenHhfagθ<۽7v\5⹏9Oj~p6Lsyt~(=ݗr%xDes{ ;:o;6sQ9;']zO5~\τt\zK90U/;~UO>ǘt@O6|>Nlx{;} X.'"h\v?1ǥ\xh/[sn0-//i~sT}k{̯?__h6c>Hs~jo-7P+#oZ؎뷹elD;*=`ƭiеX=OX 2\WdM-|7;_?^o*L6[ls|ӏkZ0yua}:>Oe=q,^S8M[[!~"˃_X|n~X ,y ӑ5I|&&-l@݁X6oGN) boy]ifwp>௻N9=6^5c`iEO81246R|tM=m>x|W4l-6rvcyn*הcZIaLܱN Kuvyی<7ࢧ71Wbh$JC {±sm^["o5}jzz֋^u)vZ\.1=pPkN߂^tX#qeRwገ>03ܱR8`w 05㙗5+<2V^2׷㗘OW͈!exx;~9vcQ`Ɇ&7o;U.Aً79]/^>эW;#(/e,#a]>8Gk /ϪYsoَ_nY\ndF9Ƣn2N^cV;R ;qmz³٭ Ebv\3Y\]<{O鵿&'&К Պ+MkڦzV+Sw1LTOϚwMINZw]maccMNP?K)Dn[|+W8g2<D dJbBJ6k}3Mn# R?MwןIJF5J@{Nm*s`"Ëw̟oLdnBLmw"Gr8Ʀ9v˷|^jMw3{fҔ`A{EЃ}#B_Nak̵f71硠.vjD{wsvv}۾W5Ӽ7y/Cs)gyL^آ@A2aK:\Km~ўd~dL9@ :nw%sѴ8'6zCM׷3 >OיzN1wO~H'ݤχ~}/7}ϯnDvo*f:tOsμS;McM towIM6H:ML %L[r&ueGk PT'[_{ǘo<4s/w7mq;SrVZ ՠ7֓/o-b۸wl{Ffv&b}*Ah8lU]d )ɜ4s tA/L]1rq'tG?XREv+Q=T0<>i5"׹dς'Fe=!Aww,;F>쯬8s:p>nc,=Sh36<ò S@76hH;mm^4^ao4G6DIՑ-?ǻC㒆 wai|c loG eI6[h=<2;6O,e.z܆ e4c'G3v!q@P_`gm^Vpwg6gpٶN5`٥=iY_OFS^l_@ P4^w{Nvc HSyت+5 hXMYyx88\78cy\?l\N9fY4fi]f1ϗrct;+-_ ܿ_؂}i%;=]n=bks'_(yj:8iNoSvGs{#_ kc& ya7štѻ>Pv5v!?4m}yy>~}˛.VC~\sͭq0XTn Dz90;}6k spiah9Ng-x1slb$w>yM}ޚ>WחsL,#- .MѲ{/"8 D~>ִfL Yviob:mc3NQLo\HNUh~Vy :d17qh mж셼ik|p|^r͸E^Q~3;/.CNNv]9T߃_aP~OqWq?mᅭ$_̒WXfy 0̑lن|ϲ5AXk{d]ЊpT1;#j}?x@'d Avs͆֞Zd\/oJ=o6NNs-V1Ko% |_H o'Ƕτ-v{p6 D⾺jwZz=D ~l|Z ].+1}X{zus;n;i L[tF#R_ B'a,6wk% [/dN`=a(þl707͟9<ΰYd# v1ޅ].W{|B3ɇ}+F/< 3ǰփk N^nG|\l?n4Tכ6'bfؖq}w@WBO PpѾ?K։+\nB>?'0n-.<;sY|W\7wd?I/?(YXs:w\Oc};s v-0Vlj7݉<g9+m;S>c4W|kÈ6/'iP,Lt|5 CDZ z/K2l?{&=)iPe~sp?;xun'Ow~7_9x$Y m>B/?uޅwByP?`/Knv)>=k^g}ۺo];b'bwX[gO(WY?p V(C` Q3L,7դSI~r|VuᾀwPR3@^g2dͱ_mbOKߗښo]SpW;?ؐVMe뷹>|&77nJcQ# uyZ~ϊ[q3>\oGjDW߽H>V6|:L~.7m]2o[>֊iޯ - x%G9`ɹ7Ur,ԈEif.KlVX/r75`7U7sKyu^[DS '\My3̡ܷ`oo8iFC-`x>~Oc_؎ϏǮ ~ySG[{f#>|˕1!Isd\_Ao dB݂nqN-Cp~mo @*CYѤotk^vU0pPl%钭zB;r81 g^{!c0ER!fK< w&]`a};cn_qXr%ya}<o@>]7,ڀzAs?03[SǸ>S7ȶy#j׀:B_)G t,;fZ;fq0׹ r&>gм;sRs ]pCOsО\ md3}bӾE'ba' 0N:Ng_.7{ߧy ` ʷ455DRH CVSbS*9mMgm9SSg3>ٗ zLu6a; !33|חUns;?Cpa܁]gOB}4|b!7Vs}:o@A-xA`W%}vUQ dkYn#ߵ聏xQ6߂\khZrXq(D9y+3uI7.r_p?eJ_=,V\{ԆeB|||OT}LJjްZS\U>o^E''Z=9a>; >#_tb$;uY|9>c77 gD'!n} ̔j3s7@4ȶoaԧ~2b*FZA #C,ʦZZ9m Z!ububQcSrR&cz L9(`ܶNςr1gO9>3b1k-dq@,œ\19>C& c;OKD<b[뛱_~Q !֊"M(Fdbb^@bGDCbND(8~ύTxhڅ@o; ˁ|]3N큑Y3чB/"~@;EPԇ\V4~ wǦ:Õo+2E1:RUw6TF=D @5LK 57(8Wl+ cйOU 5(^o!u'p|!Z5\xZXđ;h>1HxYow^u O#sTchhB8Jfbhˢ>B8|%czick _ 1z-ťbI$K'*q2V[r<DHг Ƙ0$8Z/y) eFls9\3/YMeJ$ZֲKUPu"AL3_krbWj~&{η+QoWY |,|g2kU=F\_;c>qx|iş0P*9_ِR@:s/œsd#1Q:pm^1a{qtSM9y}󀸿aq% 2O_1yS &50bYv)6o;W\ uC 7ñs8l1g2$g%դN YnbqΩ* s~iiԞWOe^Is\a/4]+1QP0o_ù !wU@F5׊gcm^}Zv1 AR F[bϜ߬]fغ&u@r*lMq.=v*ª/R}sΨr߮H;@ G,rE,1z]NV] %]+G*`G;uW xjra!+ 1hϜ:f5OfEV0oV9:d0:o(>$$Rhs/bb^Y(Q4]n#9Wr_8Q.rҜ';Z+%aS /{Gt; Qi#R r.蠧b.-7xQhsQPn8RG8%|0Re8}RнmE,zWWˮz}>蠝i"tS=F[O[a 9y;Mݮ!XY[)gmRίׁ_T&|=M0'CrYY9B좞eV*JL>OMSlWiuԊs٭Qn{pbbNRawS2'Ӄ&T9($zs%+4(uV{~yUR.(Z6T;`#]OAfQr*& ՞,o}}!bŔv {15uި]S| ]3zo<'!E qcܤ^!Sg>'R[P)ɃMɹχyrQS.֞zP>jv)XاD}UL 3E *&Ƃree*ǹK1n}FmNpZ<͹k)- J^ w&~S턲rsN9jrUT8k&˛}]+<[]E9yrBr26ρ,qczeCz9nmgܛyQv$u];sNXs dr"&CVq2\˹Y0zx Ok!c: 7s,[pbD+1 .lkg /V:=\9SCZ2[t[{w)y'Bs $ޠ$u "ޖ7Iߎۤ\~N7r+a9&*q9| }8j=Eeٖs)W`1Hy%UlG+]{Mk)'ka5Ye|bjJNSFQkl+ fQ)vrNqb9L1iHyD͏,z醠DK^)cv/j(,뻟s}Wc>ars [Ѯصz օu,'*h}fY3rBPTo K]UŶlR&u7[jJ֪MNNǷT-rK87"@wYa!Ei}zs>{X.)Z#8ÜMKf9cHB6 y` \焹gԦ7r_o//.85@~%hyZ@2C_3qhsf3oOQ^xuv_8s͙?yewSnsb;e:h||7OESTaٝǼeڛw^~`3qWv>s{o;Gy }}_Dž _񦞋k^s 2eʴ׌#9|Hv-ޭҶHըfT`o&GesFF{<`!ۊW8hb? ~c<~RTY\U,>7Gw$e3[ y-S(5P`x5?+vۃex U;&[>fv'~Rs\z02[aGB/w~zZcMqV͢~hƋoİ$]O<2[2߷^g4܉l+3r[ޚyޢwzz6EM֬ o==oZC_K]N_\ _ro=_C=}h\{pO ްްz?婏5XT/r!YkEe}r]lu_t*Sf- ?/ngnp:CE [kG=>?SpGuM""bo' ӹząt޶ҨBz?iEyO-y[6 .+1J223uK$^/)kjv@YҜ.9V`.?WI3+opzQ{\o/a14| rp;5dWmY"4ӗ7VVPKphJO†zGFrcqN-Аا(ɴ1Z,_?>ZzӺ:>=XΜh*uJu/ej4'x:GD[{[eEی`\D03x7wcG~.8az+ثTpX|gט#lk-NbVzQϗ ʘhOH"IOsOOcF:gW|CV7ZbٓtP,/wvU@ZU)G h~.׾d,մ݉~;Үg?9.a{ ]/a{Y6-ً<[ΊJ=ɑr*m_JKSSJUu648_"iWRY̦qZE$s=fT/yG7/`>oXXX`eCWmPdę|Z7V|cHBEϹZM~>4; .:f#..zUGO0!N|3mZccvE$4u}a=[LVv|DUEV"L&}忙yJ_OjUfms:̲q 6ۙz6<,xfSW:? }gr_eJnC9C=ٶ\K≼g]/bqzr؃BͿ~'an/}G_mQy9Ό$~GfQMV˝/hPEj7$XW};5HBruwIstN+>ɺ> KnĻ+YW|!]g'vinU?~Ĉe_ܘvM9&y5ՠwڐnD1'm4{OzBpuJMwݥ;/jK*<$SqۙajE޻>gt:A7:rD19ii_k4_iݡXa W3W_$F;뭀u)[bU"0]WZo<|xGKTڿZdk:ȷTͩs'}LAAm*d6Dgsm_UVIx ~r7+|W Ky,w+U^Ӎ̂q\*nx|mݾՋW:+f+S_!os 5i$ 2IW-}'ϝŔjr0?TMSa9#}$XK[Eǡj7ԕ-|/$_ȮOVt*ob4N}Oۛ%|WԄWts40/"5:Iu=P^Jroj{uܪ@Ijz{uzp̭m7]&v.zI|v2lK]Q~.Pqcy+⺻ D+w2/Q0LG$;wG뼼.6甜0qdu_vX9Ic9,md0D CjUѣ^?B<6\gky# xAuNSJU7G<9xlc2֕3^>X%۟Rmx<"9 K_'VK^8I ? ) ys}QCy*a>ܬ[Pa]3y8%?#„+n䇍5:uTj?j=䣬YK"aX4_[JTKI]jo=?1 k޴A= ;*a˾*yCC ?d/ Wɚyd0"?wr?hѫk7J9g<;\v355\=X[tEm۹++Oh]z]1N+*Ž`Q.?1X9BghU㠥 TDZ\h$D 4E*:+9T2"gM'P&bw#^'hۢZd 64)PtxH<6IKN( 憕25i:e{,q\^[}j_}cʓfuO_9xq\Q4CN^ɭ ?Fh88-wg*b#Q,, _f*GlQ?Ac]vqfgU@wť= MPK%GQ>YO+bSwTS[}i2dDoq-8kUŔ ݪ`{oU"> .Av"՛)`{uglDjyw9fG0>\4Wh}g9y n y) d rmܫЍR'Sn{3[bBPv٢6 :ٟ*>V;W^.~}q/v_^OFSX{s'0sB_q_=ss+#Yfu*lo  y?+]â ^XeNu7:B(Q4bv2ȝo*y1^ ?C^0D҇U6;[_Th: -tMLCDT4/&%ݑ"H[H(_*'ycY= MUrKiW^G空Lr ˴]2}EX:rTF/HB8F- P1*=eU,w뵛.:jJWxkYiu}DO?[R[Ţ[Bt dݯl쿷Q=z.v|:6myӟnzf t_:7CMG .h2o *=: tKK],k}qQ.pyo*Z)co~{8NVSn)yL$c1*լ߷'k0(i׈ޏFtf|G-0 "(E4\[q" 6N׳PG;k_.ٰY =>G()q9Ԙڣ8XGJ/d_Q% e gd~4zHtLU+ODy{V|䵞zԙ?gΫFΕ5l~΅͑%Y̗`[s3ufdvp,)$+q";oݡ٠LboO1{we%Ԓގro~Y孍H㓫3mxճ'h%#o׬KK1r{ԋ0Hݣ+DQ3La{PMM7V{&/ˬrنx^.-\b'D=ޅޞ~g5YFxz9Jg '_ ߘK[n9ponƟ}ZgkЧ݌pʏK4Fkpc>67\2v,I[~Bܞs]tJ#[sr$K[V._ 76bnwCNPF84#΁=Ri -;j"cHb=ug.KYhp _?2ĕ>'ޓuGE~vKC?lqi&KUXU9J?^1{;F\ m52l]-3ۤA>ShZ_i)ٰY uK4JfS!W%x;Co5|*|k5_W?(=`_}5pV7{,wGuU#UwZh92- l$*m4Mm n~eYV+/&*eƨ9mҾ~_oyFzd90i!|QݿE'%;'+>:ҝkVKeo~ީPƂ#5ɴG7+u!Sph+#I)wĄqg/<0xgď0blz ՞W5>GvCBټ% ߾<8}F}}vםFfr!߬AĹ)'Y~05Σ u-󳱪Jg+{2J_6 GNg*Ֆ?'O_5k裳myG,v ?tx6,W)lRU[6ӴJ2y|ԽwD -нwb+R/gPEn5q8W!k? ^gU>L])hۮ/]_5dV`3L.=tUk tzt㵱"@?69FúvTPzNfIPiwMC8APVÂ-"UU%jO}haW~z~6{bbber{w9]pߏ?9$x?+FPzm;gfi~#X}CZPEXwxHnf΋#E:t+1!uٟ<qNmJS-I쟢tޛw8$o߉-d1n5ѹac>m@+/Oo kB*!-̻mR4tFšIvc뤺[9(^Mjސ ;>vz6cUF>lJB V{ٿW]eer Eot>8a7֮oI#iU? "nG-T_ol q{q/\__)OuPki1,-iv7o5S$~QmQquSry=`mZ!!fu^2dϓyVߘ`;in06?_L|m›$IL/̮~zk'-3Ǚ.Im6wmϱ?).;kIݨWRg֜渥KЯ{Y>7Eu U< ٥ tb6r3+ h!(eo ^Dte 1azڻUitqxMI4Ӂx6R*\Bx_Ϣ/|`V3Pƍ1c8S#Ha+]H %*n-} Opt^X I 􍆁+DХ?=?z|xT6#=~' t|r]0~ GԏP + xc"ƥK{,8 Ä!"aqkٹV\Kl p̚qX3z[, 2t]QͫD"@v*\.'YQAHko~A ?Uaq%OQK'n}dD}q8嶩_r71,r8u9JY E/<,Vc<=h*HnWv*Ӥ\-(nrv3)^+_Ua^`m8lAAO3\Y_IQk36R0|EM|`ed_'5;Lv8Wm]bkW;MzEȮQgs{pp|Q94?gnw>m*fqҡ)oTݨsHY/bz~b mx/EPͫfI $k*D4'oi(~qEER#ˀ!7ೲ(^%Q @*ԓ##{ RIA@ul'hq6;$U@X9yѷa@s՝ފߗ\,zӮՑN0gAqWFodW&_夝*(l ==&nVZ <ǰyj#YBRϳO@b|7`ȣE; ;N]#oϐ||`|zˊ5ǝF\GgǃA$f!{УBo=nκrF6I4ʥSJgyV7}9_ KC]CN=50U_HdsWI?)\qX mff5GdaE^ lsv(zHi c_UKŴR62H7). > >2t_ۖǻ_n_>7G,1:łTݯny- qgܵKJo 7i"(S֣NJ/ƸIh:Gr:b$1{ݠϖWoa-+p:Dp&oMvguR-C;f‰juZ N5Dcr彎5N(MLA4$BL%_'ӈ 5<ܼ9=DJgtKR \`.8wY,օ"ݻlXĆknΉvZV/`l #8?yOo=ll":o~k@s&_LlJW-'W49pfowpxi;iݿWXgHˆ=&uң6%Y~{`X~{-`{w4"t́$ka|S]Ⱦ.X^/5 Wh&˿YyTW>{NǦ,S7oYytuݝ#_2cmaY?4WDSR~k]OySt NMz`ǀ^ {?:kҙ\݉oc2tb֖573%+7]Gezb |sNpd 8_,F=x+mq?ևOt k_yUJ"輥S(w\((;6]:3H6UA7z$ Zkꁓ+W*0zn;* 8w~aOz&^{J~Ϧ躽|"R U#9xV`ZH&f/o_;g[5 $IxT}JL<\!_Yq Ցv)l@ґ7T7 ޫP\Y{B}PE&p|:q # ܿ &R2|IT0x:]UB%A̫ AՖA&Z@ wF8x r.{5rlވ_;2}NxaV _ ޹!1f _fGͥxV%|P`M~y4蠟WQz=n?G/Hn5ŗ0ͺ]-ʳ[ ʽ$* !]@?=L}eY+֧-Cɫ9>w qkY>G,2i/shC0/a WM/ԠXgTqh=z"ѿg}լ gjoQ&^Z7*s?3rq ʼn3$ U/SSvA<*2nIOP.\~4MH0V]*$JO8O:ʞCԫF\)dSPK.ѯ)"HAvb;7F9! : n* RDgRVe_rhfߋ8z?l]}M,PEOACXR9+^v ph|;ǏOb}J;ED-βWnPqcEwTR0j R<dء {V + @nm6p&`qq0_K+ wW{ 3"|s=ڋ?@5`K7 VT*Z>zqd\H+"*&,Ҽx`}`1qW)"İݣ'$ƲyGvghxB:)CV5/T{ 3Y0փcBv"ܖUN\aɐxEj}RsRu '֊j-P&9:|?S]3UrV!_>,o|8&=O0 ep\LCluEʃbᕰ(~a)s ]@82w1;.KCg )iw}jEvݥjirІBK2MwRu4λoE4!eqYK&G9%3^BGZOwdJ/),G}X"BEFt ^gFp'wHYyYh}%W}Z՞Xr,QeOnqU܏ i\| ޒgƗg<|l++:! %g=R^aS~ow9BNoX?EŸp ަDs X,mNFanW|z&L=}ݟܚTc?'P~ /"`cٿMަl0uC]c&vw?x6}as>XkX+F.C#^MM` |//Ll_v{Z߾JΔmqRiaw۴;jc~~-;, u0`wF#];X~uClh~L/|hLeZ=+~7vo_@=c}`TMXЂmƟ{͎zanxM_ |Lo='7b4п_~?'4eDc4=oӌS? {#uy{?a޵C7e8hߟ-m]ږ,Ax Ib#4)e`\N7N3$AfxKfSm悺 ]DN/S͟x{߹ zyp[Pي >TWϴEMd{Mpڡf:py5T2)K(YSr*):VE\VbiBJ`EZ%)yn% Ww>b{R O͹ގtx~wZo- ݷ]Pv=ڴһSަ]PEd~lzmңwV]Vڅmo>֪g=שO_s[;m k3gV}l}Bz0/g*ϛ7oX:_Bx1Sܶ=[62_Wڶ iW-SwޫTȟenoz$DV /K1Rjߔg #-,|R0uTmH@X9Y~^#@1u}n«J7\Fq7+$_ϩ_A /T Ьt {DCQ퓵-׎~7}BeO ,qh."բ"nQ\{ +:Y+]Xg;^& LT`_({3Te3EU{0w[~۹$TyHdv$~06^lyJqTa)ë/^jw@X] ԅUv7+٩oT_qi {X4D`%0= 7N/pi5/:R]-᾽4,By3K*yD.VHWnƊTl@8q6RfPY!|=b]6@Vo+`>*9E)o2|b~xq~;l@\ʾuT⤑ -Krw> { )[@|J`w=8)e7uQ{ZqU]Զ?_W::A{n$Ov_D-bm0BjרiT5䆴$g d|0o _Z |wMͲgR)NO |gwe'蓋D.S#,FdG{ED/S|5 i]88$9cLO$)^Z% x_ޕ|3=' 9:ɮ㤇l f\Ӏ1u4 uyyvli ub܄PD-fDҀ}`N /-%|ITA8 вY6[%ddzl\$n>Q4H0ũla;'Z&C܂ *F:ɔP僒ž#O ,?D~6y w~B=rZUX/u>w>5:(m-<7V_Vܑ8~n?~5 \}'=f' ƔJq]w(O#?uS5mFqGnZE"Y Ս*WIvSbn>wVD *{;z^(w(XS|qCY[sXo@-\;\pU(3ߦ;a; NL60q"8tG ݭqr+z>\W˥bL)7A~coOC*|90/̡CD%Xc~A]͛qԓš&%G@PM_ҪI$LOE  EJt|Y.(/&}ZBTr$3^ x-p+Lc\!SWC4·|!p r\/$Ɓ1a乖WߘLѴ )OKT KeޫSyIw*o:hBH;yGNZ= q;#W §ޭ0J{G^5Pr8`cߺD5![]5>2  $BuCG#tQۭ(u#,UO_":}fu^2m´M{K{Ƹs(O/ R{DZ~ K4rys^#Ba ݌V_+٥$Z!Bs!8T('\/~K,0'{:DŽ2KXp=T My)b pnƗD!dgGZW8R.5'~奮 _\C;v+sU VT;x$O Ӷ+'cű a\S Ҡ8|C )@{4C],(. .  +a.]wd1l+e K i(* Zv(Uq,xݘ8TyO(IIP7U{]J."ӥ^WzzrK GbNkNdWüzA+4NcWFmbyMMÊ^/k_-ĸ_KY8MAT֛tc2EcZ~Qiy3"gk8_@ˮ=l |2秜$59qMtqA 1!+=pT@|HB p82 e+% p]u¸^3œ9C9ץ*J~}}Әo.])IϾ$y0RS>*;단u۩!piBk\4|cHjRݩ[;хu` wڒH>eX %p2.HQ OofmQc"G%S`x,+c<FA/J}7(*40~$aɉkvEEyr>["/dzۯJa`|A~R9?hd=9Z7(>7PuBͭ @sW9W-dr8VV~6 kO$A5$Tx_jA-5eW +d;2]y7u3&6ɖܥ]g"RW ~Q1z BN}soB"o/˹~ٟy7l /(4Y|}՜eܾI*86JfD"U<|.I1h&XWgv$˂9̎䣗l ܇S@12KL`Xy?w'RnŮ|RR3noZZGM1/_z?S=PjMk3KNn}d4h-xeeɥż菾r 0,;vp7j[8N2pMH{[$.}dyoeW1D}vk~]ksB\~r]|oe&= %׈F}9vw(EAki[JyՋIGHCBK(N^2*T#}?G q/u>‡X<߬`I 0mU͂pvzm*t.U<"c}xگ̴=p6`;`5WWͦb5c1;[PHE?*GVw}H `9wuiO@o~j -+¹<~9Nb2BSS"c}6-'a]+ ݢdFQ$ K ǁVCAz*Sf+Nk*2/x6V`+5HG8rҾ$|f69T!ln楂p -Y^ש%S8]W*8@ULL=龎"Bb@;P"*`7 G݋V368/n[x!X; :@}~ [fqxti~ 9oh?U^&(˩[DsFf1>Avh?V(ݣn =V+Y6ێ9ϬPKs^ IO55hK!Y%ڟսYny0xḆcmT%jũ銮'ء!Oy5F+4MuZ/HrW򍙽 FqKSUc֞=|h>Lx׸U m%U|k5˟Bz^5s? iǼ_p`(Iьxw㸌Udg,A*7f{Pi-#[?n~C^LXhuοS^WJozpd,9pd5ĸu$7rjը~ZK*pO-"Q |rI^T݊S?Gc5p蘑&Ҙ.l,9Ҵ$>R0Vos&1Y6ي⶚*ĝ!.qzMQ [-W ˃Wd~ m*D~}5Aj~M\qo3,{Q𔣂䊛R'B.+@nʅ=z*+ǿoh=Ac2Aͺ_s =rA8N(ˡw{}xaR6:T<ԙ$JqcT0@?qh5̞LSEo&s{8t㒆y@7ᚰd/h?Ms@[aM]#Մ*bSwԳEk+PG_;Mg>JSxTVs׆( {?K?@$dO_L`ޗ>/tr ەHR=.髿%*/SZQ|q5ډ㠇^?]WدHY 8fYnX%%]m_IZXO*Qi/0aW5Z?ӘOfCe٥jۼAu|pk=.@m9Ke!ŧF NW_4PTJa Sf/ F)f'-p⊭{N!.W$a^P1%f(vj7J@b;~以Zj*KT k\=`q[ ԓΰ@\钚eoQ>DYִNO_+78eCvm{`{Ee)DYY3B= gF #GY}s|h_2IC@pO5wט/Fv4TU@/ ׷ʹMC^q'hخ!- rϩ4gR* |I؏r\6 safƻtBr2h{/ 1;}rKdG~ h'z?F\z}ȸ֍y(bY^uCeHw;yY0m)_VJ] _ j(UDEc>A7(;Jsl xXQ|@'Q |AeKlG~cm׻5a}m^+y[QvQ'(x IkKXi:>:,#O.A[L >#vX~jT}Hx%_ D3Kѷ}'yiLòĦCu/Ekv0mfUwZ!;ڡx _RO3rE8ig?KlxXG @W3] ,u ?63f.iGvv ZSoF1ߙmUD>w*s;5eѝZQ`T1Yo_"]R&5w+o!k`BVa`G7ؿ peţfϷq/ O ,o૘62/ULYjο e٪ eFAO{ 7 pKzCyAb ay_R r,P/Aywr|E3U`/m'evY <fo╝vZmW0>o/E8[=V6_"yGx;>Ѿ?Ĺ3˜yyq:nsfވƻ^~65%xhއZ;M. 3ώ?Ly#5D^2ΔI|L~3}nN[ qs[Z:L7=#ţpp8iLi~⸙b}ck׎c70L@}/8ylHN`eH86He/'4| fh2+NONiӗ߱?Qzxz4Rꩦnr Kn ȅsq {'/>)vf4v}Λ,'& (M3C4m3p}v/'m8 /}M+m$h y 'NmqD29d2M ޏ5>vԡcHPHnX}AAV*S@ ڣ{ f@:x6DخwZu ݪ{N!zu`PVl;i'_3 iKPEvjԽGHPݡ]nx)qN ٰ:tjݵ]P}{b6Ԯt+7^^sNϹ]pS6˃L] 쓛B$tB 4Vl1vwZg'{<'?ٮD42`~아ujd/z=nXr /oW=N) FfK-4]"[?Qi@W[[zDgyu7CxtWssngYi/N鶅'!HvA6(0hog!$xP&nFnࡠܥ *UP>h/}mØs p>ܨܾGW+-U,_رAgka_dHݒ";2?-?b'$5\#åB"'EutUKJ4Qblz6sC1'ERU,oFJ5uHѻD췭5bc/ 7xM>:/?ƐV5 9HFՌP Vjzs 4'&Qs8Gr"QMwh K${{ņJ9z+Pn~SI#klC"Fq? w 1_眏wsYb)oI2BͲ+|6bꪥk0yaw H9Ss}:b!V@+rR ywKeNvE/;XrHg'eY$Y6 9g$K 9I& A@DD" 3ߩ~ gsWWW8U'һH*v⋧0nڣޜq 5[E|>M F9sҹ9tDk:Ӡ{ڛLۥ¢\E袝 {|ױrtCK=Ez+2YR/FL.=׆zGOYtmoZ>&>H}7oT᷒Ojڧ?u(&\1f~WgoT]XQΆr_7zim}\# UvdJs҅y^[N7;-+wXz:RQ}i59 /ө6 NLZk.4[(Ms5꣱F,7z,ܭj\oE(7N%j0&L3ROytcٴcj&`?\bƆ3`#F 5iРk[/,4/8EԲ~D\>զ'I8|*khl,&mlzg1վٲ!R.o-4 Q2.b݁ 7nSs4B2x t<Sn7R+F}\ΰxH()70h?3[!|rQkއ43q+cBN;``@3$PQfk߰f ,A#+Dbi|(9EDJWԩ-;\hSJ^DM_ŒSs&{eȿ%ã!z.Ө1*wċuN1MC&OkZtrv̾ߥuq3c:Ѻ5O_MwLWXSFl9{3=5J A,Wqk0`b">3;O $'?Ph _}8phf.UV#rqR#&opzO7p_wkpuD ' `^V9xLy&19sĸMq}œ\E.~c \r cX'cqwH?DBS9a#D_j rg') sDavIc1PbCpZ8 pv&ONq%G-EW`"w5f؋Y120\`RsޜKM`Q]cABF9R9LM#0>L؅(T̶ f84ubCaT@rg_lMid9CMgµ Sf1~yv|?)th/\/>Q[Sc eiEzDݓcEK09X*D=Xϡ7$b8hAG79zq07ϫ3ofܐٜw<6`O؁xe2`)$ nS0s'c1'\EufۏYShxbXZ Z #zq3ǍP{ƃi"̧;94%Í~?rn'ףAwsliaëy#ñe jb[Wq0BdʢVv_9Su/XL{bE0 mil/r'V5|3=4S a` g }̈Ʊ\o)azr,B#8Tsf 2$b6yb,yZsR Xm2өv-rZ.&q3B#L9ʖ+.2by~ ކ)w~jo2𛛐 E"p{#rl:H'*&lzVya&.5nUFDg75 ct[FcK?pM_9sD,7+4swHp0Jokp,%G>~ y~DbDZmI1 X qQB2KA~}j"T'وNO߻9Mvl Ô9S]:(G#L1- ẖ6^('ZoVVl#C,%Nhlƹd(pWa>{ XEtښꌫf\𧌘zԵ9tAJR6sz\| Lj`w)*OuN_} Q էhHmf^O8n3}'`JA~dkYt2 K`){۪~i3.~N\8E&xFTꫳyMk+;"QZI ҷ=Z-/jAH>uщ6R9FciVIk.!QD=xiSpH|Ԋwto;o{J'ܫ.\Q9q%d6KZjA[Zpە](S^7҉K&LܩZ֣a;Iߏ~pw{gAnwVY)u̶n]>yu|ܷ[C5/;QoEop 6Ųә-iNYtjv:t ÷Rľ@P<[kSic)f>>%E(s^78Lƨ|$|m1L'$0usG4سC!9_&c;/ xcEEl`'_O'ڈ(DL }۹UF/jpa0āXpqv]!<Eǰ_ԫ813ny\oG{BVOs8v1Sv(f "N%(IܧsLuOئN9w$[#t9r@LߋtH?11j,b2 n.]|\z-[ a*qT=)h46(/![MX ҨG?C@*4< wJ0cEtBntN\п_MYNb7xsD[?3F;%ň%Ăs .`2 1eb'-1TVcĸ:"°# m4DU%x31#ڏ(po(u=mp/ND9#8xlQj2>O ۟1=G4(x8G/B|Nh_5F(0R48u NDc*<Ǘx~3uƟY |~"88?ḍp֓ǧs(q Ios~iL: $E.-wL޿3X6.Vޞ%p r OKۏFk?s@|2͠o8r&11y{>ACk1N!q68D_nm홈-ɼ _-Y'+_87Um>>ù$[y$D=[+RE\{X.ΑrQ'8gMm,OD:8 z+<ݭ 71? 8sD?Ʊ')F> nYΥ1a 8K2/3Ν9羢XЋ ZgcֵuJH>měu rٺ?v +rPP#岿Gڲ2`zL-.K5bn޷s~}k[ݏGJd1@Ǖ$$SM\8JҨ@6:QԺ}<\X46T5;ܜ ❁J7!OX ^b 68+_1W'x-1݋)"{beX{*N9sa+G7c8W!{״*-OλN8-J9:K95)5ש}wF1:^tHBti\ށL|FUS6ըo&mJ@4Z|{0JmD?߆hzS̷w)jG-bnED~\P hz;⿘q3|EY٩ w=XƢ n(]fBT'Dãz! :eRN;dB0}1nx@NvmWr j~}s;ux'*yFB?·LV@?7i5'k=DidD  ;~ =u p,NgL\mѫxbx^xTO: "1.ث||fQ$Em#t3G7 zNq?i)aNߡwtnN}t:~+kC2ޚ@eh.u?9K#<~1c98Y;'0U3Q?DC݉Ẋs|($>?K2}ylMn}Aes"4jWwor1n!JƸY(7 ;qere̮~bWѦıhܡ)6ٴW\?)z4(]J'37oӨ}Wid:hD^ҔŒLN)Ծ=K}; c)f`#m}=fn9a1{K:!9_:WMpcXiqܽxAaLF\˱sbrNBy&?XSC|<Snk l-Q.هk0#2y6zjNUwt(uo3 V'[kpOCF@av?D1|{ ob|0w~8'sl޹+d ?>ш8SGb<%oKA`NB[p"!$g1ޝ.9@1_x۽8g5LC:aI!s!ذ9HRmFw,P1 43a/4x LBN2,pC{QL"׉y_5Z>-fi6". wUD!v`MoUyZqc|E&>J9 1Z8;D)>͹ 6%vQ3N<\>/3'Ff2015 1ouZx[,8i+t]<9~1[0m_v`0f b?щ/نgc؄!^FCL<Wg8 qC T>?3$i|~} 'a'cC|ɹd#Go NGL)g~FANs3{߹7q>O)58[I %7`1!6_6I`r=$xGa%J9+R,!A&F>I8*"9BaQ@x Ws#\蓟DF@*D`Mz\=)~D$G_s%C/{T? 80xpc ? ǹ l$Iw(M\ϱE2,d)%:;c !Jڐ")2$z$1}9,~/}/4P]$M].p0Z^Eu^EUJ4e4eh"hir5x45ԆJvw+nb!y~Vh_0'b8R<3$~~}i~'|c8IzOC(3B)na#SS"9;gC%8K=#@I ϓ;s `^Rh)l&>lU/@Y(Sr 7CmY3\`iݱw3b7s b\1q_P;`Ҩ[Ţ ETkޟ^`3af.찜arRϼaPOTJnbëmb@4֧r uĘ7"`rNN Q Q.0Ѿ^XnsawbvjM@J[at4j!_i쑚Y͹/rg_w~Y,јR-͘)8R M?zW.gA4o/1m߇Xr7O9bG13{jDjJ4Y^ q1X\S+2q} :7$f8(Ÿc ky}+>qȚ(v041|Q{-yk .b[.B?s'a%]k/ ND {jÏ P'6u+N)b[u€qW?3TB j$Nֈ4bN3NE,𗿭4gb͈Ruۃ[gI Π$.>2RhӎhŸc 1ەNߪdBhE+Ux Vvj@jl3鄉 0a/¶8ÿ:>&WHp qn(71وlZ2 "r( 5o NA>8WZ@ɬ֡^4*DXYHAwve-uU >u|*\"1% TVF9f_TҜ7zZjtZ@&US9Wx$ YCC 8v5_1v'coYi6Sjߵ^|D?#k{c`}&(G0qfGpJ T:sB.g?3b0{ dZU ] G7~N-i%k4XU40m'Ԃ}:}{@c~vaߨTk+X 0á-Œ_W)H-3jO3mY1"5x__ul$pT=`fzÄw!Řq ~n1HqFU(0{,/O51o팄_õ\b\(_PLX()"{ )Q_8.Gp;q +0Z .9]B)n=qM!ϟKki#57fhMufGl1_)!0㖜/p Rn)bME b~,F\,>?5v?AĔF{p1O񦆽M3ÉxJ ?!:^T7q458>2m+pel|WQ04X![15og e Gݗ/|4F9W 4/ӷ_CIHl"֌7qq{{;I_v|߮7 HӐ/¿S{ļxoo+b1y羨ߢzO(7BO,vU('HEoS#=~6#VNaļX|ܳV_2M ]2x_K`(D:NBM" ?NEF.A/m:AFbp-D F$є>e89q o61|JzbƝˆ={;Nux[d meD=DqŽ녯ffM.]g~qW}10b^3~!@Gq ^/ ;֊`W,ADỜu GKC<4eoq|e( >K!Rǯ4VqMJ30K{q^ Kڼ,X);X:5Ahn:SqN:CiSa3J# 4 b:hWO 뿗"1?F-ܟzO!Fzk4y >fK,9?SrspWⰙVPg~ Q_'`w5I<b|#ݸb}߷?335Ш[րKULc)b#`)>,vx#v)`~9q*Bc<)=A4ebAqS7U qсD doJ\DCvD IGcI/ DSNRoBFM=iJC؛{=O=xB> 'w{O \a)B1Fo8NIN477ͽPrHzpz<䌐0Hw^ӝPb /?2,<ir8Z6Z-asޝ0/uI) R5= IIfqC 1)B&_Ӛ \kėN5 R㍣eʾbi4il}1%W/D&I2lC&ݱhC d&t4w ml3oJjf_JLLkHJݻ]5Ҥ4˛W"vm,iJArB@Fʯ=#!3ā@FF̴IquՌj *UJHL0uT O 6Lqu'f,x#i=I]ߞ?aݸqB}V:*Ncoc@|s`znHW7k3zܦcb׫D۹JՋ&I0\ $$h} CR'7Cb2j??cRj@K'KRQ),<"22E07UZ%П%Jxq)X]SUX2ea0TTRUw xBQ%jUzphٰ| bɒEÍSDKpzV/–wK}bzF/.*Eͯ?Yrb4j/_|?FK@@FLYA\ Rh=H= S@l EK|$d0x _9r.HђD H7) +@9#&==54)فsxœ>.5L5gdw2w΄W0>358ىF jN0SR`zrbF]B0%Fc5 V0{IČ , Nj7 fudNǍԱMs{ZVh d'$ZuRӓ7DOM.q? LNM83՜ 3+x$?]7yFOEќ n&d[ĎRL`S]ؔd*f2d̛7o<&SSтoLqHRNi_X22aG2X^^j.]R+HYRL]xHa1ICÊ6ްX/X`ds/I? )X`d#[x=?N=uBߠ{!ˋyoךO=闢 @f 2d> }Rㅫ+t*TJR䷙T#UiRR(B2ق? 5 =0 zZy_`E{xJ)[o)n ߫TJjk/[6pT#->>!ءc]SRӺgdfewޣm>iګw8hÆ9j96aSN|fϙ;o/YŲ+VZfܸi۶c}]ݷW}}c?qSߝg/\t_k[ܽwG<}&fRRS;_Ue~t\F cb~D6oӴn4Y F7_?*~8F 5o&4lN> kHj7j7qbZ1ͥWo.CrW^sI5$ Lci[H,Hs -A>i iBߎ [_1M d5F A9 @.\$J Hq3H% R6H= MAZi Õ|qFЯR_ٱ6K"!*muRl Mk'1BMsHj 5n 5HMIbe0!vJ+O@fV:]ɢW*r9F!z(J@z|') 4$X!˂JP/+1+ CF@0=g+pWrGr3r+q#rrrr5\Elȧ K@d;N} @Fzl|ul#]|uX73T`:i/3 \y{&Uf4?\=k|||"lߤ)ٚyRl- (3FfOxɅG}ڹQ;GGY$z߸ W.ua^>PO|{>9#LMe}gw~_Kvo >5C d$H9H$9^8 .PR2;ILJK=|A5GrCʈ{g’&2sE%r NVzկ/`ugYF<ǟ=]Ϟ=q6A\wu߸ߗm~ƍWvYRjGUuע- : Aj5jUԬ.tZ4]QKyZ|-~fͤTnRUzèRUTWj(Ն'V5֪o'֞煱&MY_cr)̂t0Kkz @4gOpQ hbMYAAfl4@ HbJbf" {Rt:Pc6\TcKR 2$ɚSlK0?/I])$F >f61bCo %FjaTRv c:O22eȯ(IS f6P a,.Fl:7|̴/]oSut6/'VSqLxp̞ |^Y&4 3m=:5+E ýy 1lC/۴*Ă ARƨ슜Q$@b'>?yB``r ͡ŗ 66ϗm?5__r_Ca =)FmhYL̽z_9&[eâ ǯwr[@&)G뽕+!?(>>3=Yǫjƍ)SA /1'R%$T"N3bWC&鯿kN3H'y^j6jNJq Ju?wʌ7}濻ʤv /Thh9sנ$qCo^7 9R1j4לw $I|饃 t셊 b7^c ]?YJAIK8AxJb[&ET^liL,lT~U_OmȽ4R,5o^TW7ᕲ;]wOKXH.=H*5wKCKZ|5J*VtjY_^$pI:Q~%-^l}XH+4> @惬 rf鍉1 {a6b{^*- VI"c:X#H[͞o5Oa F!<-4;m~W$+H$IdGlGd/digDLJV2KpKȌnc6Jw f3,7.ޜ0j6q2 BPӺHѰ" !R P#=(őNIwNPw.)2 ɯ^u@:cPDDH}E0wOS>{TrR[[ |AWTMHww1wi]]muܚ{{w)iIK]?=mu~ݿ?GQ41j(4}h"Ztt`a+b{vv\ SGj/qV(ݹR*r:3]]K]k\\\\'\߻λnO6R?VjUQ+ {{= >~dz~GC:|jaW+WIYW9թRSܳ _7Ovw?uz y{x*{jxssd@~kKrU&By^!_WYZ¬eX y6[?mlvemO=[=Q) N~E+uFJCxLR.; [,;ooWȳ!ޱ)9ޥ޵ޭ=S gy>3˾7G/ GS}%Wk|.1egnWk]rf{{;v]޳2>>߾ISʳvvvCvtZr:JP̳3ճS쓛ȉr_yN.ZEC6ڂ-CmliˣR*@{P:*C<}}}gexaZ0qQsքys7uwv{C>vx o`چ9y|JDCy²βٲ̶̺K9ugNg ٥j8:۸r\!|lf}߶3g>(]-;\\O\Uz o}}7 QTҟOE1}!h!?#<3Qʉ1$5]r΄ϙW+AwD9hA:#\,ߵVxncoδi_ uMXR[S:(IIWŊP@ZR@ Q*s[lSv)sSWwpLK9L꣎WWK=PϩwէjnwAy+3@Wݗ7A[gWϛTڠLm/J\^7w%$C{Zhm6MgkbK6u' YT؛@ kg_ef` QphzXG[hC+ޱZ3+K N=lja8tUv)\@ChCN4F Zr%mKlfҒWv2Ҳr2LpIE5]3$'?ȹ,E-־r)Ї'[[Y[,l{fimml6 %A?)y>hr,,-]c]܇\\WfSX-qvoprGA; mm}oZHZ%IYϠ)ijqOSo o~Tu47rhkVh3h'@v@Kv,W-uMO/ImmVVՄ>-5EiS@ ereoQy{)BG:iKNk+^2V?='=W=?ph}S}3@^[[[[;1Ii(?zxxޗk߀C62VZGȯJ򑒢 Qf*˔oߔH{ݔhN}cc#~؞9 (7h3àp~\-7Ί.DգC ےc,씝v<&9tv+Mm V~RPDzV˯V1aw,m` :b'͓b? hGyr<gwH$|bwq6vtΣǷ_A3ƪ~]U= Et] G+>hFC{oyK oȥA{ҷ'yO>'fdr2+pК={LJ=@m|,+;J=:S=AjQzG#1ݱmP$-D Yhyq&˽ߝM}C?<}[[_;-E+!Nr=A.ida]fn}ğ[q9e}FcAh.oٟ{:&88Hg㔣kBK; Oh.(_W+eMU'?q]Q!y.yҼYy(/5'~jyh1bWQg(So9lMI%Lrp} ZvCzիr$---,-Aom]`fiu^36vڝnA0l.P;}m={.оIB)Jpfmoojo`+bgt>1|HRL)J5CZ0Vo c6J{?`2^|eJ٠lUv*E9|erSƯ}|G}'|~]О#%=2CR/k~\tL/K˙(eWRo@w W6 B9h%^~AaQ{yW%W5 Z兾>_6vW'WTa&h~kkkkkh][]kk;s_Akz^O'X[[Z7Y[4nà, ,PK Hi3 VV aa.exeUTrCUxPKA,Wastronomical-almanac-5.6/aa.ini0000644000175000017500000000047510334376411014727 0ustar jrvjrv-71.13 ;Terrestrial east longitude of observer, degrees 42.27 ;Geodetic latitude, degrees 0.0 ;Height above sea level, meters 12.0 ;Atmospheric temperature, deg C 1010.0 ;Atmospheric pressure, millibars 1 ; 0 - TDT=UT, 1 - input=TDT, 2 - input=UT 0.0 ;Use this deltaT (sec) if nonzero, else compute it. astronomical-almanac-5.6/aa_msc6.mak0000644000175000017500000000510706614664705015661 0ustar jrvjrv# MSDOS make file CFLAGS=/c /AL aa.obj: aa.c kep.h plantbl.h cl $(CFLAGS) aa.c altaz.obj: altaz.c kep.h cl $(CFLAGS) altaz.c angles.obj: angles.c kep.h cl $(CFLAGS) angles.c annuab.obj: annuab.c kep.h cl $(CFLAGS) annuab.c constel.obj: constel.c kep.h cl $(CFLAGS) constel.c deflec.obj: deflec.c kep.h cl $(CFLAGS) deflec.c deltat.obj: deltat.c kep.h cl $(CFLAGS) deltat.c diurab.obj: diurab.c kep.h cl $(CFLAGS) diurab.c diurpx.obj: diurpx.c kep.h cl $(CFLAGS) diurpx.c dms.obj: dms.c kep.h cl $(CFLAGS) dms.c epsiln.obj: epsiln.c kep.h cl $(CFLAGS) epsiln.c fk4fk5.obj: fk4fk5.c kep.h cl $(CFLAGS) fk4fk5.c kepler.obj: kepler.c kep.h cl $(CFLAGS) kepler.c kfiles.obj: kfiles.c kep.h cl $(CFLAGS) kfiles.c lightt.obj: lightt.c kep.h cl $(CFLAGS) lightt.c lonlat.obj: lonlat.c kep.h cl $(CFLAGS) lonlat.c nutate.obj: nutate.c kep.h cl $(CFLAGS) nutate.c precess.obj: precess.c kep.h cl $(CFLAGS) precess.c refrac.obj: refrac.c kep.h cl $(CFLAGS) refrac.c rplanet.obj: rplanet.c kep.h cl $(CFLAGS) rplanet.c rstar.obj: rstar.c kep.h cl $(CFLAGS) rstar.c sidrlt.obj: sidrlt.c kep.h cl $(CFLAGS) sidrlt.c sun.obj: sun.c kep.h cl $(CFLAGS) sun.c trnsit.obj: trnsit.c kep.h cl $(CFLAGS) trnsit.c vearth.obj: vearth.c kep.h cl $(CFLAGS) vearth.c zatan2.obj: zatan2.c kep.h cl $(CFLAGS) zatan2.c mer404.obj: mer404.c kep.h plantbl.h cl $(CFLAGS) mer404.c ven404.obj: ven404.c kep.h plantbl.h cl $(CFLAGS) ven404.c ear404.obj: ear404.c kep.h plantbl.h cl $(CFLAGS) ear404.c arcdot.obj: arcdot.c kep.h cl $(CFLAGS) arcdot.c domoon.obj: domoon.c kep.h cl $(CFLAGS) domoon.c mar404.obj: mar404.c kep.h plantbl.h cl $(CFLAGS) mar404.c jup404.obj: jup404.c kep.h plantbl.h cl $(CFLAGS) jup404.c sat404.obj: sat404.c plantbl.h cl $(CFLAGS) sat404.c ura404.obj: ura404.c plantbl.h cl $(CFLAGS) ura404.c nep404.obj: nep404.c kep.h plantbl.h cl $(CFLAGS) nep404.c plu404.obj: plu404.c kep.h plantbl.h cl $(CFLAGS) plu404.c mlr404.obj: mlr404.c kep.h plantbl.h cl $(CFLAGS) mlr404.c mlat404.obj: mlat404.c kep.h plantbl.h cl $(CFLAGS) mlat404.c gplan.obj: gplan.c kep.h plantbl.h cl $(CFLAGS) gplan.c aa.exe: aa.obj altaz.obj angles.obj annuab.obj constel.obj deflec.obj \ deltat.obj diurab.obj diurpx.obj dms.obj epsiln.obj fk4fk5.obj \ kepler.obj kfiles.obj lightt.obj lonlat.obj nutate.obj precess.obj \ refrac.obj rplanet.obj rstar.obj sidrlt.obj sun.obj trnsit.obj \ arcdot.obj vearth.obj zatan2.obj domoon.obj \ mer404.obj ven404.obj ear404.obj mar404.obj \ jup404.obj sat404.obj ura404.obj nep404.obj plu404.obj gplan.obj \ mlr404.obj mlat404.obj link @aa.rsp astronomical-almanac-5.6/aa.que0000644000175000017500000000047706616754277014766 0ustar jrvjrv1986 1 1 16 47 0 1 1 0 1986 1 1 20 6 0 1 1 1 1986 1 1 11 59 0 1 1 2 1986 1 1 1 52 0 1 1 3 1986 1 2 7 25 0 1 1 4 1986 1 2 0 23 0 1 1 5 1986 1 2 9 23 0 1 1 6 1986 1 10 14 42 0 1 1 7 1986 1 10 15 42 0 1 1 8 1986 1 1 12 40 0 1 1 9 1986 1 1 6 10 0 1 1 88 star.cat 1 1986 1 1 8 27 0 1 1 99 orbit.cat 5 1986 1 0 0 0 0 1 1 -1 astronomical-almanac-5.6/aa.rsp0000644000175000017500000000043106254027306014746 0ustar jrvjrvaa deltat rplanet rstar kepler lightt vearth+ annuab deflec epsiln precess nutate lonlat+ altaz sidrlt trnsit diurpx diurab refrac sun+ fk4fk5 constel kfiles zatan2 arcdot domoon+ gplan ven404 ear404 mar404 mer404 sat404 ura404 nep404 + jup404 plu404 mlr404 mlat404 dms angles,,,; astronomical-almanac-5.6/altaz.c0000644000175000017500000000610706617064660015133 0ustar jrvjrv/* Apply diurnal aberrations and calculate topocentric * altitude and azimuth, given the geocentric apparent * right ascension and declination. * * Ephemeris transit times can be obtained by modifying * aa.ini to declare TDT = UT. * * This program assumes that deltaT, the difference * between Ephemeris Time (TDT) and Universal Time (UT), * has already been calculated. The global variables * TDT and UT must already have been loaded with the * correct values of TDT and UT, respectively. See deltat.c. * * Inputs are polar coordinates: * dist is the true geocentric distance in au. * ra and dec are in radians. * * J is the Julian date in UT measure. * * AA page B60 and D3. */ #include "kep.h" extern double tlong, tlat, glat; int altaz( pol, J ) double pol[3]; double J; { double dec, cosdec, sindec, lha, coslha, sinlha; double ra, dist, last, alt, az, coslat, sinlat; double N, D, x, y, z, TPI; ra = pol[0]; dec = pol[1]; dist = pol[2]; TPI = 2.0*PI; /* local apparent sidereal time, seconds converted to radians */ last = sidrlt( J, tlong ) * DTR/240.0; lha = last - ra; /* local hour angle, radians */ if( prtflg ) { printf( "Local apparent sidereal time " ); hms( last ); printf( "\n" ); } /* Display rate at which ra and dec are changing */ /* *if( prtflg ) * { * x = RTS/24.0; * N = x*dradt; * D = x*ddecdt; * if( N != 0.0 ) * printf( "dRA/dt %.2f\"/h, dDec/dt %.2f\"/h\n", N, D ); * } */ diurab( last, &ra, &dec ); /* Do rise, set, and transit times trnsit.c takes diurnal parallax into account, but not diurnal aberration. */ lha = last - ra; trnsit( J, lha, dec ); /* Diurnal parallax */ diurpx( last, &ra, &dec, dist ); /* Diurnal aberration */ /*diurab( last, &ra, &dec );*/ /* Convert ra and dec to altitude and azimuth */ cosdec = cos(dec); sindec = sin(dec); lha = last - ra; coslha = cos(lha); sinlha = sin(lha); /* Use the geodetic latitude for altitude and azimuth */ x = DTR * glat; coslat = cos(x); sinlat = sin(x); N = -cosdec * sinlha; D = sindec * coslat - cosdec * coslha * sinlat; az = RTD * zatan2( D, N ); alt = sindec * sinlat + cosdec * coslha * coslat; alt = RTD * asin(alt); /* Correction for atmospheric refraction * unit = degrees */ D = refrac( alt ); alt += D; /* Convert back to R.A. and Dec. */ y = sin(DTR*alt); x = cos(DTR*alt); z = cos(DTR*az); sinlha = -x * sin(DTR*az); coslha = y*coslat - x*z*sinlat; sindec = y*sinlat + x*z*coslat; lha = zatan2( coslha, sinlha ); y = ra; /* save previous values, before refrac() */ z = dec; dec = asin( sindec ); ra = last - lha; y = ra - y; /* change in ra */ while( y < -PI ) y += TPI; while( y > PI ) y -= TPI; y = RTS*y/15.0; z = RTS*(dec - z); if( prtflg ) { printf( "atmospheric refraction %.3f deg dRA %.3fs dDec %.2f\"\n", D, y, z ); printf( "Topocentric: Altitude %.3f deg, ", alt ); printf( "Azimuth %.3f deg\n", az ); printf( "Topocentric: R.A." ); hms( ra ); printf( " Dec." ); dms( dec ); printf( "\n" ); } return(0); } astronomical-almanac-5.6/angles.c0000644000175000017500000000222306264601373015260 0ustar jrvjrv /* Sun - object - earth angles and distances. * q (object), e (earth), and p (q minus e) are input vectors. * The answers are posted in the following global locations: */ #include "kep.h" double FAR SE; /* earth-sun distance */ double FAR SO; /* object-sun distance */ double FAR EO; /* object-earth distance */ double FAR pq; /* cosine of sun-object-earth angle */ double FAR ep; /* -cosine of sun-earth-object angle */ double FAR qe; /* cosine of earth-sun-object angle */ int angles( p, q, e ) double p[], q[], e[]; { double a, b, s; int i; EO = 0.0; SE = 0.0; SO = 0.0; pq = 0.0; ep = 0.0; qe = 0.0; for( i=0; i<3; i++ ) { a = e[i]; b = q[i]; s = p[i]; EO += s * s; SE += a * a; SO += b * b; pq += s * b; ep += a * s; qe += b * a; } EO = sqrt(EO); /* Distance between Earth and object */ SO = sqrt(SO); /* Sun - object */ SE = sqrt(SE); /* Sun - earth */ /* Avoid fatality: if object equals sun, SO is zero. */ if( SO > 1.0e-12 ) { pq /= EO*SO; /* cosine of sun-object-earth */ qe /= SO*SE; /* cosine of earth-sun-object */ } ep /= SE*EO; /* -cosine of sun-earth-object */ return(0); } astronomical-almanac-5.6/annuab.c0000644000175000017500000000141406065426344015256 0ustar jrvjrv/* Annual aberration - AA pages B17, B37, C24 */ #include "kep.h" extern double Clightaud; int annuab( p ) double p[]; /* unit vector pointing from earth to object */ { double A, B, C; double betai, pV; double x[3], V[3]; int i; /* Calculate the velocity of the earth (see vearth.c). */ velearth( TDT ); betai = 0.0; pV = 0.0; for( i=0; i<3; i++ ) { A = vearth[i]/Clightaud; V[i] = A; betai += A*A; pV += p[i] * A; } /* Make the adjustment for aberration. */ betai = sqrt( 1.0 - betai ); C = 1.0 + pV; A = betai/C; B = (1.0 + pV/(1.0 + betai))/C; for( i=0; i<3; i++ ) { C = A * p[i] + B * V[i]; x[i] = C; dp[i] = C - p[i]; } showcor( "annual aberration", p, dp ); for( i=0; i<3; i++ ) p[i] = x[i]; return(0); } astronomical-almanac-5.6/arcdot.c0000644000175000017500000000403406427376512015272 0ustar jrvjrv/* Find angle between two vectors. For two vectors p, q, the angle A between them is given by p.q / (|p| |q|) = cos A . If the angle is small, an expression in sin A would be preferred. Set r = q - p. Then p.q = p.p + p.r , |p|^2 = p.p , |q|^2 = p.p + 2 p.r + r.r , p.p^2 + 2 p.p p.r + p.r^2 cos^2 A = ---------------------------- p.p (p.p + 2 p.r + r.r) p.p + 2 p.r + p.r^2 / p.p = --------------------------- , p.p + 2 p.r + r.r sin^2 A = 1 - cos^2 A r.r - p.r^2 / p.p = -------------------- p.p + 2 p.r + r.r = (r.r - p.r^2 / p.p) / q.q . */ #if __STDC__ double sqrt (double); double acos (double); double asin (double); double atan (double); #else double sqrt(), acos(), asin(), atan(); #endif /* extern double PIO2, PI; */ double arcdot(p,q) double p[], q[]; { double pp, pr, qq, rr, rt, pt, qt, pq; int i; pq = 0.0; qq = 0.0; pp = 0.0; pr = 0.0; rr = 0.0; for (i=0; i<3; i++) { pt = p[i]; qt = q[i]; pq += pt * qt; qq += qt * qt; pp += pt * pt; rt = qt - pt; pr += pt * rt; rr += rt * rt; } if (rr == 0.0 || pp == 0.0 || qq == 0.0) return 0.0; /* if (pq == 0.0) return PIO2; if (pr == 0.0) return (atan(sqrt(rr/pp))); */ rt = (rr - (pr * pr) / pp) / qq; #if DEBUG pt = pq / sqrt(pp*qq); pt = acos(pt); qt = sqrt(rt); qt = asin(qt); if( pq < 0.0) qt = PI - qt; printf("%.16e %.16e\n", qt, pt); #endif if (rt <= 0.25 && pq > 0.0) { rt = sqrt(rt); qt = asin(rt); } else { pt = pq / sqrt(pp*qq); qt = acos(pt); } return qt; } #if DEBUG main() { double p[3], q[3], a; int i, j; for(j=0; j<10; j++) { for (i=0; i<3; i++) { drand(&p[i]); drand(&q[i]); p[i] -= 1.5; q[i] -= 1.5; } a = arcdot(p,q); } } #endif astronomical-almanac-5.6/bc4.zip0000644000175000017500000004452306614703072015046 0ustar jrvjrvPKrpc#Q|. BORLAND.DSWkAǿiҤIjE ILZ@QkC#Mnvk~@Ļ 'oD/^'=xSڃ ԙI'P!R }on.u[5'VctbE2bQH]{(߽>|w)l۶ ɞG&AC?ڿ8S{ݐ #DӲ4uOpaD.!F'qs H$5TN:v2,MZtH9bvǰHuXB:5؍4Y^I6ԝ$}U#䕴|ese֬.y{1e0YC8CLOM㊲q~Ă2An3NBfr*c Q'PHH.PC- $%PS [JЉL/+ГKgJ&׮3xڐmxڐN-=3WςȡbGZ+˪z,-p:w:Y(wnq? | &O*O#>z2:?ښ _ce5fJs=ozmHk[McƢ.YTcoPKrpc#t›3؞ BORLAND.IDE[y|U>i6B-RJYA&-4 I `'MҤ&) Π>⎎^QQuts23x;8"}-w ?;=9s|) "ݖI,Xte(CYl ޼6Ɩ+dՌulȼϤ1|jױkY'tv(MSo+> << lO; < << <<xx{U`/:&6]?GO? | w࿁ρ//#W7Q[1A߀ tLz 0@&`L@ @((ʁ F#Q V`0T5D`0)@=0ht`0gsy|4̀p-@+hNpn,b` 8XϧA|Gs$ɺ"Y҈&\ffˢ_NGAU'pJ~HS],rp9Xחl6\_,{L>2X?{B~۞™8ZpOp w)܎.+S\+qVY :b {8,iiI73_"?hJDP[g2NI]CEOXR[h圤~%-=%@_qٕR>)88HdSd. )[*|5P.S)i$BH "/k~Ika-Y=ζ&/ΟAì.oc6ôZ4OڀD갻l'a>nq s4ALu6N^g鬱Lz}6kRk:jwXjVwj9c_ijGS'Ʀ̽coo 'wB@.Wu1̽.ywW3.675\f9O%Ė^CSI?v Ro7Iw4|6?Z졮P+ϕ}8YKp( ED J$d)$S,a!SE\#4~Xh",Vg1Fay S[E뺚n.}.O7u/c{O`T}Pq"C G'b }cH>D# wPښ.|He6jlNw+CI?|;\~f>59X? ;>a|Eaknv8^*y-nf dsH4)?jzc`Tޓ=t;Mj#,na^G¬㷬w[>;|Zi{' 1IVnڙg[찠b'*[* R31p3XIm\ӎ,]Z|r[h{p/qNEbAi/pS@R7IdGos2^lQuDQS[0Bݩ TejID)Ѡ4Wz89Z3[j^_(&{ϒ [n n D,n_HLԖ񤑪䞕^!zJX-g0ZiqKN|L^a;. 1KL~ }J{C0/q>!S|v\fIsVo'NTљRE 9$.ͤ]o6[]3H>+F L˛/f;67+KzO;qAYgh6 $}Owu8/ۘă79Y2b 60ԕ|j4,`򇙲 >ȉ-pmAc,f8|Ix4GXB#E^~Dn(A.Dˑ}X~u(}}R1z&Kxx(# XAn`VY_/0]xqxH?^1噉gj-D] ce;+qÔ_P%MNc|LC 6Ի_ۉB=PO,dsL5 c0 q&?DcɂAOG!C5 Z:Q*ߥ+`*?dVz!恰yMi!# +&&.G7|w.gT^gyfϧ7S(uxm^~8j5g(n~g 7~}2ȷٽN_d:\rl#TooR>S|mdke׿ 7 ]淹]^S!_ӕ[eacIUV>;e~P6 I,__(ζwۅ\⺲iוKZ-vwJ+0w5H,,M= okJ>w8-NGʚd;j|6oݝwKDd~0U;?[;6 ttW]lkRzdz;S>G+*+vNJo(Y|XqiɼsK..ydwᒼKוn.UzXieee6*;Pv|FG5#=Y#JuL A]ƕɮ%;ƕ?'{9K)Ed7=edW*J_CJב#6Ddo !{=Dv[v]A\Ȯ!?)s+ד/!K(BJH6B9'ٻMf (&B6N3>Jo'ɚ5gH" =ʗZ7 <Ӗ/) yd檫)o٫^B]An&{+i#_=Bb7do {#ٛBs=kfQ}wv,Tڟd3{zJLLسw Y34b[ tk`|@+_U뚟Ys3θP@;ۃt#'JMMMMn::'iSۜ {8 Sagq8ˇfev֛OQqP0>WU_W)|YgSNeϗ&7ŧW|RL7UVcg})ZJmM=$OJ[S8sΙ iw4umؼ.oL7ItBQV1!Ԁh:rrJGeR?~(dhp,/qcPQ}z"S/6L;RG#_Ot^̘S4άL;Nyi+ N;_0'ኒu>Iq:>1q3qgt`ɗVb}Gw\u= z]X4yf5BjAs\Ь4AЬU5:0lVZX G_i}O׷[^]Nr}O+ӔZdT|&;H,_[3c੄?bSR5 SjLS䘂K=rL>*Ǵ1bco?47C)o"_=zפ;b3\ӹ8 ,PlA^L+h.434 _ Y И%f64RA3LМMøȌ  ~4)4W 3)44)4{AsiB\-h4;4Ufq@3B\+hZD\'hZ)h4 %hn4mX͍,hF Bhfi*hn4.h [6Af,hAS-hn4^hjDAsC3I%h:,h44% {Rh-lO8; هfޢB:;ќŝxgGMfr&Ho CYyw;Uߝo&a&qWeנ%ߙ]&zU`o?Sb/T-Kc{dߋKT^O? tUo?ҏ;$;!) @Dޏ$*2EEE àfEtP35"Fe<Ξ3s=r8ǭ[]]̤9}ﻏuvΦԑ7~MϪ M `o㓍||BC̣hHkS`ab6fҝy'gҌ퍜yZb:nY[27`ޭ1[}f@}̢YX[hUɗX,u*b=Ncͧiq1,*=&ç{yΰ-<Q>;+K'pҙhV0OLm':s惼>eG 'v |zc,/a/6m<4 |y=jb6c<7+\4_i[QDOL/y(}P abWOy>I 6;5_k|>×|9 _v| /|'v@Y͌Ǔ&v@xZVD,[N6C>~nⶃL(͏=Z!CW=&)/}Vc.}*z|/UϿ;~^e|{>/ ^eG+DY/&㮊r+fEtp6.I\3/j`;B4W/×xʔQ+×_bX |ic$+`V ێg wշW4Vhm &ߺe5^Nr8#}5-nKD^羼}>{zCe%|@Eʆ/&_×7y|MZYtϽW"@rM+`ÜM[GF`2z-j1[Ke]^2M|i/nl{&_×cܗcZ=յz_6u}l9nL>|}Z߼7ض-eK KB+öX*7d\NrY V=v`ɓ/hc?,}}B+ޮl_p36B/k40V_u9+V\i,u`czsc|,A+6/z@{\WLeJj^+55E+o m5j_s[hA\CtA=le2I:5}!?f6-@4Xln cPwhlB( Om]=gR/FVmK;֟v1-,l\ҥ-OȨh؛їq>ÛY9'sS2s ѥh4Kjڔ+7Lօ,]ݘݚݙݝ}>r:s9s)'˝ۖ{8l\o^,);pޙy-{˿-)S^T@ O~[ȊJV)P4\HI[ɶ%}%%WJrKJ[K*=_*u ])Y^U~ryb[s+"غ4Gʉ?FAŶ~*0 mvgN#S !g41 68؝S0DO2tz*ī5}tcu[+GؽC9mȰ; 2,]$C' Dd FnC2)Kb. nW?3n7">CNvﴔs>L%wٝjgZ6qL5\MuuNv.ywgg#y=kޖΤIMuoK3{@%&$I.MLO: pW'Rc[R+ovO*oY!&}ɫʇ::=4s!m{#ЇG RB41(9=8vd!*zqc> JJ*bUC" CPC"jWXp d+QVGnFաFlt6M}kҹFp5K>CԮgColtH@ؔסI5iPib͒Qn޲0iPyF'ӔCZajGltlt5 @.I:P<ZDZ:tugӰUc6vJڮ_ tԧn~]ة0'uw賔.hqTjzmTr;נueē;Uχ>;%څG ^쎟BT>H#h% 39ix!VtiMT*G^#4/"sKtΫBRmק(:̈́T&gm`vddA*3L` zGFr ?e zcy㌙`|,0~H],}(0~ q"Hq4Yjpd@3QA0;2 U`D_ GF*(ѷ1ёQ J} !0C 5hŲ#0$GPH 5 _c#c8sFo,,0GHR0^DɑQ:8U(Kї1Ց1R#9ѷ1͑1R9c@D?tGH`<-0~ q5`t _GxH7X,=!0J!53S`]ّ1 R8b,=.0 LGHMn0ѷ1ˑ1RS9 #Șq8WD? M ugx@`[082!gsdi z Cnvd̂,5`ud8|,mDoc#fH`%0 F#cqC`}/!5 di z  !3ZX/0~EZV`ݛ)K%Z{hDc#cqF瀱ؑR+7%UZ! c#2d? R q00ma}BJAW뚫=zݎЋp [q3; D|"E@(3z.i^NdBS.~Z 06CjBmB8p%s.e'ƲQ“>ZEo,iШ|Iq婓9>,O)e]J^v@Mݡ^*C%h7"6OoqjtiK&PYrr 2t|mj]Eݯς-;C[[D~w~w_h')FT#!ͳ_γoC{U~~P{8O UŨUEϕjFT5Pj/-W T :T P9YV[ ŧԾM֮YferJ ̎0۬>I_ SNgv3=T=Ә=̞fd,fffev.1{>0; ً%^e^.`Jfbjf2{ ͊_YǶ9Lc=ەmꀗmd=}Y[&^ llR&F N Y@|ћqEH%@0KlRYr?:#+lelR~!m|mLdF u'KG!; A^-yH@Z#<,@ Kyö6mF6>Rgk.F~͐]@3y/%X:3@=CRc1F e11 u1f#}e νs@Na0u!{yyyH]&h{9-y ϓ@L&<ȿ,y H?Y/9K;Y5yS}RJV ;w%RgHȳoɳ@J<ڈ%! 8Ö|HM Y<:q@^ǩ,yHX*12!Rg9nȋZԹy8K^rnZ2zI aKn|fC^CJ ?Pg5JJ F+UZ$mR,LNRެ#8t? ٿhN|Zy'B.nn^^3gzH'WU ?Qj(? "5xj?PoPsHI!z}{PsI0oވv9Fc_Qd%MhFiH/!eqGi- Io9cѾNԊkLtopm_%z53cQ I_;1_'!鄃Ť=wH@ZIyJdz߉~̫޿K:L@ZA>@⃿~*IA:j!i7]҄nE:8j YҟH摶 4j9eHGv& vHZEz>+PIOH:4jσ zPKipc#fhP BORLAND.MAK]O8ϯD5͆ Z$h ;ՖAg [2JRF=qq:{g$8kqUL$lz֦4nM lVYn`Ͽ-nSڪ]gcNլƓ*I"7dVϮRԴg3i<%,ﯜMa4B'uEn76J^9yO6m3|~nZމ[ war=8_HEiej6LMyִX5KwNOw{F$O@\WQ` y֯u{Z~wei6m1c,7o&1Mú6Z'"78,ӊnZ]jhΥo-ܦK)eIm}ɓCfd@WGck:V߷l63{(W%O 9Jr(@UQUM MmyH-)5yQRʍܙgckrֺNJzz^\(ME..}j`߳OAuf+9y"𖉇z^I\c3˒$XܢCA$X *8HD#|RzIfK,s&#@Fi@$XP$uX.+kw4*1X0,sQr"p_fi3kSl,t?}[~|04&6C@ŷ1=w'ÜN9љcQ fDN؆<,S2) T(m 3 F2d!S!Jd0}/v`EsAf0ۚl7dQNzt+ub@_ _*v!kݩ`p#SA<1 T(m,p@g v8 `ȆN؆ NzֆN_"N..[0w*ԟm :8 `f: m ;P8 `: mh7e̲›e1#PQ1غp7kݩ`0ߑ,S`U8 {#B/C yI$S!yZ@uԩpQ~GV;wpZtOMb*[㴠~>f(46o(?1w_W;u_:!^A|x;![a%^ PKL-ϰz -aa.prjZytw"$lB @@ 2$#93Dd EAZ[=Z=ϩZADZlmps<=.w|>#{{Ilcm[[V6/`ԭXlwՏ񟳊"FvzH*5mJ*?S g>E-elzWiSر}:}.o/)!hїRJko[ƣN })~b}[Bw(9lߋ..@ FHp (|M .CJH/f[(WW /k+O1IaG~#Gq@ygJ'氿hYfDD9PJ2R"0T\`4 ǗGZ̬ ,X"T`@.oX+"^JIJHR)m"pViArn.C +.??5? \/pM7 B@+8X"~WniK% ڔ)_oxC'4~l ~_)XE4TU E*4'8LA4=;1S:Qiiii:1NN{zXڙ2y ^k&L}-m7EC e]XŕpVc=SڧwuuVsy]W>صFy9fQ EFy8 cF@~<] 6Xf\jtCtm1ȹ֯o^dB t%|c1.dwS))1sm <ɕY*d4@q=1釦΂ ATµg3"$Wx~6Y7,ڎ1*&C0:^pn#r_4~Rq: 2i$"⪐FԢxQ?#Λ: 2FSCXk7||[3nNuG.SgAXľF*/cz0UFH8D XaDn g/SgA{Lz uuzHG.SgAi2bR?]D>Cxg>e_΂T(;pd!LN3h&>mJPПMEglD{yKqJk9ֲjɍ Q^Ra{ .u.yNe5&p\>o,H=53Ck r7ዷ W#*oWJgAΦ9GAԸx&Q3Gߘ5.SgAc#W>\v7u'/a:"Ȧ(\Gр7DuWFa,HbԈ ]~JtpI:]w2|⑏ibԮhɈ)9Bdح @ZbYa,HG[73b |J{G&&Kh)-iVq~)1OmWBgM18!J(?`\wT"/cMVJd|A@΂մKx-:3`# k֩] To0k\΂\Ls>᪒?J/.p\\΂lIbGv1ٻlĠ䅃aaj*so.}jPϞkixC/@[jO;n+}+nwdz5_pCwo3ߖHJJBwsm-Η8v:ζ"UuHtmϽ4$YSUϴP1\=ѳ=Op$ɲUϴY1)jOtPVOiHo=L5e=t:!-Gބ.Nnp,t~-d$,ΩvB֨"{T~nh㎎U<\#S UKh-1U{g  L:UAYO]-TF?̼@`: 7M ;;JsaT~4@/yCzE#RoouKޒ0-xerk8Go ]څ'ٛ[yU}#͹>lQAI k;6w!:NA/칇 \ɒeW6$M6IlP`sUf>=QTјJ5!^\^kų,3yOGJ6kx Oj'x75}OGO8NNqsw> ^ܓ܇?JcG(#x8rCx0\ƃx R.K:%;PKrpc#Q|. BORLAND.DSWPKrpc#t›3؞ BORLAND.IDEPKipc#fhP 6BORLAND.MAKPKL-ϰz -;aa.prjPK^Hastronomical-almanac-5.6/bc5.zip0000644000175000017500000003747506614703076015063 0ustar jrvjrvPK+yY%.^ AA.DSW͖oSeudF/0yApHE7u# Pnŵs gƆD F_#C j"Q~v.8L){ ,ŀ|qE(ԩzOͰm/'3pw{ NO}p?<A ­,`7aH9v؃< Cp jHdy!xsB;c|)+GnSsy9O9w1HFbdϲM1GY]'LK&p-cM7G#UkmS>wu~r.Rҩ D /_%isLN7ɺlTّtB;躢wƉ8~ly=grRuzN_-WXA ;ZB寘f&vU{wE^O\]2k]]]F'5;sgBUҿӾ*1̹o޽uDQ!\ß6>9T;ȟ){m: '@Nr 47A΂r A~rm ?yg @~r W@~ .ȯ@A~ r7 C߁|{AG|o 3rA> //@%AoA -w ߃lJH HH0HH($ $$$$ $$ IIIIIIIIqH| c =d`B! E CA )dHQ Aƀ2dH H)HDI ALdt  3A*AfT2d| 5 @jA@A@44 iYdHH;H] N/HJAAVd Ƚ kAYd A6lyd ȃ [Al!] y?w*,mFQ0L:;:&H)m/mWj1C^R[(,/tqP+hh\|x<蘿 ͊2ސ;:4S>yz-!@׬Sٮ۽)vhyg<;-1N;'7vyyl9Y^OK.o{icGc[H+]"t Îc#ak[[] tBW[{Cck}%8^1z6kr.vݍOkhmWG)g㈱RA/g[*i_g6Ey.e!-"zl0VUgMcbg#=/TqOVQ>eQLg+3f_r?fMʛ\2dp!.+>~Zu}W.ws+?AΈ]n ȐBS ;[14aFeSw嬊SS.-1 գޗƌELy68r,ǫB^,#vo )K)66iVv{x1vцvms*YKSܳ)s//wJr˰.,2oQr F3U 6KjU*߀Mŭ-m.weټ tPf+Zc nW<'LL h6ʛʲ D3UTV4ܳʧ(-E}ft;ct_aʌ[K`xg}~wkJ/cP#V)ioCsjԫuYfb\ɜzfʯl:n*|j-u& \]vG6G*ƦNXOlsX95iV|+B-edmnlm5 e,O%<#bq21d6sg"TQWlRSLQ&sHm̋6`"TL Fcfw >uyV~Tl*ӤL*^-StoiTr0S `K'ȱF;ǔ6CTI& v"fws5fD)0U5bvPcNcsVJ _=.\Z*]dž 6!Dt895L9J{y+뺵<ϱrY>j6ېL)-[\2|ʊv6NEj= M6`\6.0b쎛@[ۛs@L}qqmZcggmS#3קZc0eIҖ&I<.Rogq'T)[W?C~,sxțZRq$C<hų--Ux'dMQVR}ߢSÈڡE 5]EN(0?X6v-`B=VSa7TB=%bؕ|7+g^NoCIǴzkWaꬶ ηo\[Wmyڽgwqaήŵqo?N ̈́r(hzYF[:9n4.XJ"c_mo?\cGoy쮺9UtyC9_igLz)ǷCnyc\pD86Ip-M^Nkokz( 6@rl5h~q]y3j8`wP8=K=s?NFp^<0#RSJWiՏl} [v_\*n?a o?^O[gFVB6s|6o?jLj+w=Cl\7KDQx |Iy!AI9aɈ %CkvsҲNoCK;> Qu0w"^ހOOT|ufOe_j#CpBF$ՏI]* PbE) ז Y0"%{ ȾU͉WSyY&vC;x4C]y#iΦvU5SSxA~|mY(ni.j~χU_%CZC=#S寑+OcjZپh_k_'3寗&R*munm)+qo7gS_!kShOSqHj;^%X.3(O>]P~D:ve<cRإSfυ@>  T5蹠 A &(10xz炿 N R5乐!N ?LG6Na;Osm;yXH ,<$_De##GD<QdvԘQJ2Bg!1bby?滘LG[[:vb9NsgH\A8Oܞ3q}_!~⿈OLЖp.ᣄĉm?J HL(im I%E'K^9XG)R*SVLEJjeSϤ~V6?ms+i}/2}ms11-cOƹ23)X&=d~ks>UD0ǵu/~YSem:u9~Seo>}9~9Ssl9s9糜w{{{9;!/B=@9ǕϦ%meiSV?Լ] !&FŪy8 gNb'yA,/ᾒӆqʒfX٦߸ FA{-D+l6L!> CVg|Couʗk">3@n(|r ĦTQ^Qu 4(l*.BFM\ct}O8J'P:t2}O$\ T.7ߢtϓ]M-+>_'G"2sKv'}t@=CHH:4ٛ1P>HSٿwGGGGǰDzW9TJ>P~g)oHov(@>h;{ PA7|+Iw PqkHo&H#*қH/'mAz  H饤H?J~n=~t酤^MnI ~/גn'Oz=}/(6qOGOOiH?Cc!<郤;*YJ#Cc@7_#܏HLi'](%>r+C RF_|M#7vAgI KlqrtV4}F){Bo'6WHEL;~JP}pK~Awn']&#{H?FM!?&@;GߑG'O)3ˡ_BCX\K4oN[se9%0'K7KGԌ?-W=&Ma!D[a;~}^̻C,ѻMuuuu66:j& |^6'*3ӺsB/ ~YN2|bsg9.|F?h]/ ~y򊣈ʛw ~˟/Ͽ|I/oeҲ '.xqU2sWNP `3ʼ0I9<7 yn<> aic0s>y|\H~7.z)v ;z;j>d~m| ~",7ǯZTq-OnQ0g?|Aj/}Ty_2=Fڲ1d#]S5~ q fub50ކi0 988&0C$C`&cv)_A'rL`J%L_ 0%L? 00yJs˾Į{8VX^ʕ;$G%3B0)a03J03Z<.afyBfyR R OfyJ  _ yZ L9 aS&a0w൸9(aFfyVŒ9$aFf 9 30wJ%XK$8L0/J.aK 8"J$L `*$ S e SJ 󊄙YU 3 0U樄 5 30s$1 30s%NTK0$ 3 0%I 30 $;gй ; JS=/V@~ ?/sfLv^g-Q9+MOa!?*,."Ng{mYlpI}lw;y٬^<  s 8䤛GSO5,K``03&iOePR(=t|U>g[/[]Gti/XP,oA,/1Rc:IJB^2^j"͡܋ ܥ N^%Az^9k)K~.B,uXރXymm8ש|gӝ-[ˇcu{kX.P E9l(ˇym)[n JrZyhm;} ܃, K];;|}9WwO!HSX2rbX<<|}som)T/FXX.~qiq%qÑ +99'>{9WϨF\mt8mqocXCܗv4Rr'c H^gs ZC@ܗc}GAmB}{ǹqmLb>Eܿn/~ctڞu4C\W;;@|@i>Ɛgb9yt9³[| =V3#^w?u~f̔w=;NyF~ pЫnw"rֆeepbqx,/Xp}ێ{%Ϧby>+<\o'nwL}b`lpCS8G?i{^;r墂kJqXC,y,y,=F'(kfk42.i{ה:uS˟ fN r8XP, kGToOˆ\9N[|y5&ny6֜8.pyu_vS% HBqv汼c5{_srb3"O XᱼcS̹v3{rKqoKC,al-⦺>͇Urx{V\߳RL?EȴѰPC7s/)~K~>õ郅y=)\p2]3_}vGب]agîE7 ?~-<28!#'hĥy"[#L$jc QWnF%G^1+7ccjbs#(rT;88.:;"cVv=iݙpz{gלAqqqqq=qދ/_4 &Jp#!21/;qo+7IyI']M4.yI%_OSJSR֥H9qʭԞWSo:K;aZ^+7=3fpd,ܗy6̛^{^_w56nYYkeʲgefd~/۞SS&go{Gၔ=Vx}PpDSHh+mh6gԷ}-[lB䳱;$W1L}yA}pPh<l c W)dѷȭyԡy,9 &`+"p4L C@}83|8C!O}Ø9ľ78w{o70K}jomq׳7Kio&cuwԮzfLj w?S{IW?7erE.s3@,iYE,=)RY/optŤ1vFr>~s of~%n1y d78g%r+8d!0U'Azs~+|r{spVpM93?9KT'^䜎añ|"߿W/k~~|qrw{_w `sfADvrAen)O㕽A~ !S>7Nދ~w>~3?hjp!jZEwUFPF󫽉mͯ淈SaSι](n~7-wy[?~Hc"տ~s3-30/;ncWI~G0Xyv/oQ7ιm`V}~IoyS=zEWkuƉux,mb85`4J{K=;j Sq-H<0Վnƒ }q>~'@ro#޾  x.[ ypjẁ:jW472 =y[0I߯8I^b~'2onh-ɐ yz$Sjb0g5sOyB^YVJ~L_/%,WCL~;}C^,lC$W%>~C^"L_گ=,;]8gy% ߙI7/aӮ>~[ yٜ"I; 09~Y_8㷒oᜣf-}w I߫q*fE]"mlP%AAUA/ r{v4l 8D z3Ծ~m ;Ww_ wEx#F܈pD6Dn8RfKF_.9^1ٱq[=hl3Ϲy395nWܧquW㿎%B>&| [:u{/^o<*{ $wP0pH(hkp߁s"R@CJs[^fdb; -)H7H.H< @ A ]K`O7ǞvU,xkR c)Upm4$C hM*KiΙZmq6@?d0#vM a}G7Gܼek6cKW>ml'm2*6 K@v 3BWA~'=!C ) ]D軡ae!a#}^V%sɥt~iuJ q-=/j0`o#{;qw9۸wa|<(ߨS՛`ӆorӻ)D᷸B`{xq.=WߊWq*?O߉7q&GG߈q"??߇pu7߆. %?_UE]Uj?8}pYr*sT9G_K@%p xS@Kϒ# PIc(=%p oɑ=8!p {|Ӗoɑ4 +~ ^ ,929njWdK^9@K,@eqE K@p엀c%Go@v <+p (>c/p8 #888,9?8 ;;88Zr Q Ⱦ8Yr @q v~8[r `dŖC5D?.jׁK&p {ia1P;ζ>8FZr;dQ#5s| 7 -9Fj4 Ⱦ8XrX18~8ZrxJNxK2@qQ)p {>pLIzWG%@M p8 wN®e2Ki9$p Yh1P38uؽ p 5d1P39Gp t&[r,aEKـ9;m d/s5sZ@ӒcGV)p {p[r,Ρ O40?-p}`)p 1OxӪtK]v(`\D…mHȇ e ! 8 `:!I)r5W"]N Y9 %H1\9'ly$W[S [DJɮU^30e k+T@U8כn.;t$ Vg0rNrifu"Ioךb\bq*ŵ4Z@\kpmµLz\PpMn||Ϲ3>g\Q*~#]9r2 Ң"YiO4˹gQTee?RB?|6Z^"wi4h5&hVU*OQ>b`Z0 x?!ߡLr.W~I,^d6bzŃ ^9ǵ=u崨+' 8 8Vm# ZL_U_$(LԎ}21&` 憘SX&ZMe~&P,ʜʌ 3M,-"NX TA[2({A1 TJLuYL.62Ot^#ˢ?gJY&fKOs|fz3ab–#{'x9<^|~]4j\k2SM<طF 윂4v[yݼx̽ ul6fճr-[.oNauFI;c'򤶸RX[W2}>QL}/f%ЬIZ кvoa-z.gNc_} 0uUNJCDO {I/$ɯv2(3i-nV_mu0kZb.dcX?ʵMn5D1-WHIQUYF8"¡-aէ=aT.__-| gV&XjV8+-f$Kwzw0I&)#XOIlf4R|d>řsE-bVi&4b=Lj 61R gP Dz~fq=q_34 &HWǜ6>K,|,KQOQzZѵP24[EjAE)c5ivu1j_IVZMɬjI"K{OTUWY(̷$rɪAJxE Ml%#cv=YjgR 3,uSF]'S[ڵ\҈%GܙlĵVZROǢͲ`?fhAU>V%Q4Y 0iws$f5jduEˬyEӤ\$yJ|ͷo9.~0CMX. ~2M.zMkc\Dw%Ux,f0iK$BK|(k-|2+L&ꘕx|[ۋ$5f%΂4_UI/Ic;ƛ~e7$f(}|HV%f%FZf1^F`d9xD`9ivբ>[ _縿_6 m%̟xuneqb;ZZJ"NY{i(Qz;Mf]V]>VZVJV^˶J+fVy&궰fVL"\%Yu "\mk5k=V0& "bt/+ gGyZײ{gau_uVZZc^|bԽܼ.7ZDe&ɪBtf)Ҏ<͆HDE0s--^!->Vˉ'x 췧d˭ennV7ʖY9 6iUO[j;]!{z[>V;%;;UC򜺿C*jTş#ֽdR%ɺô&!S-Yn7kC[GeGdˉLfqlb#Y6 =W5|Tq[>,qi=Qr'M,,S|Y:M,J˽tO-X|\ҏԾlb܋'%=lbd7[|YM,Irt}W2|J&X>,q3&,q~˧,f.Ir }[`v3r }[>,q &,2K\Yr׻>dbyHyC%rnb#uJĵX>'Y^,cuhrZ|Y:M,_G3 t]~C|QM%Y<[fRuK|YԻM,H 5fVX, u˗%E` m&={n*uM,=[<,qikQ?-_cƴd`yY:%} ד.6<.Yk-3K\EZcbyBT<,թ'%-Ku˓r[kdߤ[,qj`yi4[SJM`unqvT&e Rz)5Mi6K)Y^.JRڛ8tKJ{tJ.)RJ-*)ZJ#H{Z)}^'K R~)QJoқRz~PJoۤv)CJI]Ra)[J?"{J:-]|_yfW(sY n {|6v V> A[MMlE)a~X}C}/r] V͎a0v7;b} ^4z5h|A]şlPWU->GK`6F(}}IzMKg6qUlV۬ƣ<@W>N-*ۢEK}PդJڹU.8Uڦ٦%}5҉U]Nzv/QQ;Դ ;r}E;>J@񐪧>y!]ܥS.5e1WH_'[c+Ez#:'I CǗ~ߣtȣjzjzS iU';o.|cj IGUQ^_P:q5]GI~j+?%+Ho&}r>BOQ#)(5?ܯ|ZOSI"TT|wIÅZ~kH$}tn 􇤝gmPM@<(J?2K!tOAie +&(J- PzV@h(@oP`%1ck0(0PK+yY%.^  AA.DSWPK+yY%/m7j: AA.IDEPKh>astronomical-almanac-5.6/bcb5.zip0000644000175000017500000000526507435710773015221 0ustar jrvjrvPKW,~(,aa.bpfN0 M0!T&f[X>q\]'rӓJ:#Po'wotxͮ% QSpVTzӖcBbaiyja]}J×z>Hi-^r1Kniu$K[iRM)!n*ULFc 3&wÖ|z}o۔ EϽ)<̢OK/׷oF0FO2aFȞi(ƕhfܯ1=Ϸ7 q=n,->[>U!bA^KEea IY#3PG WJ3JJ`U0Uޣ,2^Cy0/e-Z,Ps7&k3*&y~Kq2v:bJ5Z㽘}/HZrV6l.hH _X5ʚ*t"SzEꔑjHMm 69nCyþ2 ߹X83%rBn*"MKz}lk|/0Y(5<5k,nMmUr ß&d|?*]=|g,Y>FtY}2;M>j'܊/Ι? 2WOL[+ IZbǭpL2d}@+-~c9}~k3֢ߚX6ZV7-q2 >e'[9,?=·^^X ~~b /MaV 5TݤO~] ;!Z1r#[+oH7ß2WꄄE@SzӻI܇m4^>ci}!<@F4 X3y&$ĂK@0==G~+I PtG47?߿PKyV,K1(@bcb5.makVmO8^@":8^,i P*)쭄)ĉI|X)юyc{@Zw~ohM 6@#eʸ:`6@Be 1 (J ]I(JBTD%ACaDrr P ~ǐ0*Tmп#J'/*qə* {7B"!p}@eL.tYP%E&$p^B )'r8m0> ÀY勉c$q f"C$~xEyBPr#N# ]'"BD%4k"LX1Q%lWhӨn E(3o>% OD9 HqLII }%R} 2s,W^~ʰ1-q+i-#͡AZ3k\1M 8p,uVq`\GbdWp#ǬCkp}1%Ox^.XvFZ+M2a/vZ]txrۜ݁xc cst Ioy$ԏt~Ă<3iZe'<gBdiǍX`G>n^#o iҼ6Ҋ&BϯwP0 aH^;Nא!"bz>v'=C ~EoRt3\_,@`GgTe@w^uZ2wZ\+*dTD4 ݸ%鼕uNR!M F> Tq0ᏋM1NR0OD/a|1ZD(l˂Dx v{e8ӹwFBוFyS1Z_k.zZв;KPed6.Y*JogߘP?oؓx#ܠ`XA|B |=3u:W& }PKW,~(, aa.bpfPKW,r+ Laa.bprPKyV,K1(@ bcb5.makPK astronomical-almanac-5.6/conjunct.c0000644000175000017500000001356506133077016015641 0ustar jrvjrv/* Search program to find dates of equinox or new moon. */ #define STARTDATE 2439935.5 #define ENDDATE 2445000.5 /* Define one of these nonzero, the others zero. */ #define NEWMOON 0 #define FULLMOON 1 #define EQUINOX 0 #include "kep.h" /* Conversion factors between degrees and radians */ double DTR = 1.7453292519943295769e-2; double RTD = 5.7295779513082320877e1; double RTS = 2.0626480624709635516e5; /* arc seconds per radian */ double STR = 4.8481368110953599359e-6; /* radians per arc second */ double PI = 3.14159265358979323846; double TPI = 6.28318530717958647693; extern double PI; /* Standard epochs. Note Julian epochs (J) are measured in * years of 365.25 days. */ double J2000 = 2451545.0; /* 2000 January 1.5 */ double B1950 = 2433282.423; /* 1950 January 0.923 Besselian epoch */ double J1900 = 2415020.0; /* 1900 January 0, 12h UT */ double sqrt(), asin(), log(); /* coordinates of object */ int objnum = 0; /* I.D. number of object */ /* ecliptic polar coordinates: * longitude, latitude in radians * radius in au */ double FAR obpolar[3]; struct orbit objorb = { "Object ", 2446800.5, 0.0, 0.0, 102.884, 0.999999, 0.985611, 0.016713, 1.1791, 2446800.5, -3.86, 0.0, 0, /* &ear404, */ 0.0, 0.0, 0.0 }; double appobj[3]; /* coordinates of Earth */ /* Heliocentric rectangular equatorial position * of the earth at time TDT re equinox J2000 */ double FAR rearth[3]; double vearth[3]; /* Corresponding polar coordinates of earth: * longitude and latitude in radians, radius in au */ double FAR eapolar[3]; extern struct plantbl ear404; struct orbit earth = { "Earth ", 2446800.5, 0.0, 0.0, 102.884, 0.999999, 0.985611, 0.016713, 1.1791, 2446800.5, -3.86, 0.0, &ear404, 0.0, 0.0, 0.0 }; /* Julian date of ephemeris */ double JD; double TDT; double UT; /* flag = 0 if TDT assumed = UT, * = 1 if input time is TDT, * = 2 if input time is UT. */ int jdflag = 0; /* correction vector, saved for display */ double dp[3]; /* display formats for printf() */ extern char *intfmt, *dblfmt; /* display enable flag */ int prtflg = 0; double dradt, ddecdt; extern double FAR moonpol[]; extern double FAR moonpp[]; double zgetdate(), gethms(); double func(), search(); int apparent(); int main() { double t, t0; kinit(); objnum = 0; t0 = STARTDATE; while( t0 <= ENDDATE ) { prtflg = 0; #if EQUINOX t = search( t0, 0.0, 364.0 ); #endif #if NEWMOON t = search( t0, PI, 27.0 ); #endif #if FULLMOON t = search( t0, 0.0, 27.0 ); #endif TDT = t; printf("%.4f ", t); prtflg = 1; jtocal(t); t0 = t; } exit(0); } /* Search for desired conjunction. Step forward DELTA days from date T. Then begin searching for the date at which the desired function equals Y. */ double search(t, y, delta) double t, y, delta; { double tl, tm, th, yl, ym, yh, e; tl = t; yl = func(t); th = tl + delta; yh = yl; /* Bracket the solution date. */ do { tl = th; yl = yh; th = th + 1.0; yh = func(th); e = yh - y; if(e > PI) { e -= TPI; yh -= TPI; } if(e < -PI) { e += TPI; yh += TPI; } } while(e < 0); /* Search by simple interval halving. */ while( (th - tl) > .00001 ) { tm = 0.5 * (tl + th); ym = func(tm); e = ym - y; if(e > PI) { e -= TPI; ym -= TPI; } if(e < -PI) { e += TPI; ym += TPI; } if( e > 0 ) { yh = ym; th = tm; } else { yl = ym; tl = tm; } } tm = tl + (th - tl) * (y - yl)/(yh - yl); return (tm); } /* Compute desired relation of apperent ecliptic longitude as a function of the ephemeris date. */ double func(t) double t; { double p[3], q[3], polar[3]; double s; #if NEWMOON || FULLMOON double m; #endif TDT = t; /* Longitude of the sun. */ objnum = 0; apparent(p,q); lonlat(p,TDT,polar,0); s = polar[0]; #if NEWMOON || FULLMOON /* Longitude of the moon. */ objnum = 3; apparent(p,q); lonlat(p,TDT,polar,0); m = polar[0]; return (s - m); #endif #if EQUINOX return s; #endif } /* Find apparent coordinates of object at Julian date TDT. Q is heliocentric position of object. P is geocentric, object minus earth. Both outputs are in equatorial rectangular coordinates and are referred to the equinox and ecliptic of date. */ int apparent( p, q ) double p[], q[]; { double polar[3]; int i; static double TDTearth = -1.0e38; /* Calculate heliocentric position of the earth */ if(TDTearth != TDT) { kepler( TDT, &earth, rearth, eapolar ); TDTearth = TDT; } if (objnum == 3) { moonll(TDT, p, polar); for(i=0; i<3; i++) { q[i] = p[i] + rearth[i]; } return 0; } else if( objnum == 0 ) { for(i=0; i<3; i++) { q[i] = 0.0; p[i] = -rearth[i]; } } else if ((objnum > 0) && (objnum < 10)) { kepler( TDT, &objorb, q, polar ); } else exit(1); /* Adjust for light time (planetary aberration) */ if( objnum != 0 ) lightt( &objorb, q, rearth ); /* Find Euclidean vectors between earth, object, and the sun */ for( i=0; i<3; i++ ) p[i] = q[i] - rearth[i]; angles( p, q, rearth ); /* Find unit vector from earth in direction of object */ for( i=0; i<3; i++ ) p[i] /= EO; /* Correct position for light deflection */ if(objnum != 0) relativity( p, q, rearth ); /* Correct for annual aberration */ annuab( p ); /* Precession of the equinox and ecliptic * from J2000.0 to ephemeris date */ precess( p, TDT, -1 ); /* Ajust for nutation * at current ecliptic. */ epsiln( TDT ); nutate( TDT, p ); /* Return dimensions in au. */ for(i=0; i<3; i++) p[i] *= EO; return 0; } astronomical-almanac-5.6/constel.c0000644000175000017500000004237106427464243015472 0ustar jrvjrv/* Constellation names */ #include #if __STDC__ static int islow (char *); static int isup (char *); static int isnumber (char *); static int skipwh(char *); double sqrt (double); double sin (double); double cos (double); double atan2 (double, double); double asin (double); int precess (double *, double, int); #else static int islow(), isup(), isnumber(), skipwh(); double sqrt(), sin(), cos(), atan2(), asin(); int precess(); #endif #define RTD 57.295779513082320877 #define NCON 89 char *constel[NCON] = { "And Andromedae", "Ant Antliae", "Aps Apodis", "Aql Aquilae", "Aqr Aquarii", "Ari Arietis", "Ara Arae", "Aur Aurigae", "Boo Bootis", "Cae Caeli", "Cam Camelopardalis", "Can Cancri", /* also abbreviated Cnc */ "Cap Capricorni", "Car Carinae", "Cas Cassiopeiae", "Cen Centauri", "Cep Cephei", "Cet Ceti", "Cha Chamaeleontis", "Cir Circini", "CMa Canis Majoris", "CMi Canis Minoris", "Cnc Cancri", "Col Columbae", "Com Comae Berenices", "CrA Coronae Austrinae", "CrB Coronae Borealis", "Crt Crateris", "Cru Crucis", "Crv Corvi", "CVn Canum Venaticorum", "Cyg Cygni", "Del Delphini", "Dor Doradus", "Dra Draconis", "Equ Equulei", "Eri Eridani", "For Fornacis", "Gem Geminorum", "Gru Gruis", "Her Herculis", "Hor Horologii", "Hya Hydrae", "Hyi Hydri", "Ind Indi", "Lac Lacertae", "Leo Leonis", "Lep Leporis", "Lib Librae", "LMi Leonis Minoris", "Lup Lupi", "Lyn Lyncis", "Lyr Lyrae", "Men Mensae", "Mic Microscopii", "Mon Monocerotis", "Mus Muscae", "Nor Normae", "Oct Octantis", "Oph Ophiuchi", "Ori Orionis", "Pav Pavonis", "Peg Pegasi", "Per Persei", "Phe Phoenicis", "Pic Pictoris", "PsA Piscis Austrini", "Psc Piscium", "Pup Puppis", "Pyx Pyxidis", "Ret Reticuli", "Scl Sculptoris", "Sco Scorpii", "Sct Scuti", "Ser Serpentis", "Sex Sextantis", "Sge Sagittae", "Sgr Sagittarii", "Tau Tauri", "Tel Telescopii", "TrA Trianguli Australis", "Tri Trianguli", "Tuc Tucanae", "UMa Ursae Majoris", "UMi Ursae Minoris", "Vel Velorum", "Vir Virginis", "Vol Volantis", "Vul Vulpeculae", }; /* Greek letters */ #define NGREEK 24 char *greek[NGREEK] = { "alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega", }; int showcname( in ) char *in; { char *g, *p, *q; char ans[80]; int i; p = in; q = ans; skipwh(p); if( isnumber(p) ) { while( isnumber(p) ) *q++ = *p++; } skipwh(p); *q++ = ' '; if( islow(p) ) { for( i=0; i= 'a') && (*p <= 'z') ) return(1); else return(0); } static int isup(p) char *p; { if( (*p >= 'A') && (*p <= 'Z') ) return(1); else return(0); } static int isnumber(p) char *p; { if( (*p >= '0') && (*p <= '9') ) return(1); else return(0); } static int skipwh(p) char *p; { while( ((*p == ' ') || (*p == '\t') || (*p == '_')) && (*p != '\0') && (*p != '\n') && (*p != '\r') ) ++p; return(0); } /* Table of constellation boundaries. Roman, Nancy Grace, "Identification of a Constellation from a Position" Pub. Astron. Soc. Pac. 99, 695, (1987) Array items are Lower Right Ascension, Upper Right Ascension, both in units of hours times 3600; Lower Declination, in units of degrees times 3600; and array index of constellation name. */ #define NBNDRIES 357 long bndries[4*NBNDRIES] = { 0, 86400, 316800, 84, 28800, 52200, 311400, 84, 75600, 82800, 310200, 84, 64800, 75600, 309600, 84, 0, 28800, 306000, 16, 33000, 38400, 295200, 10, 0, 18000, 288000, 16, 38400, 52200, 288000, 10, 63000, 64800, 288000, 84, 72600, 75600, 288000, 34, 0, 12630, 277200, 16, 41400, 48900, 277200, 10, 59520, 63000, 270000, 84, 72600, 74400, 270000, 16, 28680, 33000, 264600, 10, 33000, 40800, 264600, 34, 46800, 59520, 252000, 84, 11160, 12300, 244800, 14, 73500, 74400, 241200, 34, 40800, 43200, 239400, 34, 0, 1200, 237600, 16, 50400, 56400, 237600, 84, 84900, 86400, 237600, 16, 43200, 48600, 230400, 34, 48600, 51900, 226800, 34, 83400, 84900, 226800, 16, 21960, 25200, 223200, 10, 72000, 73500, 221400, 34, 73932, 74160, 219300, 16, 25200, 28680, 216000, 10, 28680, 30300, 216000, 83, 71160, 72000, 214200, 34, 72000, 73932, 214200, 16, 82320, 83400, 212700, 16, 0, 8760, 210600, 14, 69900, 71160, 208800, 34, 6120, 6870, 207000, 14, 8760, 11160, 205200, 14, 11160, 11400, 205200, 10, 80340, 82320, 202500, 16, 18000, 21960, 201600, 10, 50520, 51900, 199800, 83, 51900, 69900, 199800, 34, 11400, 12000, 198000, 10, 79680, 80340, 198000, 16, 74160, 79080, 197400, 16, 0, 6120, 194400, 14, 21960, 23400, 194400, 51, 43500, 48600, 190800, 83, 54900, 56700, 190800, 34, 79080, 79680, 189900, 16, 12000, 18000, 189000, 10, 82320, 84000, 189000, 14, 56700, 61200, 185400, 34, 7350, 9060, 181800, 63, 61200, 65640, 181800, 34, 0, 4920, 180000, 14, 4920, 6000, 180000, 63, 23400, 24480, 180000, 51, 84000, 86400, 180000, 14, 48600, 50520, 174600, 83, 0, 4020, 172800, 14, 84900, 86400, 172800, 14, 65430, 65640, 171000, 40, 65640, 68700, 171000, 34, 68700, 69000, 171000, 31, 6000, 7350, 169200, 63, 30300, 33000, 169200, 83, 600, 3120, 165600, 14, 43200, 43500, 162000, 83, 24480, 26520, 160200, 51, 78870, 79080, 158400, 31, 78750, 78870, 157500, 31, 69000, 69840, 156600, 31, 33000, 36600, 151200, 83, 36600, 38820, 144000, 83, 55560, 56700, 144000, 8, 56700, 58800, 144000, 40, 33300, 34500, 143100, 51, 0, 9060, 132300, 0, 9060, 9240, 132300, 63, 69690, 69840, 131400, 52, 16200, 16890, 129600, 63, 78240, 78750, 129600, 31, 78750, 79200, 129600, 45, 23520, 26520, 127800, 7, 26520, 27900, 127800, 51, 0, 7200, 126000, 0, 79200, 82140, 126000, 45, 82140, 82320, 124200, 45, 82320, 84600, 124200, 0, 9240, 9780, 122400, 63, 38820, 39600, 122400, 83, 43200, 44400, 122400, 30, 27900, 33300, 120600, 51, 33300, 35580, 120600, 49, 2580, 5070, 118800, 0, 54660, 55560, 118800, 8, 84600, 85500, 115500, 0, 44400, 47700, 115200, 30, 85500, 86400, 112800, 0, 50250, 50520, 110700, 30, 8700, 9780, 110400, 81, 9780, 16200, 110400, 63, 16200, 17100, 108000, 7, 65430, 69690, 108000, 52, 39600, 43200, 104400, 83, 70800, 75300, 104400, 31, 17100, 21180, 102600, 7, 35580, 37800, 102600, 49, 47700, 50250, 102600, 30, 0, 240, 100800, 0, 5070, 6000, 100800, 81, 21180, 23520, 100800, 7, 28380, 28800, 100800, 38, 75300, 78240, 100800, 31, 69330, 70800, 99000, 31, 6900, 8700, 98100, 81, 58200, 58800, 97200, 26, 54300, 54660, 93600, 8, 54660, 58200, 93600, 26, 66120, 67920, 93600, 52, 38700, 39600, 91800, 49, 67920, 69330, 91800, 52, 6000, 6900, 90000, 81, 2580, 3060, 85500, 67, 37800, 38700, 84600, 49, 76500, 77100, 84600, 88, 20520, 21180, 82200, 78, 240, 510, 79200, 0, 57300, 57720, 79200, 74, 21180, 22380, 77400, 38, 71400, 72900, 76500, 88, 67920, 69300, 75900, 88, 510, 3060, 75600, 0, 72900, 74040, 73800, 88, 28110, 28380, 72000, 38, 74040, 76500, 70200, 88, 69300, 71400, 69000, 88, 11820, 12120, 68400, 5, 67920, 68400, 66600, 76, 20520, 20760, 64800, 60, 22380, 22710, 63000, 38, 68400, 71400, 58200, 76, 17880, 19200, 57600, 78, 57300, 57900, 57600, 40, 71400, 72900, 56700, 76, 16620, 17880, 55800, 78, 19200, 20160, 55800, 78, 46200, 48600, 54000, 24, 62100, 65700, 51600, 40, 42720, 46200, 50400, 24, 27000, 28110, 48600, 38, 60300, 62100, 46200, 40, 0, 510, 45000, 62, 20160, 20760, 45000, 78, 25200, 27000, 45000, 38, 76020, 76800, 45000, 62, 22710, 24960, 43200, 38, 65700, 67920, 43200, 40, 75150, 75780, 42600, 32, 75780, 76020, 42600, 62, 41460, 42720, 39600, 46, 22470, 22710, 36000, 60, 24960, 25200, 36000, 38, 28110, 28530, 36000, 22, 85800, 86400, 36000, 62, 6000, 11820, 35700, 5, 72510, 73080, 30600, 32, 48600, 54300, 28800, 8, 81900, 85800, 27000, 62, 28530, 33300, 25200, 22, 33300, 38700, 25200, 46, 65700, 67184, 22500, 59, 67184, 67920, 22500, 3, 75000, 75150, 21600, 32, 25200, 25260, 19800, 21, 65700, 66330, 16200, 74, 57900, 60300, 14400, 40, 65700, 66330, 10800, 59, 77280, 78000, 9900, 62, 0, 7200, 7200, 67, 66900, 67920, 7200, 74, 73080, 75000, 7200, 32, 75000, 76800, 7200, 35, 76800, 77280, 7200, 62, 79200, 81900, 7200, 62, 78000, 79200, 6300, 62, 25260, 25920, 5400, 21, 12900, 16620, 0, 78, 16620, 16800, 0, 60, 25920, 29100, 0, 21, 52800, 54300, 0, 86, 64200, 65700, 0, 59, 9540, 11820, -6300, 17, 11820, 12900, -6300, 78, 54300, 58560, -11700, 74, 16800, 18300, -14400, 60, 21000, 22470, -14400, 60, 64200, 64680, -14400, 74, 65700, 66900, -14400, 74, 66900, 67920, -14400, 3, 81900, 85800, -14400, 67, 38700, 41460, -21600, 46, 41460, 42600, -21600, 86, 0, 1200, -25200, 67, 85800, 86400, -25200, 67, 51300, 52800, -28800, 86, 57300, 58560, -28800, 59, 72000, 73920, -32400, 3, 76800, 78720, -32400, 4, 61800, 64680, -36000, 59, 21000, 29100, -39600, 55, 17700, 18300, -39600, 36, 18300, 21000, -39600, 60, 29100, 30120, -39600, 42, 34500, 38700, -39600, 75, 42600, 46200, -39600, 86, 63300, 63600, -42000, 59, 67920, 72000, -43320, 3, 17400, 17700, -52200, 36, 73920, 76800, -54000, 4, 61800, 65700, -57600, 74, 65700, 67920, -57600, 73, 30120, 30900, -61200, 42, 58560, 58950, -65700, 59, 30900, 32700, -68400, 42, 38700, 39000, -68400, 27, 58560, 58950, -69300, 59, 56400, 57300, -72000, 48, 45300, 46200, -79200, 29, 46200, 51300, -79200, 86, 32700, 35100, -86400, 42, 6000, 9540, -87780, 17, 9540, 13500, -87780, 36, 39000, 42600, -88200, 27, 42600, 45300, -88200, 29, 51300, 53700, -88200, 48, 58560, 60300, -88500, 59, 0, 6000, -91800, 17, 76800, 78720, -91800, 12, 78720, 85800, -91800, 4, 85800, 86400, -91800, 17, 35100, 36900, -95400, 42, 16920, 17400, -98100, 36, 17400, 22020, -98100, 47, 72000, 76800, -100800, 12, 36900, 38100, -105000, 42, 45300, 53700, -106200, 42, 53700, 56400, -106200, 48, 56400, 57600, -106200, 72, 16500, 16920, -108000, 36, 60300, 63360, -108000, 59, 63360, 64200, -108000, 77, 38100, 39000, -112200, 42, 22020, 26520, -118800, 20, 44100, 45300, -118800, 42, 39000, 44100, -126000, 42, 12600, 13500, -129600, 37, 30120, 33720, -132300, 69, 15360, 16500, -133200, 36, 64200, 69000, -133200, 77, 76800, 82800, -133200, 66, 82800, 84000, -133200, 71, 10800, 12600, -142500, 37, 33720, 39600, -143100, 1, 0, 6000, -144000, 71, 6000, 10800, -144000, 37, 13920, 15360, -144000, 36, 84000, 86400, -144000, 71, 51000, 53700, -151200, 15, 56400, 57600, -151200, 50, 57600, 59115, -151200, 72, 17400, 18000, -154800, 9, 18000, 23700, -154800, 23, 28800, 30120, -154800, 68, 12300, 13920, -158400, 36, 59115, 64200, -163800, 72, 64200, 69000, -163800, 25, 69000, 73200, -163800, 77, 73200, 76800, -163800, 54, 10800, 12300, -165600, 36, 16200, 17400, -167400, 9, 55200, 56400, -172800, 50, 0, 8400, -173400, 64, 9600, 10800, -176400, 36, 14700, 15360, -176400, 41, 15360, 16200, -176400, 9, 76800, 79200, -180000, 39, 21600, 28800, -182700, 68, 28800, 29400, -182700, 85, 8700, 9600, -183600, 36, 13800, 14700, -183600, 41, 0, 6600, -185400, 64, 21600, 22200, -189000, 13, 29400, 30420, -190800, 85, 12600, 13800, -191400, 41, 13800, 14400, -191400, 33, 0, 5700, -192600, 64, 7800, 8700, -194400, 36, 16200, 18000, -194400, 65, 54180, 55200, -194400, 50, 30420, 31800, -196200, 85, 22200, 23400, -198000, 13, 42600, 46200, -198000, 15, 51000, 54180, -198000, 50, 54180, 55200, -198000, 57, 14400, 15600, -203400, 33, 31800, 39600, -203400, 85, 39600, 40500, -203400, 15, 63000, 64800, -205200, 6, 64800, 73200, -205200, 79, 79200, 84000, -205200, 39, 11520, 12600, -207000, 41, 18000, 19800, -207000, 65, 23400, 24600, -208800, 13, 0, 4800, -210600, 64, 4800, 7800, -210600, 36, 84000, 86400, -210600, 64, 15600, 16500, -212400, 33, 55200, 59115, -216000, 57, 73200, 76800, -216000, 44, 19800, 21600, -219600, 65, 54600, 55200, -219600, 19, 59115, 59700, -219600, 6, 53700, 54600, -228900, 19, 59700, 60300, -228900, 6, 21600, 24600, -230400, 65, 24600, 32520, -230400, 13, 40500, 42600, -230400, 15, 42600, 46200, -230400, 28, 46200, 52320, -230400, 15, 48600, 49200, -234000, 19, 60300, 60600, -234000, 6, 7800, 11520, -243000, 41, 11520, 16500, -243000, 70, 53100, 53700, -243000, 19, 60600, 63000, -243000, 6, 63000, 64800, -243000, 61, 79200, 84000, -243000, 82, 16500, 23700, -252000, 33, 49200, 53100, -252000, 19, 53100, 61200, -252000, 80, 0, 4800, -270000, 82, 12600, 16500, -270000, 43, 23700, 32520, -270000, 87, 32520, 40500, -270000, 13, 40500, 49200, -270000, 56, 64800, 76800, -270000, 61, 76800, 84000, -270000, 44, 84000, 86400, -270000, 82, 2700, 4800, -273600, 82, 0, 12600, -297000, 43, 27600, 49200, -297000, 18, 49200, 64800, -297000, 2, 12600, 27600, -306000, 53, 0, 86400, -324000, 58, }; /* Return the constellation name corresponding to a given mean equatorial position P. EPOCH is the precessional equinox and ecliptic date of P. */ char * whatconstel (pp, epoch) double pp[]; double epoch; { int i, k; double ra, dec, d; double p[3]; for (i = 0; i < 3; i++) p[i] = pp[i]; /* Precess from given epoch to J2000. */ precess (p, epoch, 1); /* Precess from J2000 to Besselian epoch 1875.0. */ precess (p, 2405889.25855, -1); d = p[0] * p[0] + p[1] * p[1] + p[2] * p[2]; d = sqrt (d); ra = atan2 (p[1], p[0]) * (RTD * 3600. / 15.); if (ra < 0.0) ra += 86400.0; dec = asin (p[2] / d) * (RTD * 3600.); /* FIND CONSTELLATION SUCH THAT THE DECLINATION ENTERED IS HIGHER THAN THE LOWER BOUNDARY OF THE CONSTELLATION WHEN THE UPPER AND LOWER RIGHT ASCENSIONS FOR THE CONSTELLATION BOUND THE ENTERED RIGHT ASCENSION */ for (i = 0; i < NBNDRIES; i++) { k = i << 2; if (ra >= bndries[k] && ra < bndries[k+1] && dec > bndries[k+2]) { k = bndries[k+3]; return (constel[k]); } } return ("?? constellation not found"); } #if 0 /* Test program */ double J2000 = 2451545.0; double STR = 4.8481368110953599359e-6; test (r,d) double r, d; { double c, p[3], jd; d /= RTD; r *= 15.0/RTD; c = cos(d); p[2] = sin(d); p[0] = c * cos(r); p[1] = c * sin(r); jd = 2433282.423; /* 1950.0 Besselian epoch */ printf ("%8.4f %9.4f %s\n", r, d, whatconstel (p, jd)); } int main() { /* The following is an example of the output of the program: RA = 9.0000 DEC = 65.0000 IS IN CONSTELLATION UMa RA = 23.5000 DEC = -20.0000 IS IN CONSTELLATION Aqr RA = 5.1200 DEC = 9.1200 IS IN CONSTELLATION Ori RA = 9.4555 DEC = -19.9000 IS IN CONSTELLATION Hya RA = 12.8888 DEC = 22.0000 IS IN CONSTELLATION Com RA = 15.6687 DEC = -12.1234 IS IN CONSTELLATION Lib RA = 19.0000 DEC = -40.0000 IS IN CONSTELLATION CrA RA = 6.2222 DEC = -81.1234 IS IN CONSTELLATION Men */ test (9.0, 65.0); test (23.5, -20.0); test (5.12, 9.12); test (9.4555, -19.9); test (12.8888, 22.0); test (15.6687, -12.1234); test (19.0, -40.0); test (6.2222, -81.1234); exit(0); } #endif astronomical-almanac-5.6/deflec.c0000644000175000017500000000114205336077634015236 0ustar jrvjrv/* Correct for light deflection due to solar gravitation. * AA page B37 * * SE, pq, etc. were computed earlier by angles.c. */ #include "kep.h" int relativity( p, q, e ) /* unit vector from earth to object: */ double p[]; /* heliocentric ecliptic rectangular coordinates * of earth and object: */ double q[], e[]; { double C; int i; C = 1.974e-8/(SE*(1.0+qe)); for( i=0; i<3; i++ ) { dp[i] = C*(pq*e[i]/SE - ep*q[i]/SO); p[i] += dp[i]; } if( prtflg ) printf( "elongation from sun %.2f degrees, ", acos( -ep )/DTR ); showcor( "light defl.", p, dp ); return(0); } astronomical-almanac-5.6/deltat.c0000666000175000017500000002321607655233032015273 0ustar jrvjrv/* DeltaT = Ephemeris Time - Universal Time * * The tabulated values of deltaT, in hundredths of a second, * were taken from The Astronomical Almanac, page K8. The program * adjusts for a value of secular tidal acceleration ndot. It is -25.8 * arcsec per century squared for JPL's DE403 ephemeris. * ELP2000 and DE200 use the value -23.8946. * * The tabulated range is 1620.0 through 2003.0. Bessel's interpolation * formula is implemented to obtain fourth order interpolated values at * intermediate times. * * Updated deltaT predictions can be obtained from this network archive: * http://maia.usno.navy.mil * Currently (as of 2002) available series are * tai-utc.dat Changes by 1 whenever there is a leap second * finals.all EOP including UT1-UTC, always less than 1 second * from which deltaT = 32.184 + (tai-utc) - (UT1-UTC) * * For dates earlier than the tabulated range, the program * calculates approximate formulae of Stephenson and Morrison * or K. M. Borkowski. These approximations have an estimated * error of 15 minutes at 1500 B.C. They are not adjusted for small * improvements in the current estimate of ndot because the formulas * were derived from studies of ancient eclipses and other historical * information, whose interpretation depends only partly on ndot. * * A quadratic extrapolation formula, that agrees in value and slope with * current data, predicts future values of deltaT. * * Input Y is the Julian epoch expressed in Julian years. Y can be * found from the Julian date JD by * Y = 2000.0 + (JD - 2451545.0)/365.25. * See AA page B4. * * Output double deltat(Y) is ET-UT in seconds. * * * References: * * Stephenson, F. R., and L. V. Morrison, "Long-term changes * in the rotation of the Earth: 700 B.C. to A.D. 1980," * Philosophical Transactions of the Royal Society of London * Series A 313, 47-70 (1984) * * Borkowski, K. M., "ELP2000-85 and the Dynamical Time * - Universal Time relation," Astronomy and Astrophysics * 205, L8-L10 (1988) * Borkowski's formula is derived from eclipses going back to 2137 BC * and uses lunar position based on tidal coefficient of -23.9 arcsec/cy^2. * * Chapront-Touze, Michelle, and Jean Chapront, _Lunar Tables * and Programs from 4000 B.C. to A.D. 8000_, Willmann-Bell 1991 * Their table agrees with the one here, but the entries are * rounded to the nearest whole second. * * Stephenson, F. R., and M. A. Houlden, _Atlas of Historical * Eclipse Maps_, Cambridge U. Press (1986) */ #include "kep.h" /* If the following number (read from the file aa.ini) * is nonzero, then the program will return it * and not calculate anything. */ double dtgiven = 0.0; extern double dtgiven; #define DEMO 0 #define TABSTART 1620 #define TABEND 2013 #define TABSIZ (TABEND - TABSTART + 1) /* Note, Stephenson and Morrison's table starts at the year 1630. * The Chapronts' table does not agree with the Almanac prior to 1630. * The actual accuracy decreases rapidly prior to 1780. */ short dt[TABSIZ] = { /* 1620.0 thru 1659.0 */ 12400, 11900, 11500, 11000, 10600, 10200, 9800, 9500, 9100, 8800, 8500, 8200, 7900, 7700, 7400, 7200, 7000, 6700, 6500, 6300, 6200, 6000, 5800, 5700, 5500, 5400, 5300, 5100, 5000, 4900, 4800, 4700, 4600, 4500, 4400, 4300, 4200, 4100, 4000, 3800, /* 1660.0 thru 1699.0 */ 3700, 3600, 3500, 3400, 3300, 3200, 3100, 3000, 2800, 2700, 2600, 2500, 2400, 2300, 2200, 2100, 2000, 1900, 1800, 1700, 1600, 1500, 1400, 1400, 1300, 1200, 1200, 1100, 1100, 1000, 1000, 1000, 900, 900, 900, 900, 900, 900, 900, 900, /* 1700.0 thru 1739.0 */ 900, 900, 900, 900, 900, 900, 900, 900, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1200, 1200, 1200, 1200, 1200, 1200, /* 1740.0 thru 1779.0 */ 1200, 1200, 1200, 1200, 1300, 1300, 1300, 1300, 1300, 1300, 1300, 1400, 1400, 1400, 1400, 1400, 1400, 1400, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1700, 1700, 1700, 1700, 1700, /* 1780.0 thru 1799.0 */ 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1700, 1600, 1600, 1600, 1600, 1500, 1500, 1400, 1400, /* 1800.0 thru 1819.0 */ 1370, 1340, 1310, 1290, 1270, 1260, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1250, 1240, 1230, 1220, /* 1820.0 thru 1859.0 */ 1200, 1170, 1140, 1110, 1060, 1020, 960, 910, 860, 800, 750, 700, 660, 630, 600, 580, 570, 560, 560, 560, 570, 580, 590, 610, 620, 630, 650, 660, 680, 690, 710, 720, 730, 740, 750, 760, 770, 770, 780, 780, /* 1860.0 thru 1899.0 */ 788, 782, 754, 697, 640, 602, 541, 410, 292, 182, 161, 10, -102, -128, -269, -324, -364, -454, -471, -511, -540, -542, -520, -546, -546, -579, -563, -564, -580, -566, -587, -601, -619, -664, -644, -647, -609, -576, -466, -374, /* 1900.0 thru 1939.0 */ -272, -154, -2, 124, 264, 386, 537, 614, 775, 913, 1046, 1153, 1336, 1465, 1601, 1720, 1824, 1906, 2025, 2095, 2116, 2225, 2241, 2303, 2349, 2362, 2386, 2449, 2434, 2408, 2402, 2400, 2387, 2395, 2386, 2393, 2373, 2392, 2396, 2402, /* 1940.0 thru 1979.0 */ 2433, 2483, 2530, 2570, 2624, 2677, 2728, 2778, 2825, 2871, 2915, 2957, 2997, 3036, 3072, 3107, 3135, 3168, 3218, 3268, 3315, 3359, 3400, 3447, 3503, 3573, 3654, 3743, 3829, 3920, 4018, 4117, 4223, 4337, 4449, 4548, 4646, 4752, 4853, 4959, /* 1980.0 thru 2003.0 */ 5054, 5138, 5217, 5296, 5379, 5434, 5487, 5532, 5582, 5630, 5686, 5757, 5831, 5912, 5998, 6078, 6163, 6230, 6297, 6347, 6383, 6409, 6430, 6447, /* Extrapolated values */ 6456, 6600, 6700, 6800, 6900, 7000, 7100, 7200, 7300, 7400, }; double deltat(Y) double Y; { double ans, p, B; int d[6]; int i, iy, k; if( dtgiven != 0.0 ) return( dtgiven ); if( Y > TABEND ) { #if 0 /* Morrison, L. V. and F. R. Stephenson, "Sun and Planetary System" * vol 96,73 eds. W. Fricke, G. Teleki, Reidel, Dordrecht (1982) */ B = 0.01*(Y-1800.0) - 0.1; ans = -15.0 + 32.5*B*B; return(ans); #else /* Extrapolate forward by a second-degree curve that agrees with the most recent data in value and slope, and vaguely fits over the past century. This idea communicated by Paul Muller, who says NASA used to do something like it. */ B = Y - TABEND; /* slope */ p = dt[TABSIZ-1] - dt[TABSIZ-2]; /* square term */ ans = (dt[TABSIZ - 101] - (dt[TABSIZ - 1] - 100.0 * p)) * 1e-4; ans = 0.01 * (dt[TABSIZ-1] + p * B + ans * B * B); if( prtflg ) printf("[extrapolated deltaT] "); return(ans); #endif } if( Y < TABSTART ) { if( Y >= 948.0 ) { /* Stephenson and Morrison, stated domain is 948 to 1600: * 25.5(centuries from 1800)^2 - 1.9159(centuries from 1955)^2 */ B = 0.01*(Y - 2000.0); ans = (23.58 * B + 100.3)*B + 101.6; } else { /* Borkowski */ B = 0.01*(Y - 2000.0) + 3.75; ans = 35.0 * B * B + 40.; } return(ans); } /* Besselian interpolation from tabulated values. * See AA page K11. */ /* Index into the table. */ p = floor(Y); iy = (int) (p - TABSTART); /* Zeroth order estimate is value at start of year */ ans = dt[iy]; k = iy + 1; if( k >= TABSIZ ) goto done; /* No data, can't go on. */ /* The fraction of tabulation interval */ p = Y - p; /* First order interpolated value */ ans += p*(dt[k] - dt[iy]); if( (iy-1 < 0) || (iy+2 >= TABSIZ) ) goto done; /* can't do second differences */ /* Make table of first differences */ k = iy - 2; for( i=0; i<5; i++ ) { if( (k < 0) || (k+1 >= TABSIZ) ) { d[i] = 0; } else d[i] = dt[k+1] - dt[k]; k += 1; } /* Compute second differences */ for( i=0; i<4; i++ ) d[i] = d[i+1] - d[i]; B = 0.25*p*(p-1.0); ans += B*(d[1] + d[2]); #if DEMO printf( "B %.4lf, ans %.4lf\n", B, ans ); #endif if( iy+2 >= TABSIZ ) goto done; /* Compute third differences */ for( i=0; i<3; i++ ) d[i] = d[i+1] - d[i]; B = 2.0*B/3.0; ans += (p-0.5)*B*d[1]; #if DEMO printf( "B %.4lf, ans %.4lf\n", B*(p-0.5), ans ); #endif if( (iy-2 < 0) || (iy+3 > TABSIZ) ) goto done; /* Compute fourth differences */ for( i=0; i<2; i++ ) d[i] = d[i+1] - d[i]; B = 0.125*B*(p+1.0)*(p-2.0); ans += B*(d[0] + d[1]); #if DEMO printf( "B %.4lf, ans %.4lf\n", B, ans ); #endif done: /* Astronomical Almanac table is corrected by adding the expression * -0.000091 (ndot + 26)(year-1955)^2 seconds * to entries prior to 1955 (AA page K8), where ndot is the secular * tidal term in the mean motion of the Moon. * * Entries after 1955 are referred to atomic time standards and * are not affected by errors in Lunar or planetary theory. */ ans *= 0.01; if( Y < 1955.0 ) { B = (Y - 1955.0); #if 1 ans += -0.000091 * (-25.8 + 26.0) * B * B; #else ans += -0.000091 * (-23.8946 + 26.0) * B * B; #endif } return( ans ); } /* Routine to fill in time values for TDT and UT. * These and the input date, JD are global variables. * jdflag is set up on reading the initialization file aa.ini. */ int update() { double T; /* Convert Julian date to Julian years re J2000.0. */ T = 2000.0 + (JD - J2000)/365.25; switch( jdflag ) { case 0: TDT = JD; UT = JD; break; case 1: TDT = JD; UT = TDT - deltat(T)/86400.0; jtocal(UT); /* display the other date */ break; case 2: UT = JD; TDT = UT + deltat(T)/86400.0; jtocal(TDT); break; } jtocal(JD); return(0); } /* Exercise program. */ #if DEMO main() { char s[20]; double ans, y; loop: printf( "year ? " ); gets(s); sscanf( s, "%lf", &y ); ans = deltat(y); printf( "%.4lf\n", ans ); goto loop; } #endif astronomical-almanac-5.6/diurab.c0000644000175000017500000000170505475265620015265 0ustar jrvjrv/* Diurnal aberration * This formula is less rigorous than the method used for * annual aberration. However, the correction is small. */ #include "kep.h" /* distance from observer to center of Earth, in Earth radii: */ extern double trho; /* geocentric latitude of observer, degrees: */ extern double tlat; int diurab( last, ra, dec ) double last; /* local apparent sidereal time, radians */ double *ra; /* right ascension, radians */ double *dec; /* declination, radians */ { double lha, coslha, sinlha, cosdec, sindec; double coslat, N, D; lha = last - *ra; coslha = cos(lha); sinlha = sin(lha); cosdec = cos(*dec); sindec = sin(*dec); coslat = cos( DTR*tlat ); if( cosdec != 0.0 ) N = 1.5472e-6*trho*coslat*coslha/cosdec; else N = 0.0; *ra += N; D = 1.5472e-6*trho*coslat*sinlha*sindec; *dec += D; if( prtflg ) { printf( "diurnal aberration dRA %.3fs dDec %.2f\"\n", RTS*N/15.0, RTS*D ); } return(0); } astronomical-almanac-5.6/diurpx.c0000644000175000017500000000261606065432672015333 0ustar jrvjrv/* Diurnal parallax, AA page D3 */ #include "kep.h" /* Earth radii per au. */ static double DISFAC; extern double aearth, au; /* distance to center of Earth, in Earth radii */ extern double trho; /* observer's geocentric latitude, degrees */ extern double tlat; int diurpx( last, ra, dec, dist ) double last; /* local apparent sidereal time, radians */ double *ra; /* right ascension, radians */ double *dec; /* declination, radians */ double dist; /* Earth - object distance, au */ { double cosdec, sindec, coslat, sinlat; double p[3], dp[3], x, y, z, D; /* Don't bother with this unless the equatorial horizontal parallax * is at least 0.005" */ if( dist > 1758.8 ) return(-1); DISFAC = au / (0.001 * aearth); cosdec = cos(*dec); sindec = sin(*dec); /* Observer's astronomical latitude */ x = tlat * DTR; coslat = cos(x); sinlat = sin(x); /* Convert to equatorial rectangular coordinates * in which unit distance = earth radius */ D = dist * DISFAC; p[0] = D*cosdec*cos(*ra); p[1] = D*cosdec*sin(*ra); p[2] = D*sindec; dp[0] = -trho*coslat*cos(last); dp[1] = -trho*coslat*sin(last); dp[2] = -trho*sinlat; x = p[0] + dp[0]; y = p[1] + dp[1]; z = p[2] + dp[2]; D = x*x + y*y + z*z; D = sqrt(D); /* topocentric distance */ /* recompute ra and dec */ *ra = zatan2(x,y); *dec = asin(z/D); showcor( "diurnal parallax", p, dp ); return(0); } astronomical-almanac-5.6/dms.c0000644000175000017500000002414306617120650014573 0ustar jrvjrv/* Utility programs for unit conversions and calendar */ /*double PI = 3.14159265358979323846;*/ #include "kep.h" #if __STDC__ double caltoj (long, int, double); #else double caltoj(); #endif char *intfmt = "%d"; char *lngfmt = "%ld"; char *dblfmt = "%lf"; char *strfmt = "%s"; /* Display Right Ascension and Declination * from input equatorial rectangular unit vector. * Output vector pol[] contains R.A., Dec., and radius. */ int showrd( msg, p, pol ) char *msg; double p[], pol[]; { double x, y, r; int i; r = 0.0; for( i=0; i<3; i++ ) { x = p[i]; r += x * x; } r = sqrt(r); x = zatan2( p[0], p[1] ); pol[0] = x; y = asin( p[2]/r ); pol[1] = y; pol[2] = r; if (prtflg != 0) { printf( "%s R.A. ", msg ); hms( x ); printf( "Dec. " ); dms( y ); printf( "\n" ); } return(0); } /* Display magnitude of correction vector * in arc seconds */ int showcor( strng, p, dp ) char *strng; double p[], dp[]; { double p1[3], dr, dd; int i; if( prtflg == 0 ) return(0); for( i=0; i<3; i++ ) p1[i] = p[i] + dp[i]; deltap( p, p1, &dr, &dd ); printf( "%s dRA %.3fs dDec %.2f\"\n", strng, RTS*dr/15.0, RTS*dd ); return(0); } /* Radians to degrees, minutes, seconds */ int dms( x ) double x; { double s; int d, m; s = x * RTD; if( s < 0.0 ) { printf( " -" ); s = -s; } else printf( " " ); d = (int) s; s -= d; s *= 60; m = (int) s; s -= m; s *= 60; printf( "%3dd %02d\' %05.2f\" ", d, m, s ); return(0); } /* Radians to hours, minutes, seconds */ #define RTOH (12.0/PI) int hms( x ) double x; { int h, m; long sint, sfrac; double s; s = x * RTOH; if( s < 0.0 ) s += 24.0; h = (int) s; s -= h; s *= 60; m = (int) s; s -= m; s *= 60; /* Handle shillings and pence roundoff. */ sfrac = (long) (1000.0 * s + 0.5); if( sfrac >= 60000L ) { sfrac -= 60000L; m += 1; if( m >= 60 ) { m -= 60; h += 1; } } sint = sfrac / 1000; sfrac -= sint * 1000; printf( "%3dh %02dm %02ld.%03lds ", h, m, sint, sfrac ); return(0); } /* julian.c * * This program calculates Julian day number from calendar * date, and the date and day of the week from Julian day. * The Julian date is double precision floating point * with the origin used by astronomers. The calendar output * converts fractions of a day into hours, minutes, and seconds. * There is no year 0. Enter B.C. years as negative; i.e., * 2 B.C. = -2. * * The approximate range of dates handled is 4713 B.C. to * 54,078 A.D. This should be adequate for most applications. * * B.C. dates are calculated by extending the Gregorian sequence * of leap years and century years into the past. This seems * the only sensible definition, but I don't know if it is * the official one. * * Note that the astronomical Julian day starts at noon on * the previous calendar day. Thus at midnight in the morning * of the present calendar day the Julian date ends in .5; * it rolls over to tomorrow at noon today. * * The month finding algorithm is attributed to Meeus. * * - Steve Moshier */ char *months[12] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; char *days[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; long cyear = 1986L; extern long cyear; static int month = 1; static double day = 1.0; short yerend = 0; extern short yerend; double zgetdate() { double J; /* Get operator to type in a date. */ getnum( "Calendar date: Year", &cyear, lngfmt ); if( (cyear > 53994L) || (cyear < -4713L) ) { printf( "Year out of range.\n" ); goto err; } if( cyear == 0 ) { printf( "There is no year 0.\n" ); err: J = 0.0; goto pdate; } getnum( "Month (1-12)", &month, intfmt); getnum( "Day.fraction", &day, dblfmt ); /* Find the Julian day. */ J = caltoj(cyear,month,day); /*printf( "Julian day %.1f\n", J );*/ pdate: /* Convert back to calendar date. */ /* jtocal( J ); */ return(J); } /* Calculate Julian day from Gregorian calendar date */ double caltoj( year, month, day ) long year; int month; double day; { long y, a, b, c, e, m; double J; /* The origin should be chosen to be a century year * that is also a leap year. We pick 4801 B.C. */ y = year + 4800; if( year < 0 ) { y += 1; } /* The following magic arithmetic calculates a sequence * whose successive terms differ by the correct number of * days per calendar month. It starts at 122 = March; January * and February come after December. */ m = month; if( m <= 2 ) { m += 12; y -= 1; } e = (306 * (m+1))/10; a = y/100; /* number of centuries */ if( year <= 1582L ) { if( year == 1582L ) { if( month < 10 ) goto julius; if( month > 10) goto gregor; if( day >= 15 ) goto gregor; } julius: printf( " Julian Calendar assumed.\n" ); b = -38; } else { /* -number of century years that are not leap years */ gregor: b = (a/4) - a; } c = (36525L * y)/100; /* Julian calendar years and leap years */ /* Add up these terms, plus offset from J 0 to 1 Jan 4801 B.C. * Also fudge for the 122 days from the month algorithm. */ J = b + c + e + day - 32167.5; return( J ); } /* Calculate month, day, and year from Julian date */ int jtocal( J ) double J; { int month, day; long year, a, c, d, x, y, jd; int BC; double dd; if( J < 1721425.5 ) /* January 1.0, 1 A.D. */ BC = 1; else BC = 0; jd = (long) (J + 0.5); /* round Julian date up to integer */ /* Find the number of Gregorian centuries * since March 1, 4801 B.C. */ a = (100*jd + 3204500L)/3652425L; /* Transform to Julian calendar by adding in Gregorian century years * that are not leap years. * Subtract 97 days to shift origin of JD to March 1. * Add 122 days for magic arithmetic algorithm. * Add four years to ensure the first leap year is detected. */ c = jd + 1486; if( jd >= 2299160.5 ) c += a - a/4; else c += 38; /* Offset 122 days, which is where the magic arithmetic * month formula sequence starts (March 1 = 4 * 30.6 = 122.4). */ d = (100*c - 12210L)/36525L; /* Days in that many whole Julian years */ x = (36525L * d)/100L; /* Find month and day. */ y = ((c-x)*100L)/3061L; day = (int) (c - x - ((306L*y)/10L)); month = (int) (y - 1); if( y > 13 ) month -= 12; /* Get the year right. */ year = d - 4715; if( month > 2 ) year -= 1; /* Day of the week. */ a = (jd + 1) % 7; /* Fractional part of day. */ dd = day + J - jd + 0.5; /* post the year. */ cyear = year; if( BC ) { year = -year + 1; cyear = -year; if( prtflg ) printf( "%ld B.C. ", year ); } else { if( prtflg ) printf( "%ld ", year ); } day = (int) dd; if( prtflg ) printf( "%s %d %s", months[month-1], day, days[(int) a] ); /* Flag last or first day of year */ if( ((month == 1) && (day == 1)) || ((month == 12) && (day == 31)) ) yerend = 1; else yerend = 0; /* Display fraction of calendar day * as clock time. */ a = (long) dd; dd = dd - a; if( prtflg ) { hms( 2.0*PI*dd ); if( J == TDT ) printf( "TDT\n" ); /* Indicate Terrestrial Dynamical Time */ else if( J == UT ) printf( "UT\n" ); /* Universal Time */ else printf( "\n" ); } return(0); } /* Reduce x modulo 360 degrees */ double mod360(x) double x; { long k; double y; k = (long) (x/360.0); y = x - k * 360.0; while( y < 0.0 ) y += 360.0; while( y > 360.0 ) y -= 360.0; return(y); } /* Reduce x modulo 2 pi */ #define TPI (2.0*PI) double modtp(x) double x; { double y; y = floor( x/TPI ); y = x - y * TPI; while( y < 0.0 ) y += TPI; while( y >= TPI ) y -= TPI; return(y); } /* Get operator to type in hours, minutes, and seconds */ static int hours = 0; static int minutes = 0; static double seconds = 0.0; double gethms() { double t; getnum( "Time: Hours", &hours, intfmt ); getnum( "Minutes", &minutes, intfmt ); getnum( "Seconds", &seconds, dblfmt ); t = (3600.0*hours + 60.0*minutes + seconds)/86400.0; return(t); } int getnum( msg, num, format ) char *msg; void *num; char *format; { char s[40]; printf( "%s (", msg ); if( format == strfmt ) printf( format, (char *) num ); else if( format == dblfmt ) printf( format, *(double *)num ); else if( format == intfmt ) printf( format, *(int *)num ); else if( format == lngfmt ) printf( format, *(long *)num ); else printf( "Illegal input format\n" ); printf( ") ? "); gets(s); if( s[0] != '\0' ) sscanf( s, format, num ); return(0); } /* * Convert change in rectangular coordinatates to change * in right ascension and declination. * For changes greater than about 0.1 degree, the * coordinates are converted directly to R.A. and Dec. * and the results subtracted. For small changes, * the change is calculated to first order by differentiating * tan(R.A.) = y/x * to obtain * dR.A./cos**2(R.A.) = dy/x - y dx/x**2 * where * cos**2(R.A.) = 1/(1 + (y/x)**2). * * The change in declination arcsin(z/R) is * d asin(u) = du/sqrt(1-u**2) * where u = z/R. * * p0 is the initial object - earth vector and * p1 is the vector after motion or aberration. * */ int deltap( p0, p1, dr, dd ) double p0[], p1[]; double *dr, *dd; { double dp[3], A, B, P, Q, x, y, z; int i; P = 0.0; Q = 0.0; z = 0.0; for( i=0; i<3; i++ ) { x = p0[i]; y = p1[i]; P += x * x; Q += y * y; y = y - x; dp[i] = y; z += y*y; } A = sqrt(P); B = sqrt(Q); if( (A < 1.e-7) || (B < 1.e-7) || (z/(P+Q)) > 5.e-7 ) { P = zatan2( p0[0], p0[1] ); Q = zatan2( p1[0], p1[1] ); Q = Q - P; while( Q < -PI ) Q += 2.0*PI; while( Q > PI ) Q -= 2.0*PI; *dr = Q; P = asin( p0[2]/A ); Q = asin( p1[2]/B ); *dd = Q - P; return(0); } x = p0[0]; y = p0[1]; if( x == 0.0 ) { *dr = 1.0e38; } else { Q = y/x; Q = (dp[1] - dp[0]*y/x)/(x * (1.0 + Q*Q)); *dr = Q; } x = p0[2]/A; P = sqrt( 1.0 - x*x ); *dd = (p1[2]/B - x)/P; return(0); } astronomical-almanac-5.6/domoon.c0000666000175000017500000001511107627416036015312 0ustar jrvjrv/* * The entry, domoon(), is intended to be called by the AA.ARC * ephemeris calculator. It calculates the Moon's apparent position. * Corrections for nutation and light time are included, but the * required routines for this are given as separate files in AA.ARC. * Note that the difference between Ephemeris and Universal * time is significant here, since the Moon moves in right * ascension at the rate of about 2s/minute. * */ #include "kep.h" #ifdef ANSIPROT int gmoon (double, double *, double *); int moonll (double, double *, double *); #else int gmoon (), moonll (); #endif extern double aearth, au; static double FAR ra; /* Right Ascension */ static double FAR dec; /* Declination */ double FAR Rearth; /* Calculate geometric position of the Moon and apply * approximate corrections to find apparent position, * phase of the Moon, etc. for AA.ARC. */ int domoon() { int i, prtsav; double ra0, dec0; double x, y, z, lon0; double pp[3], qq[3], pe[3], re[3], moonpp[3], moonpol[3]; /* Geometric equatorial coordinates of the earth. */ for (i = 0; i < 3; i++) re[i] = rearth[i]; /* Run the orbit calculation twice, at two different times, * in order to find the rate of change of R.A. and Dec. */ /* Calculate for 0.001 day ago */ prtsav = prtflg; prtflg = 0; /* disable display */ moonll(TDT-0.001, moonpp, moonpol); ra0 = ra; dec0 = dec; lon0 = moonpol[0]; prtflg = prtsav; /* Calculate for present instant. */ moonll(TDT, moonpp, moonpol); if(prtflg) printf("Geometric lon %.3f deg, lat %.3f deg, rad %.4e au\n", RTD * obpolar[0], RTD * obpolar[1], obpolar[2]); prtflg = 0; /* The rates of change. These are used by altaz() to * correct the time of rising, transit, and setting. */ dradt = ra - ra0; if (dradt >= PI) dradt = dradt - 2.0 * PI; if (dradt <= -PI) dradt = dradt + 2.0 * PI; dradt = 1000.0 * dradt; ddecdt = 1000.0*(dec-dec0); /* Rate of change in longitude, degrees per day * used for phase of the moon */ lon0 = 1000.0*RTD*(moonpol[0] - lon0); /* Get apparent coordinates for the earth. */ z = re[0] * re[0] + re[1] * re[1] + re[2] * re[2]; z = sqrt(z); for (i = 0; i < 3; i++) re[i] /= z; annuab( re ); /* aberration of light. */ /* pe[0] -= STR * (20.496/(RTS*pe[2])); */ precess( re, TDT, -1 ); nutate( TDT, re ); for (i = 0; i < 3; i++) re[i] *= z; lonlat( re, TDT, pe, 0 ); prtflg = prtsav; /* reenable display */ /* Find sun-moon-earth angles */ for( i=0; i<3; i++ ) qq[i] = re[i] + moonpp[i]; angles( moonpp, qq, re ); /* Display answers */ if( prtflg ) { printf( "Apparent geocentric longitude %.3f deg", RTD * moonpol[0] ); printf( " latitude %.3f deg\n", RTD * moonpol[1] ); printf( "Distance %.3f Earth-radii\n", moonpol[2]/Rearth ); printf( "Horizontal parallax" ); x = Rearth/moonpol[2]; dms( asin(x) ); printf( "Semidiameter" ); x = 0.272453 * x + 0.0799/RTS; /* AA page L6 */ dms( x ); x = RTD * acos(-ep); /* x = 180.0 - RTD * arcdot (re, pp); */ printf( "\nElongation from sun %.2f deg,", x ); x = 0.5 * (1.0 + pq); printf( " Illuminated fraction %.2f\n", x ); /* Find phase of the Moon by comparing Moon's longitude * with Earth's longitude. * * The number of days before or past indicated phase is * estimated by assuming the true longitudes change linearly * with time. These rates are estimated for the date, but * do not stay constant. The error can exceed 0.15 day in 4 days. */ x = moonpol[0] - pe[0]; x = modtp( x ) * RTD; /* difference in longitude */ i = (int) (x/90); /* number of quarters */ x = (x - i*90.0); /* phase angle mod 90 degrees */ /* days per degree of phase angle */ z = moonpol[2]/(12.3685 * 0.00257357); if( x > 45.0 ) { y = -(x - 90.0)*z; if( y > 1.0 ) printf( "Phase %.1f days before ", y ); else printf( "Phase %.2f days before ", y ); i = (i+1) & 3; } else { y = x*z; if( y > 1.0 ) printf( "Phase %.1f days past ", y ); else printf( "Phase %.2f days past ", y ); } switch(i) { case 0: printf( "Full Moon\n" ); break; case 1: printf( "Third Quarter\n" ); break; case 2: printf( "New Moon\n" ); break; case 3: printf( "First Quarter\n" ); break; } printf( " Apparent: R.A." ); hms(ra); printf( "Declination" ); dms(dec); printf( "\n" ); } /* if prtflg */ /* Compute and display topocentric position (altaz.c) */ pp[0] = ra; pp[1] = dec; pp[2] = moonpol[2]; altaz( pp, UT ); return(0); } /* Calculate apparent latitude, longitude, and horizontal parallax * of the Moon at Julian date J. */ int moonll(J, rect, pol) double J, rect[], pol[]; { double cosB, sinB, cosL, sinL, y, z; double qq[3], pp[3]; int i; /* Compute obliquity of the ecliptic, coseps, and sineps. */ epsiln( J ); /* Get geometric coordinates of the Moon. */ gmoon (J, rect, pol); /* Post the geometric ecliptic longitude and latitude, in radians, * and the radius in au. */ obpolar[0] = pol[0]; obpolar[1] = pol[1]; obpolar[2] = pol[2]; /* Light time correction to longitude, * about 0.7". */ pol[0] -= 0.0118 * DTR * Rearth / pol[2]; /* convert to equatorial system of date */ cosB = cos(pol[1]); sinB = sin(pol[1]); cosL = cos(pol[0]); sinL = sin(pol[0]); rect[0] = cosB*cosL; rect[1] = coseps*cosB*sinL - sineps*sinB; rect[2] = sineps*cosB*sinL + coseps*sinB; /* Rotate to J2000. */ precess( rect, TDT, 1 ); /* Find Euclidean vectors and angles between earth, object, and the sun */ for( i=0; i<3; i++ ) { pp[i] = rect[i] * pol[2]; qq[i] = rearth[i] + pp[i]; } angles( pp, qq, rearth ); /* Make rect a unit vector. */ /* for (i = 0; i < 3; i++) */ /* rect[i] /= EO; */ /* Correct position for light deflection. (Ignore.) */ /* relativity( rect, qq, rearth ); */ /* Aberration of light. The Astronomical Almanac (Section D, Daily Polynomial Coefficients) seems to omit this, even though the reference ephemeris is inertial. */ /* annuab (rect); */ /* Precess to date. */ precess( rect, TDT, -1 ); /* Correct for nutation at date TDT. */ nutate( TDT, rect ); /* Apparent geocentric right ascension and declination. */ ra = zatan2(rect[0],rect[1]); dec = asin(rect[2]); /* For apparent ecliptic coordinates, rotate from the true equator into the ecliptic of date. */ cosL = cos(eps+nuto); sinL = sin(eps+nuto); y = cosL * rect[1] + sinL * rect[2]; z = -sinL * rect[1] + cosL * rect[2]; pol[0] = zatan2( rect[0], y ); pol[1] = asin(z); /* Restore earth-moon distance. */ for( i=0; i<3; i++ ) rect[i] *= EO; return(0); } astronomical-almanac-5.6/ear404.c0000644000175000017500000010505406254270745015020 0ustar jrvjrv /* heliocentric earth-moon barycenter polar coordinates re fixed J2000 mean equinox and ecliptic S. L. Moshier December, 1996 Residuals against JPL ephemeris DE404 (arc seconds) First date in file = 1221000.50 Number of samples = 524290 Sampling interval = 3.0 days Julian Years Longitude Latitude Distance 1 = 725 km Peak RMS Ave Peak RMS Ave Peak RMS Ave -1369.0 to -1000.0: 0.07 0.02 0.00 0.02 0.00 -0.00 0.03 0.01 -0.00 -1000.0 to -500.0: 0.05 0.01 -0.00 0.01 0.00 -0.00 0.03 0.01 -0.00 -500.0 to 0.0: 0.04 0.01 0.00 0.01 0.00 0.00 0.03 0.01 -0.00 0.0 to 500.0: 0.05 0.01 -0.00 0.01 0.00 0.00 0.03 0.01 -0.00 500.0 to 1000.0: 0.06 0.01 0.00 0.01 0.00 0.00 0.03 0.01 -0.00 1000.0 to 1500.0: 0.05 0.01 -0.00 0.01 0.00 0.00 0.02 0.01 -0.00 1500.0 to 2000.0: 0.05 0.01 0.00 0.01 0.00 0.00 0.02 0.00 0.00 2000.0 to 2500.0: 0.05 0.01 -0.00 0.01 0.00 -0.00 0.03 0.01 -0.00 2500.0 to 2937.2: 0.07 0.02 0.00 0.02 0.00 -0.00 0.03 0.01 -0.00 */ #include "plantbl.h" static long FAR tabl[] = { -242809, -178223, -6154, -6547, 15526, -79460, 66185, -19531, -12754, 4389, 3153, -1151, 768, 1750, -248, 657, -80, 0, -4, -29, -3020, 301, -360, 412, -1463, 2266, -41, 30, -39868, -14275, -25052, 1583, 15695, 10018, -113, -122, -243, 18, -33, 31, -134, -171, 243, -115, 18, 148, -120, -129, 19, -220, -30, 19, 8, 23, -162, -124, 189, -315, 73, 77, 32006, -11295, 11595, 5629, -838, 1728, 0, 4, 38, 15, 142, -228, 92, 32, -2274, -1500, -2277, 3143, 3204, 127, -20, -11, 5186, 1054, 996, 1769, -231, 163, -88, -19, -2, -145, -27, 48, -8, 421, -7, 148, -16, -2, -3964, 4259, -11192, -8385, 11513, -13415, 103, -43, -289, -79, -29, 163, -117, 559, -190, -15, 7108, 5345, 12933, -7709, 3485, -26023, 11, -5, 311, 78, 22, 76, 2846, -3922, 2329, 43, 34, 442, 3, -245, -5, -3, -17, 5, 318, 15963, 2520, 7115, 2548, -9836, -7063, 1950, -4471, -8326, 4964, -3101, 563, -80, -1444, -472, 8, -22, 1558, -88, 235, 359, 293, -16, 144, 209, -13, -7, 812, -744, 150, -740, -2569, -956, 69, -2475, 1009, -55, -1707, -2525, 1071, -1761, 550, 279, -14, 36, -10442, 3344, -6759, -21551, 24737, -434, 504, -385, 191, 96, -2760, -1068, 85, -2617, 1062, -43, 192, -16, 30, 42, -2446, 588, -1522, -2933, 1746, -1070, 511, -1401, 139, 729, -12, 29, -2618, -2076, 2079, -3711, -21, -2727, -80, -19, 113, 2420, 325, 1058, 379, -1478, 296, -251, -265, -409, -10, 20, 15, -15, 11, 143, -83, 19, 266, -17, 40, 59, 19, -105, 5, 48331, 21, -16, -97, -318, 158, -171, 456, -351, 168, 85, 12, -2, 20, -15, 15, 2, 385, -1125, 521, -23, -815, -2088, 1644, -1329, 7, 14, -582, 234, -67, -467, -167, -51, -684, -2302, 1315, -797, 6, -70, -118, -406, 67, -63, -4848, 3713, -8483, -8776, 13049, -9404, -23, 34, -12, 1, -24, -10, -21, 0, -1, 24, -3, 28, -3032, -2494, 2498, -4342, -6538, 1899, -4414, -13249, 15540, -292, -228, 176, -40, -161, -20, -36, -800, -172, -36, -208, -249, -374, -1410, -72118, -745, 213, -23, 196, -14, -2, -239, -341, 1015, -291, 33, -94, 90, -20431, 4, -39, 75, 216, -23, 41, 116, 24, 5, 26, -45, -4178, -9, -23, 12, 18, 68, -2, 36, -19, 42, -8, 6, -106, 4, -38, -73, 259, 107, -293, -12, -44, 37, 13, 73, -46, 17, 8, 5832, 1989, -1404, 4469, -1619, -743, -1796, -2206, 461, -291, 153, 1104, 19195, 652503, 5587, -5252787, 47, -17340051, -32, 68926621, 1054, -230, -1601, 356, -562, -998, 124, -446, -171, 66, 26, 60, -7, 0, -88, -43, 65, -400, 4, 183, -1014, 2043, -1076, 126, -41, -205, -127, -85, -15, 68, 0, 0, -320, 75, -42, 285, -303, 771, 616, 400, -470, 48, -76, -103, -190, -11, -139, -5, -48, -87, -22, -362, -271, 1233, -392, 353, -154, -71, -109, 112, 17, 8, 1, -17, -170, 623, -279, 21, 139, -151, -107, -55199, 588, -188, 397, 674, -406, 269, 166, -207, 585, 333, -386, 754, 29, -65, 35, 10, 63, 1291, 62, 8, 239, 1323, -1434, 53, 19, -1, 34, 82, -15, -16, 265, -338, -729, -207, 3, 17, 697, 399, 274, 760, -12, 2, -48, -9, 3, 64, 147, 36, 9, 46, 77, 144, -76, 65, 2329, 1763, 987, 5506, 66, -123, -41, -24, -12, 1, -19, 94, 19, 8, -1, -18, 142, 77, -78, 187, 6, 18, 607, 163, 17, 158, 27, -208, 154, 27317, 587, -143, 22, -153, 5, -34, 75, 330, 98, -128, -67, -6542, -115, -236, 217, -12, 10, -6, -250, 653, 1611, -209, 4, 1072, -129, 216, 402, 81, 117, 11, 0, 20, 24, -28, 245, 437, -16, 59, 527952, -74895, 169682, 177186, -376, -362869, -60, 719658, -151, -382, -22, -43, 5, -5, 14, 5, -9, 13, 83, 296, -369, -1, -14, -6, 42, 8, -31, 7, -354, 634, 1132, 243, -38, 42, -14, 68, -6, 31, -36, -13, 7, -2104, 16, 67, 9, -4, 174, 144, 58, 438, -15, 5, -16, 19, -135, 1642, -140, -11, -4, 27, 253, -382, -651, -221, 11, 1, -12, -6, 136, 23, -1, 43, 3, 38, -26, -5, 17864, -4244, 5704, 7754, -36, -7891, -3, 10418, 2, -844, -1, 126, -7, 32, -67, -5, 39, 10, 5, 52, -13, 159, -49, -21, 1, -394, 7, -15, -4, -245, 1, 172, -36, -3, 13, 5, 0, 1, -1, 0, 0, -202, -2, 19, -20, -2, 5, 3, 0, -110, -12, -1, 0, -62, 0, -36, 0, -22, -13, 3, }; static long FAR tabb[] = { -428091, -488399, 746850, 6, 210, -93, 32, 1, -365, 332, -105, 76, -7, 2, -8, 14, -1, 2, 0, 0, -65, 12, -17, 7, -1, 1, 0, 0, -15, 65, -4, 26, -2, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, -1, -3, 0, 0, 0, 0, 0, 0, -2, 0, 0, 0, -1, 0, -30, 28, -6, 10, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, -16, 20, -6, -41, -9, -3, 0, 0, -6, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -96, 33, -12, 228, -23, -21, 0, 0, -12, -2, -4, 4, -1, 0, 1, 0, -329, -22, -34, -726, -147, -21, 0, 0, -2, 4, -1, 0, 2, -7, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 36, 88, -162, -19, -11, 21, 31, 37, -31, 53, -5, -15, -3, -11, 9, 3, 0, 0, -2, 0, 1, 0, 2, -1, 0, 0, 0, 0, -162, -102, -37, 30, 19, 23, -18, 9, 1, -6, -6, 22, -2, 3, 1, -2, 0, -1, 26, -25, 66, 52, -641, -153, -13, -9, 2, -3, -29, 8, -6, -2, 0, -6, 2, -4, 1, 0, -26, -11, -1, -10, -6, -13, 66, -1337, -879, -207, 1, -1, 8, -30, -24, -18, -16, 1, 9, 1, -24, -8, 9, -17, -13, 75, 19, -8, -29, 24, 0, 0, -1, 1, -25, 36, -7, -22, 0, -3, 1, -1, 187, -46, -6, 74, 5, -10, -5, -4, -16, 10, -5, -5, 2, -4, 5, -2, -2, 1, -1, 0, -16, -12, 1, -13, -17, -111, -186, 73, -1, -2, -277, -77, -27, 106, 16, 5, -12, -15, -13, -30, -1, 1, 0, 36, -10, 4, 607, 262, 533, -1530, -1630, 304, 8, -6, 1, 1, 0, -1, 5, -2, 0, -1, -1, -4, -44, -22, -64, -46, 537, 430, 268, -1553, -2040, -486, -3, -23, 20, 41, -1, 2, -21, -4, -1, -3, -84, 50, -177, 26, 5, -12, 2, -4, 7, 1, -115, -305, -310, 138, -186, 246, -96, 17, 0, 0, 4, -2, 1, 1, -3, 2, -1, 0, -15, 68, 0, 2, -3, 0, -5, 0, -1, 1, -5, 6, 0, 0, 0, 0, -235, -98, -2, 2, 9, -40, -1, -2, -33, -9, -5, -4, 5662, -3849, 1941, -124, 210, 160, -24721, -72945, 4099, -21914, 1345, -555, 23637393, -5516830, 17737677, 43330654, -44668315, 14540723, -824, -2086, -4423, -41801, 5562, -11664, 960, -125, 2001, -149, 587, -350, 23, -52, -3, 3, -248, -148, -40, 86, 2, 0, 21, -82, 11, 8, -8, 0, -30, -33, -22, 46, 0, -191, -168, -135, 27, -85, 14, 232, 217, 59, 5, 12, -5, 2, -24, -26, -52, 13, -3, 18, 26, 45, 32, -169, 14, -6, -3, 4, -5, 2, 6, 2, -2, 3, 20, -15, 0, 10, -486, -8, 4, -114, 102, -188, 23, -67, 6, 12, -43, -1, -32, 2, 15, 9, 16, -36, -6, -2, 14, -5, 17, -15, -28, 307, 289, 69, 2, -7, 3, -1, -1, 1, -16, -811, 287, -68, 0, 0, 0, -1, 16, -7, 0, 0, 0, 2, 0, 0, 0, -1, 1, 0, -3, -4, 2, 3, -29, 34, 59, -15, -3, -3, -1, 0, -2, -3, 3, -19, 0, 0, 0, 0, -15, 1, 5, 2, 0, 0, -1, -5, 0, -1, -120, 84, 7, -30, -7, -3, -1, 0, 0, -1, 9, -6, -186, -11, 13, -57, 1, 4, 1, -1, 0, 0, -5, 796, 46, 5, -1, -6, -10, 228, 5, -6, 1, -5, 0, 0, -6, -2, 148, 137, 10, 28, 430546, -279834, 488902, 664558, -746515, 243112, -39, -37, -13, -174, 6, -25, 2, -3, -4, -2, 0, 4, -5, 70, 82, 20, 0, 1, 1, 1, 0, 1, -27, 430, 226, -53, 1, 1, 0, 1, 1, -7, 2, 1, -3, -8, 1, 0, -1, 12, -2, -5, 4, 0, 0, 1, 1, 1, 1, 9, 33, 4, 0, 0, 0, -321, 4, 1, 0, 0, 1, 0, 106, -22, 0, 0, 4, 0, 0, 2, 7006, -9443, 12833, 11137, -14037, 4575, -2, 0, -1, -6, 1, 1, 4, 6, 16, 2, 55, -10, 1, 0, 0, 1, 0, 2, 0, -4, -2, 0, -351, 24, 0, 0, 8, 1, 30, -5, -12, 10, -4, 1, -1, -2, 0, 0, 4, 0, 17, -3, 0, -2, 2, 0, 0, -1, 0, -1, 0, 0, 0, 0, }; static long FAR tabr[] = { 14575, -26192, -144864, 2, -22, 15, -8, -21, -148, -104, -14, -75, 15, 2, -5, -3, -1, 0, 0, 0, 0, 21, -2, 7, -5, -3, 0, 0, 83, -94, 9, -67, -29, 50, 1, -1, 3, 2, 0, 0, 4, 3, 1, 1, -1, -1, 0, -1, 2, -1, 0, 1, 0, 0, -2, 3, -5, -2, -1, 1, 197, 511, -82, 189, -28, -12, 0, 0, 0, -1, 6, -1, 0, 1, 30, -30, -37, -25, 6, 21, 0, 0, 16, -139, 43, -28, 4, 6, 0, 3, 4, 0, 1, 1, -13, 0, -4, 0, 0, 1, 150, 135, -291, 436, -560, -343, 1, 3, 8, -15, -13, -5, -17, -3, 1, -6, -314, 428, 606, 758, 1230, -411, 0, -1, 11, -14, 4, 1, 221, 157, 1, 132, -25, 3, 12, 0, 0, 0, 0, -1, 1487, -108, 707, -79, -950, -190, 177, 582, -676, 399, -281, -396, 0, 52, 39, -130, 2, 1, 12, 148, -34, 23, 1, 27, -20, 13, 1, -1, 198, -34, -21, -80, -99, 332, -307, 9, -15, -125, 330, -231, 236, 139, -36, 74, 7, 3, -588, -1722, 3623, -1245, 187, 4366, -72, -75, 11, -33, 174, -467, 444, 9, 11, 180, -6, -39, 8, -7, -126, -500, 599, -317, 224, 355, -590, -39, 134, -379, -7, -3, 494, -628, 893, 490, 712, -7, -7, 35, -720, 50, -321, 72, 443, 106, 74, 82, 112, -84, -6, -3, 5, 4, 58, 7, -2, 38, 6, 92, -20, 14, 33, 13, -11189, -2, -11, -8, 106, -35, 58, 52, 132, 170, -32, 63, -2, -6, 6, 7, -1, 6, 452, 155, 9, 209, 788, -318, 511, 616, -5, 3, 142, 303, -280, 32, 21, -69, 984, -291, 340, 562, 30, 2, 171, -51, 27, 28, -1570, -2053, 3702, -3593, 4012, 5467, -14, -9, -1, -6, 4, -11, 0, -9, -11, 0, 15, 2, 1133, -1366, 1961, 1134, -867, -3010, 6041, -2049, 142, 7138, -79, -103, 73, -18, 17, -9, 79, -372, 97, -17, 182, -118, 33577, -675, -99, -347, -91, -11, 1, -7, 158, -111, 136, 474, 50, 16, 9739, 51, 19, 2, -105, 36, -20, -11, -12, 56, -13, 2, 2030, -22, 11, -4, 9, -6, 1, 33, 10, 18, 4, 21, 53, 3, 19, 2, 130, 37, -147, -54, -22, 6, 7, -19, 22, 36, -4, 8, -949, 2911, -2221, -697, 371, -808, 1203, -1117, 191, 189, -549, 77, -321201, 19788, 2622593, 5990, 8667033, 114, -34455835, 86, -92, -493, 179, 807, -499, 281, 225, 51, -34, -88, -30, 13, 0, -3, 20, -43, 201, 33, -93, 2, -1034, -518, -63, -545, 104, -20, 43, -64, -34, -7, 0, 0, -61, -159, -143, -8, -392, -157, -204, 309, -24, -248, 55, -40, -6, 91, -16, 57, -41, 18, 197, -20, -668, -150, -192, -216, 39, -84, -62, -59, -4, 8, -7, -1, -352, -100, -10, -158, 61, 55, 32493, -49, 107, 344, -395, 227, -154, -238, 123, 104, -205, 348, -449, -236, -54, -19, -6, 21, -790, 27, -5, 30, -846, 154, -26, -920, 0, 12, -54, 21, 11, -10, 137, 132, 109, -337, -11, 2, -272, 467, -511, 179, -1, -8, 7, -32, -44, 2, -26, 101, -32, 6, -98, 48, -42, -53, -1222, 1601, -3775, 656, 83, 46, 16, -28, 0, 7, -66, -14, -6, 13, 12, 0, -58, 91, -123, -58, -12, 4, -114, 423, -111, 12, 112, 27, -19072, 71, 100, 410, 107, 15, 24, 3, -214, 30, 49, 44, 5017, -27, 167, -80, 8, 153, 4, 7, -219, -35, 244, 694, -762, 2, -84, -49, -28, 158, -4, 56, -14, 0, 9, 12, 7, 18, 2, -7, -15426, 91, 25800, -15, 144767, -53, -287824, -24, 19, -9, 6, 7, 0, 0, -3, 8, -5, -3, -232, 53, -1, -271, 4, -12, -8, 30, -8, -25, -253, -150, -105, 470, -37, -29, -59, -6, -24, -5, 9, -18, 1784, 3, -54, 13, -12, 7, -116, 144, -353, 52, -4, -12, -17, -14, -1340, -64, 10, -116, -24, -2, 190, 131, 130, -307, -1, 9, 5, -7, -10, 56, -33, 0, -14, 3, 2, -12, -635, -160, 64, -44, 2712, -3, -3606, -1, 774, 1, 133, -1, -19, 0, 5, -59, -5, 14, -45, 5, -140, -8, 15, -28, 379, 1, 6, 3, 55, 0, -54, 0, 3, -33, -3, 4, 0, -4, 0, -1, 200, 0, -17, -1, 2, -20, -2, 0, 111, 0, 1, -12, 64, 0, 38, 0, 23, 0, 3, 13, }; static char FAR args[] = { 0, 3, 3, 4, 3, -8, 4, 3, 5, 1, 2, 2, 5, -5, 6, 2, 4, 4, 3, -8, 4, 5, 5, -5, 6, 1, 3, 2, 2, 1, 3, -8, 4, 0, 3, 3, 2, -7, 3, 4, 4, 2, 3, 7, 3,-13, 4, -1, 5, 0, 2, 8, 2,-13, 3, 2, 3, 1, 3, -2, 4, 2, 6, 0, 3, 1, 2, -8, 3, 12, 4, 1, 3, 6, 2,-10, 3, 3, 5, 1, 1, 1, 7, 0, 2, 1, 5, -2, 6, 1, 2, 1, 5, -3, 6, 0, 3, 1, 3, -2, 4, 1, 5, 0, 3, 3, 3, -6, 4, 2, 5, 1, 3, 1, 1, -5, 2, 4, 3, 0, 2, 8, 3,-15, 4, 2, 3, 4, 3, -7, 4, -3, 5, 0, 3, 2, 2, -7, 3, 7, 4, 0, 2, 2, 5, -4, 6, 1, 1, 1, 6, 2, 2, 2, 5, -6, 6, 0, 2, 9, 3,-17, 4, 2, 3, 3, 2, -5, 3, 1, 5, 0, 3, 2, 3, -4, 4, 2, 5, 0, 3, 2, 3, -4, 4, 1, 5, 0, 3, 3, 2, -5, 3, 2, 5, 0, 2, 1, 5, -1, 6, 0, 3, 3, 2, -6, 3, 2, 4, 0, 2, 1, 3, -2, 4, 2, 2, 2, 5, -3, 6, 0, 1, 2, 6, 1, 2, 3, 5, -5, 6, 1, 1, 1, 5, 2, 3, 4, 3, -8, 4, 2, 5, 0, 2, 1, 5, -5, 6, 1, 2, 7, 3,-13, 4, 2, 2, 2, 5, -2, 6, 0, 2, 10, 3,-19, 4, 0, 2, 3, 5, -4, 6, 0, 2, 3, 2, -5, 3, 2, 2, 2, 3, -4, 4, 2, 2, 5, 2, -8, 3, 1, 2, 3, 5, -3, 6, 0, 2, 6, 3,-11, 4, 1, 2, 1, 1, -4, 3, 1, 2, 4, 5, -5, 6, 0, 1, 2, 5, 1, 2, 3, 3, -6, 4, 2, 2, 5, 3, -9, 4, 2, 2, 6, 2,-10, 3, 0, 2, 2, 2, -3, 3, 2, 2, 4, 3, -8, 4, 1, 2, 4, 3, -7, 4, 2, 2, 5, 3,-10, 4, 1, 2, 3, 3, -5, 4, 2, 2, 1, 2, -2, 3, 1, 2, 7, 2,-11, 3, 0, 2, 2, 3, -3, 4, 1, 2, 1, 3, -1, 4, 0, 2, 4, 2, -7, 3, 0, 2, 4, 2, -6, 3, 2, 1, 1, 4, 1, 2, 8, 3,-14, 4, 0, 2, 1, 3, -5, 5, 0, 2, 1, 3, -3, 4, 1, 2, 7, 3,-12, 4, 1, 2, 1, 2, -1, 3, 1, 2, 2, 3, -5, 4, 0, 2, 1, 3, -4, 5, 1, 2, 6, 3,-10, 4, 1, 2, 3, 3, -7, 4, 0, 3, 1, 3, -4, 5, 2, 6, 0, 3, 1, 3, -1, 5, -5, 6, 0, 2, 5, 3, -8, 4, 1, 2, 1, 3, -3, 5, 1, 3, 1, 3, -5, 5, 5, 6, 0, 2, 2, 2, -4, 3, 1, 2, 6, 2, -9, 3, 0, 2, 4, 3, -6, 4, 1, 3, 1, 3, -3, 5, 2, 6, 0, 2, 1, 3, -5, 6, 1, 2, 1, 3, -2, 5, 2, 3, 1, 3, -4, 5, 5, 6, 0, 3, 1, 3, -1, 5, -2, 6, 0, 3, 1, 3, -3, 5, 3, 6, 0, 2, 1, 3, -4, 6, 0, 3, 1, 3, -2, 5, 1, 6, 0, 2, 5, 2, -9, 3, 0, 2, 3, 3, -4, 4, 1, 2, 3, 2, -4, 3, 2, 2, 1, 3, -3, 6, 1, 3, 1, 3, -2, 5, 2, 6, 0, 3, 1, 3, 1, 5, -5, 6, 1, 2, 1, 3, -1, 5, 1, 3, 1, 3, -3, 5, 5, 6, 1, 3, 1, 3, 2, 5, -7, 6, 0, 2, 1, 3, -2, 6, 1, 2, 2, 3, -2, 4, 1, 3, 3, 2, -4, 3, 1, 5, 0, 2, 10, 3,-17, 4, 1, 3, 1, 3, 2, 5, -6, 6, 1, 2, 1, 3, -1, 6, 0, 3, 1, 3, -2, 5, 4, 6, 0, 2, 7, 3,-15, 4, 0, 2, 1, 3, -2, 7, 0, 3, 1, 3, 1, 5, -3, 6, 0, 2, 1, 3, -2, 8, 0, 2, 1, 3, -1, 7, 0, 2, 1, 3, -1, 8, 0, 2, 8, 2,-14, 3, 1, 3, 3, 2, -8, 3, 4, 4, 1, 3, 1, 3, 4, 5,-10, 6, 1, 3, 1, 3, 2, 5, -5, 6, 2, 3, 5, 3, -8, 4, 3, 5, 2, 1, 1, 12, 3, 3, 3, 3, -8, 4, 3, 5, 2, 3, 1, 3, -2, 5, 5, 6, 2, 3, 3, 2, -6, 3, 4, 4, 0, 2, 8, 2,-12, 3, 1, 3, 1, 3, 1, 5, -2, 6, 0, 2, 9, 3,-15, 4, 2, 2, 1, 3, 1, 6, 1, 2, 1, 10, -1, 11, 0, 1, 2, 4, 1, 2, 1, 3, 1, 5, 1, 2, 8, 3,-13, 4, 1, 2, 3, 2, -6, 3, 0, 2, 1, 3, -4, 4, 1, 2, 5, 2, -7, 3, 1, 2, 7, 3,-11, 4, 1, 2, 1, 1, -3, 3, 0, 2, 1, 3, 2, 5, 0, 2, 2, 3, -6, 4, 0, 2, 6, 3, -9, 4, 1, 2, 2, 2, -2, 3, 1, 2, 5, 3, -7, 4, 2, 2, 4, 3, -5, 4, 2, 2, 1, 2, -3, 3, 0, 2, 7, 2,-10, 3, 0, 2, 3, 3, -3, 4, 0, 2, 2, 3, -1, 4, 0, 2, 4, 2, -5, 3, 1, 2, 1, 3, 1, 4, 0, 2, 2, 3, -5, 5, 0, 2, 8, 3,-12, 4, 0, 1, 1, 2, 1, 3, 2, 3, -5, 5, 2, 6, 0, 2, 2, 3, -4, 5, 1, 3, 2, 3, -6, 5, 5, 6, 0, 2, 7, 3,-10, 4, 0, 3, 2, 3, -4, 5, 2, 6, 0, 3, 2, 3, -1, 5, -5, 6, 1, 2, 6, 3, -8, 4, 1, 2, 2, 3, -3, 5, 1, 3, 2, 3, -5, 5, 5, 6, 1, 2, 2, 2, -5, 3, 0, 2, 6, 2, -8, 3, 0, 3, 2, 3, -4, 5, 3, 6, 0, 3, 2, 3, -3, 5, 1, 6, 0, 2, 5, 3, -6, 4, 1, 3, 2, 3, -3, 5, 2, 6, 0, 2, 2, 3, -5, 6, 1, 2, 2, 3, -2, 5, 1, 3, 2, 3, -4, 5, 5, 6, 1, 2, 2, 3, -4, 6, 0, 2, 4, 3, -4, 4, 0, 2, 3, 2, -3, 3, 1, 2, 2, 3, -3, 6, 1, 3, 2, 3, -2, 5, 2, 6, 0, 2, 2, 3, -1, 5, 1, 2, 2, 3, -2, 6, 0, 2, 3, 3, -2, 4, 1, 2, 2, 3, -1, 6, 0, 2, 2, 3, -2, 7, 0, 3, 2, 3, 2, 5, -5, 6, 0, 3, 6, 3, -8, 4, 3, 5, 1, 1, 2, 12, 3, 3, 2, 3, -8, 4, 3, 5, 1, 3, 2, 3, -2, 5, 5, 6, 0, 2, 8, 2,-11, 3, 0, 2, 2, 3, 1, 5, 0, 2, 5, 2, -6, 3, 1, 2, 8, 3,-11, 4, 0, 2, 1, 1, -2, 3, 0, 2, 7, 3, -9, 4, 0, 2, 2, 2, -1, 3, 1, 2, 6, 3, -7, 4, 0, 2, 5, 3, -5, 4, 0, 2, 7, 2, -9, 3, 0, 2, 4, 3, -3, 4, 0, 2, 4, 2, -4, 3, 0, 2, 3, 3, -5, 5, 0, 2, 1, 2, 1, 3, 0, 2, 3, 3, -4, 5, 1, 2, 8, 3,-10, 4, 0, 2, 7, 3, -8, 4, 0, 2, 3, 3, -3, 5, 0, 2, 6, 2, -7, 3, 0, 2, 6, 3, -6, 4, 0, 2, 3, 3, -2, 5, 1, 2, 3, 3, -4, 6, 0, 2, 5, 3, -4, 4, 0, 2, 3, 2, -2, 3, 0, 2, 3, 3, -3, 6, 0, 2, 3, 3, -1, 5, 0, 2, 3, 3, -2, 6, 0, 1, 3, 12, 3, 2, 5, 2, -5, 3, 0, 2, 1, 1, -1, 3, 0, 1, 2, 2, 0, 2, 7, 2, -8, 3, 0, 2, 4, 2, -3, 3, 0, 2, 4, 3, -5, 5, 0, 2, 4, 3, -4, 5, 0, 2, 4, 3, -3, 5, 0, 2, 6, 2, -6, 3, 0, 2, 4, 3, -2, 5, 0, 1, 4, 12, 1, 2, 8, 2, -9, 3, 0, 2, 5, 2, -4, 3, 0, 1, 1, 1, 0, 2, 7, 2, -7, 3, 1, 2, 5, 3, -5, 5, 0, 2, 9, 2,-10, 3, 0, 2, 6, 2, -5, 3, 0, 2, 8, 2, -8, 3, 0, 2, 10, 2,-11, 3, 0, 2, 9, 2, -9, 3, 0, 2, 10, 2,-10, 3, 0, 2, 11, 2,-11, 3, 0, 2, 2, 1, -1, 3, 0, -1 }; struct plantbl ear404 = { 12, { 2, 11, 14, 19, 6, 10, 2, 2, 0, 1, 1, 4, 0, 0, 0, 0, 0, 0,}, 3, args, tabl, tabb, tabr, 1.0001398729597080e+00, 3.6525000000000000e+06, 1.0000000000000000e-04, }; astronomical-almanac-5.6/epsiln.c0000644000175000017500000000535406427377504015320 0ustar jrvjrv/* Obliquity of the ecliptic at Julian date J */ #define WILLIAMS 1 #define SIMON 0 /* J. L. Simon, P. Bretagnon, J. Chapront, M. Chapront-Touze', G. Francou, and J. Laskar, "Numerical Expressions for precession formulae and mean elements for the Moon and the planets," Astronomy and Astrophysics 282, 663-683 (1994) */ /* IAU Coefficients are from: * J. H. Lieske, T. Lederle, W. Fricke, and B. Morando, * "Expressions for the Precession Quantities Based upon the IAU * (1976) System of Astronomical Constants," Astronomy and Astrophysics * 58, 1-16 (1977). * * Before or after 200 years from J2000, the formula used is from: * J. Laskar, "Secular terms of classical planetary theories * using the results of general theory," Astronomy and Astrophysics * 157, 59070 (1986). * * See precess.c and page B18 of the Astronomical Almanac. * */ #if __STDC__ double sin (double); double cos (double); double fabs (double); #else double sin(), cos(), fabs(); #endif /* The results of the program are returned in these * global variables: */ double jdeps = -1.0; /* Date for which obliquity was last computed */ double eps = 0.0; /* The computed obliquity in radians */ double coseps = 0.0; /* Cosine of the obliquity */ double sineps = 0.0; /* Sine of the obliquity */ extern double eps, coseps, sineps, STR; int epsiln(J) double J; /* Julian date input */ { double T; if( J == jdeps ) return(0); T = (J - 2451545.0)/36525.0; #if WILLIAMS /* DE403 values. */ T /= 10.0; eps = ((((((((( 2.45e-10*T + 5.79e-9)*T + 2.787e-7)*T + 7.12e-7)*T - 3.905e-5)*T - 2.4967e-3)*T - 5.138e-3)*T + 1.9989)*T - 0.0175)*T - 468.33960)*T + 84381.406173; #else /* This expansion is from the AA. * Note the official 1976 IAU number is 23d 26' 21.448", but * the JPL numerical integration found 21.4119". */ #if SIMON T /= 10.0; eps = ((((((((( 2.45e-10*T + 5.79e-9)*T + 2.787e-7)*T + 7.12e-7)*T - 3.905e-5)*T - 2.4967e-3)*T - 5.138e-3)*T + 1.9989)*T - 0.0152)*T - 468.0927)*T + 84381.412; #else if( fabs(T) < 2.0 ) eps = ((1.813e-3*T - 5.9e-4)*T - 46.8150)*T + 84381.448; /* This expansion is from Laskar, cited above. * Bretagnon and Simon say, in Planetary Programs and Tables, that it * is accurate to 0.1" over a span of 6000 years. Laskar estimates the * precision to be 0.01" after 1000 years and a few seconds of arc * after 10000 years. */ else { eps = ((((((((( 2.45e-10*T + 5.79e-9)*T + 2.787e-7)*T + 7.12e-7)*T - 3.905e-5)*T - 2.4967e-3)*T - 5.138e-3)*T + 1.99925)*T - 0.0155)*T - 468.093)*T + 84381.448; } #endif /* not SIMON */ #endif /* not WILLIAMS */ eps *= STR; coseps = cos( eps ); sineps = sin( eps ); jdeps = J; return(0); } astronomical-almanac-5.6/fk4fk5.c0000644000175000017500000000502605475273762015117 0ustar jrvjrv /* Convert FK4 B1950.0 catalogue coordinates * to FK5 J2000.0 coordinates. * AA page B58. */ #include "kep.h" /* Factors to eliminate E terms of aberration */ static double A[3] = {-1.62557e-6, -3.1919e-7, - 1.3843e-7}; static double Ad[3] = {1.244e-3, -1.579e-3, -6.60e-4}; /* Transformation matrix for unit direction vector, * and motion vector in arc seconds per century */ static double Mat[36] = { 0.9999256782, -0.0111820611, -4.8579477e-3, 2.42395018e-6, -2.710663e-8, -1.177656e-8, 0.0111820610, 0.9999374784, -2.71765e-5, 2.710663e-8, 2.42397878e-6, -6.587e-11, 4.8579479e-3, -2.71474e-5, 0.9999881997, 1.177656e-8, -6.582e-11, 2.42410173e-6, -5.51e-4, -0.238565, 0.435739, 0.99994704, -0.01118251, -4.85767e-3, 0.238514, -2.667e-3, -8.541e-3, 0.01118251, 0.99995883, -2.718e-5, -0.435623, 0.012254, 2.117e-3, 4.85767e-3, -2.714e-5, 1.00000956 }; int fk4fk5( p, m, el ) double p[], m[]; struct star *el; { double a, b, c; double *u, *v; double R[6]; int i, j; printf( "Converting to FK5 system\n" ); /* Note the direction vector and motion vector * are already supplied by rstar.c. */ a = 0.0; b = 0.0; for( i=0; i<3; i++ ) { m[i] *= RTS; /* motion must be in arc seconds per century */ a += A[i] * p[i]; b += Ad[i] * p[i]; } /* Remove E terms of aberration from FK4 */ for( i=0; i<3; i++ ) { R[i] = p[i] - A[i] + a * p[i]; R[i+3] = m[i] - Ad[i] + b * p[i]; } /* Perform matrix multiplication */ v = &Mat[0]; for( i=0; i<6; i++ ) { a = 0.0; u = &R[0]; for( j=0; j<6; j++ ) a += *u++ * *v++; if( i < 3 ) p[i] = a; else m[i-3] = a; } /* Transform the answers into J2000 catalogue entries * in radian measure. */ b = p[0]*p[0] + p[1]*p[1]; a = b + p[2]*p[2]; c = a; a = sqrt(a); el->ra = zatan2( p[0], p[1] ); el->dec = asin( p[2]/a ); /* Note motion converted back to radians per (Julian) century */ el->mura = (p[0]*m[1] - p[1]*m[0])/(RTS*b); el->mudec = (m[2]*b - p[2]*(p[0]*m[0] + p[1]*m[1]) )/(RTS*c*sqrt(b)); if( el->px > 0.0 ) { c = 0.0; for( i=0; i<3; i++ ) c += p[i] * m[i]; /* divide by RTS to deconvert m (and therefore c) * from arc seconds back to radians */ el->v = c/(21.094952663 * el->px * RTS * a); } el->px = el->px/a; /* a is dimensionless */ el->epoch = J2000; #if DEBUG /* Display the computed J2000 catalogue entries */ hms( el->ra ); dms( el->dec ); u = (double *)&el->px; for( i=0; i<3; i++ ) printf( " %.4f ", *u++ * RTS ); printf( "\n" ); #endif return(0); } astronomical-almanac-5.6/gplan.c0000666000175000017500000004657007761252574015141 0ustar jrvjrv/* gplan.c Routines to chew through tables of perturbations. */ #include "plantbl.h" #if __STDC__ extern int epsiln ( double J ); double cos (double); double sin (double); double floor (double); double fabs (double); void mean_elements (double); static int sscc (int, double, int); double g1plan (double, struct plantbl *); int g2plan (double, struct plantbl *, double *); int g3plan (double, struct plantbl *, double *, int); #else int epsiln(); double cos (), sin (), floor (), fabs (); static int sscc (); #endif #define mods3600(x) ((x) - 1.296e6 * floor ((x)/1.296e6)) static double J2000 = 2451545.0; #if 0 /* Conversion factors between degrees and radians */ static double DTR = 1.7453292519943295769e-2; static double RTD = 5.7295779513082320877e1; static double RTS = 2.0626480624709635516e5; /* arc seconds per radian */ #endif static double STR = 4.8481368110953599359e-6; /* radians per arc second */ /* From Simon et al (1994) */ static double freqs[] = { /* Arc sec per 10000 Julian years. */ 53810162868.8982, 21066413643.3548, 12959774228.3429, 6890507749.3988, 1092566037.7991, 439960985.5372, 154248119.3933, 78655032.0744, 52272245.1795 }; static double phases[] = { /* Arc sec. */ 252.25090552 * 3600., 181.97980085 * 3600., 100.46645683 * 3600., 355.43299958 * 3600., 34.35151874 * 3600., 50.07744430 * 3600., 314.05500511 * 3600., 304.34866548 * 3600., 860492.1546, }; static double ss[NARGS][31]; static double cc[NARGS][31]; int gplan (J, plan, pobj) double J; struct plantbl *plan; double pobj[]; { register double su, cu, sv, cv, T; double t, sl, sb, sr; int i, j, k, m, n, k1, ip, np, nt; #ifdef _MSC_VER char FAR *p; double FAR *pl; double FAR *pb; double FAR *pr; #else /* On some systems such as Silicon Graphics, char is unsigned by default. */ #ifdef vax /* VAX CC rejects "signed char." */ char *p; #else #ifdef __STDC__ signed char *p; #else char *p; #endif #endif double *pl, *pb, *pr; #endif T = (J - J2000) / plan->timescale; n = plan->maxargs; /* Calculate sin( i*MM ), etc. for needed multiple angles. */ for (i = 0; i < n; i++) { if ((j = plan->max_harmonic[i]) > 0) { sr = (mods3600 (freqs[i] * T) + phases[i]) * STR; sscc (i, sr, j); } } /* Point to start of table of arguments. */ p = plan->arg_tbl; /* Point to tabulated cosine and sine amplitudes. */ #ifdef _MSC_VER pl = (double FAR *) plan->lon_tbl; pb = (double FAR *) plan->lat_tbl; pr = (double FAR *) plan->rad_tbl; #else pl = (double *) plan->lon_tbl; pb = (double *) plan->lat_tbl; pr = (double *) plan->rad_tbl; #endif sl = 0.0; sb = 0.0; sr = 0.0; for (;;) { /* argument of sine and cosine */ /* Number of periodic arguments. */ np = *p++; if (np < 0) break; if (np == 0) { /* It is a polynomial term. */ nt = *p++; /* Longitude polynomial. */ cu = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; } sl += mods3600 (cu); /* Latitude polynomial. */ cu = *pb++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pb++; } sb += cu; /* Radius polynomial. */ cu = *pr++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pr++; } sr += cu; continue; } k1 = 0; cv = 0.0; sv = 0.0; for (ip = 0; ip < np; ip++) { /* What harmonic. */ j = *p++; /* Which planet. */ m = *p++ - 1; if (j) { k = j; if (j < 0) k = -k; k -= 1; su = ss[m][k]; /* sin(k*angle) */ if (j < 0) su = -su; cu = cc[m][k]; if (k1 == 0) { /* set first angle */ sv = su; cv = cu; k1 = 1; } else { /* combine angles */ t = su * cv + cu * sv; cv = cu * cv - su * sv; sv = t; } } } /* Highest power of T. */ nt = *p++; /* Longitude. */ cu = *pl++; su = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; su = su * T + *pl++; } sl += cu * cv + su * sv; /* Latitiude. */ cu = *pb++; su = *pb++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pb++; su = su * T + *pb++; } sb += cu * cv + su * sv; /* Radius. */ cu = *pr++; su = *pr++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pr++; su = su * T + *pr++; } sr += cu * cv + su * sv; } pobj[0] = STR * sl; pobj[1] = STR * sb; pobj[2] = STR * plan->distance * sr + plan->distance; return (0); } /* Prepare lookup table of sin and cos ( i*Lj ) * for required multiple angles */ static int sscc (k, arg, n) int k; double arg; int n; { double cu, su, cv, sv, s; int i; su = sin (arg); cu = cos (arg); ss[k][0] = su; /* sin(L) */ cc[k][0] = cu; /* cos(L) */ sv = 2.0 * su * cu; cv = cu * cu - su * su; ss[k][1] = sv; /* sin(2L) */ cc[k][1] = cv; for (i = 2; i < n; i++) { s = su * cv + cu * sv; cv = cu * cv - su * sv; sv = s; ss[k][i] = sv; /* sin( i+1 L ) */ cc[k][i] = cv; } return (0); } /* Compute mean elements at Julian date J. */ static double Args[NARGS]; static double LP_equinox; static double NF_arcsec; static double Ea_arcsec; static double pA_precession; void mean_elements (J) double J; { double x, T, T2; /* Time variables. T is in Julian centuries. */ T = (J - 2451545.0) / 36525.0; T2 = T*T; /* Mean longitudes of planets (Simon et al, 1994) .047" subtracted from constant term for offset to DE403 origin. */ /* Mercury */ x = mods3600( 538101628.6889819 * T + 908103.213 ); x += (6.39e-6 * T - 0.0192789) * T2; Args[0] = STR * x; /* Venus */ x = mods3600( 210664136.4335482 * T + 655127.236 ); x += (-6.27e-6 * T + 0.0059381) * T2; Args[1] = STR * x; /* Earth */ x = mods3600( 129597742.283429 * T + 361679.198 ); x += (-5.23e-6 * T - 2.04411e-2 ) * T2; Ea_arcsec = x; Args[2] = STR * x; /* Mars */ x = mods3600( 68905077.493988 * T + 1279558.751 ); x += (-1.043e-5 * T + 0.0094264) * T2; Args[3] = STR * x; /* Jupiter */ x = mods3600( 10925660.377991 * T + 123665.420 ); x += ((((-3.4e-10 * T + 5.91e-8) * T + 4.667e-6) * T + 5.706e-5) * T - 3.060378e-1)*T2; Args[4] = STR * x; /* Saturn */ x = mods3600( 4399609.855372 * T + 180278.752 ); x += (((( 8.3e-10 * T - 1.452e-7) * T - 1.1484e-5) * T - 1.6618e-4) * T + 7.561614E-1)*T2; Args[5] = STR * x; /* Uranus */ x = mods3600( 1542481.193933 * T + 1130597.971 ) + (0.00002156*T - 0.0175083)*T2; Args[6] = STR * x; /* Neptune */ x = mods3600( 786550.320744 * T + 1095655.149 ) + (-0.00000895*T + 0.0021103)*T2; Args[7] = STR * x; /* Copied from cmoon.c, DE404 version. */ /* Mean elongation of moon = D */ x = mods3600( 1.6029616009939659e+09 * T + 1.0722612202445078e+06 ); x += (((((-3.207663637426e-013 * T + 2.555243317839e-011) * T + 2.560078201452e-009) * T - 3.702060118571e-005) * T + 6.9492746836058421e-03) * T /* D, t^3 */ - 6.7352202374457519e+00) * T2; /* D, t^2 */ Args[9] = STR * x; /* Mean distance of moon from its ascending node = F */ x = mods3600( 1.7395272628437717e+09 * T + 3.3577951412884740e+05 ); x += ((((( 4.474984866301e-013 * T + 4.189032191814e-011) * T - 2.790392351314e-009) * T - 2.165750777942e-006) * T - 7.5311878482337989e-04) * T /* F, t^3 */ - 1.3117809789650071e+01) * T2; /* F, t^2 */ NF_arcsec = x; Args[10] = STR * x; /* Mean anomaly of sun = l' (J. Laskar) */ x = mods3600(1.2959658102304320e+08 * T + 1.2871027407441526e+06); x += (((((((( 1.62e-20 * T - 1.0390e-17 ) * T - 3.83508e-15 ) * T + 4.237343e-13 ) * T + 8.8555011e-11 ) * T - 4.77258489e-8 ) * T - 1.1297037031e-5 ) * T + 8.7473717367324703e-05) * T - 5.5281306421783094e-01) * T2; Args[11] = STR * x; /* Mean anomaly of moon = l */ x = mods3600( 1.7179159228846793e+09 * T + 4.8586817465825332e+05 ); x += (((((-1.755312760154e-012 * T + 3.452144225877e-011) * T - 2.506365935364e-008) * T - 2.536291235258e-004) * T + 5.2099641302735818e-02) * T /* l, t^3 */ + 3.1501359071894147e+01) * T2; /* l, t^2 */ Args[12] = STR * x; /* Mean longitude of moon, re mean ecliptic and equinox of date = L */ x = mods3600( 1.7325643720442266e+09 * T + 7.8593980921052420e+05); x += ((((( 7.200592540556e-014 * T + 2.235210987108e-010) * T - 1.024222633731e-008) * T - 6.073960534117e-005) * T + 6.9017248528380490e-03) * T /* L, t^3 */ - 5.6550460027471399e+00) * T2; /* L, t^2 */ LP_equinox = x; Args[13] = STR * x; /* Precession of the equinox */ x = ((((((((( -8.66e-20*T - 4.759e-17)*T + 2.424e-15)*T + 1.3095e-12)*T + 1.7451e-10)*T - 1.8055e-8)*T - 0.0000235316)*T + 0.000076)*T + 1.105414)*T + 5028.791959)*T; /* Moon's longitude re fixed J2000 equinox. */ /* Args[13] -= x; */ pA_precession = STR * x; /* Free librations. */ /* longitudinal libration 2.891725 years */ x = mods3600( 4.48175409e7 * T + 8.060457e5 ); Args[14] = STR * x; /* libration P, 24.2 years */ x = mods3600( 5.36486787e6 * T - 391702.8 ); Args[15] = STR * x; #if 0 Args[16] = 0.0; #endif /* libration W, 74.7 years. */ x = mods3600( 1.73573e6 * T ); Args[17] = STR * x; } /* Generic program to accumulate sum of trigonometric series in three variables (e.g., longitude, latitude, radius) of the same list of arguments. */ int g3plan (J, plan, pobj, objnum) double J; struct plantbl *plan; double pobj[]; int objnum; { int i, j, k, m, n, k1, ip, np, nt; #ifdef _MSC_VER char FAR *p; long FAR *pl; long FAR *pb; long FAR *pr; #else /* On some systems such as Silicon Graphics, char is unsigned by default. */ #ifdef vax /* VAX CC rejects "signed char." */ char *p; #else #ifdef __STDC__ signed char *p; #else char *p; #endif #endif long *pl, *pb, *pr; #endif double su, cu, sv, cv; double T, t, sl, sb, sr; mean_elements (J); #if 0 /* For librations, moon's longitude is sidereal. */ if (flag) Args[13] -= pA_precession; #endif T = (J - J2000) / plan->timescale; n = plan->maxargs; /* Calculate sin( i*MM ), etc. for needed multiple angles. */ for (i = 0; i < n; i++) { if ((j = plan->max_harmonic[i]) > 0) { sscc (i, Args[i], j); } } /* Point to start of table of arguments. */ p = plan->arg_tbl; /* Point to tabulated cosine and sine amplitudes. */ #ifdef _MSC_VER pl = (long FAR *) plan->lon_tbl; pb = (long FAR *) plan->lat_tbl; pr = (long FAR *) plan->rad_tbl; #else pl = (long *) plan->lon_tbl; pb = (long *) plan->lat_tbl; pr = (long *) plan->rad_tbl; #endif sl = 0.0; sb = 0.0; sr = 0.0; for (;;) { /* argument of sine and cosine */ /* Number of periodic arguments. */ np = *p++; if (np < 0) break; if (np == 0) { /* It is a polynomial term. */ nt = *p++; /* "Longitude" polynomial (phi). */ cu = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; } /* sl += mods3600 (cu); */ sl += cu; /* "Latitude" polynomial (theta). */ cu = *pb++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pb++; } sb += cu; /* Radius polynomial (psi). */ cu = *pr++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pr++; } sr += cu; continue; } k1 = 0; cv = 0.0; sv = 0.0; for (ip = 0; ip < np; ip++) { /* What harmonic. */ j = *p++; /* Which planet. */ m = *p++ - 1; if (j) { /* k = abs (j); */ if (j < 0) k = -j; else k = j; k -= 1; su = ss[m][k]; /* sin(k*angle) */ if (j < 0) su = -su; cu = cc[m][k]; if (k1 == 0) { /* set first angle */ sv = su; cv = cu; k1 = 1; } else { /* combine angles */ t = su * cv + cu * sv; cv = cu * cv - su * sv; sv = t; } } } /* Highest power of T. */ nt = *p++; /* Longitude. */ cu = *pl++; su = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; su = su * T + *pl++; } sl += cu * cv + su * sv; /* Latitiude. */ cu = *pb++; su = *pb++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pb++; su = su * T + *pb++; } sb += cu * cv + su * sv; /* Radius. */ cu = *pr++; su = *pr++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pr++; su = su * T + *pr++; } sr += cu * cv + su * sv; } t = plan->trunclvl; pobj[0] = Args[objnum - 1] + STR * t * sl; pobj[1] = STR * t * sb; pobj[2] = plan->distance * (1.0 + STR * t * sr); return (0); } /* Generic program to accumulate sum of trigonometric series in two variables (e.g., longitude, radius) of the same list of arguments. */ int g2plan (J, plan, pobj) double J; struct plantbl *plan; double pobj[]; { int i, j, k, m, n, k1, ip, np, nt; #if _MSC_VER char FAR *p; long FAR *pl; long FAR *pr; #else /* On some systems such as Silicon Graphics, char is unsigned by default. */ #ifdef vax /* VAX CC rejects "signed char." */ char *p; #else #ifdef __STDC__ signed char *p; #else char *p; #endif #endif long *pl, *pr; #endif double su, cu, sv, cv; double T, t, sl, sr; mean_elements (J); #if 0 /* For librations, moon's longitude is sidereal. */ if (flag) Args[13] -= pA_precession; #endif T = (J - J2000) / plan->timescale; n = plan->maxargs; /* Calculate sin( i*MM ), etc. for needed multiple angles. */ for (i = 0; i < n; i++) { if ((j = plan->max_harmonic[i]) > 0) { sscc (i, Args[i], j); } } /* Point to start of table of arguments. */ p = plan->arg_tbl; /* Point to tabulated cosine and sine amplitudes. */ #ifdef _MSC_VER pl = (long FAR *) plan->lon_tbl; pr = (long FAR *) plan->rad_tbl; #else pl = (long *) plan->lon_tbl; pr = (long *) plan->rad_tbl; #endif sl = 0.0; sr = 0.0; for (;;) { /* argument of sine and cosine */ /* Number of periodic arguments. */ np = *p++; if (np < 0) break; if (np == 0) { /* It is a polynomial term. */ nt = *p++; /* Longitude polynomial. */ cu = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; } /* sl += mods3600 (cu); */ sl += cu; /* Radius polynomial. */ cu = *pr++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pr++; } sr += cu; continue; } k1 = 0; cv = 0.0; sv = 0.0; for (ip = 0; ip < np; ip++) { /* What harmonic. */ j = *p++; /* Which planet. */ m = *p++ - 1; if (j) { /* k = abs (j); */ if (j < 0) k = -j; else k = j; k -= 1; su = ss[m][k]; /* sin(k*angle) */ if (j < 0) su = -su; cu = cc[m][k]; if (k1 == 0) { /* set first angle */ sv = su; cv = cu; k1 = 1; } else { /* combine angles */ t = su * cv + cu * sv; cv = cu * cv - su * sv; sv = t; } } } /* Highest power of T. */ nt = *p++; /* Longitude. */ cu = *pl++; su = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; su = su * T + *pl++; } sl += cu * cv + su * sv; /* Radius. */ cu = *pr++; su = *pr++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pr++; su = su * T + *pr++; } sr += cu * cv + su * sv; } t = plan->trunclvl; pobj[0] = t * sl; pobj[2] = t * sr; return (0); } /* Generic program to accumulate sum of trigonometric series in one variable. */ double g1plan (J, plan) double J; struct plantbl *plan; { int i, j, k, m, k1, ip, np, nt; #ifdef _MSC_VER char FAR *p; long FAR *pl; #else /* On some systems such as Silicon Graphics, char is unsigned by default. */ #ifdef vax /* VAX CC rejects "signed char." */ char *p; #else #ifdef __STDC__ signed char *p; #else char *p; #endif #endif long *pl; #endif double su, cu, sv, cv; double T, t, sl; T = (J - J2000) / plan->timescale; mean_elements (J); /* Calculate sin( i*MM ), etc. for needed multiple angles. */ for (i = 0; i < NARGS; i++) { if ((j = plan->max_harmonic[i]) > 0) { sscc (i, Args[i], j); } } /* Point to start of table of arguments. */ p = plan->arg_tbl; /* Point to tabulated cosine and sine amplitudes. */ #ifdef _MSC_VER pl = (long FAR *) plan->lon_tbl; #else pl = (long *) plan->lon_tbl; #endif sl = 0.0; for (;;) { /* argument of sine and cosine */ /* Number of periodic arguments. */ np = *p++; if (np < 0) break; if (np == 0) { /* It is a polynomial term. */ nt = *p++; cu = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; } /* sl += mods3600 (cu); */ sl += cu; continue; } k1 = 0; cv = 0.0; sv = 0.0; for (ip = 0; ip < np; ip++) { /* What harmonic. */ j = *p++; /* Which planet. */ m = *p++ - 1; if (j) { /* k = abs (j); */ if (j < 0) k = -j; else k = j; k -= 1; su = ss[m][k]; /* sin(k*angle) */ if (j < 0) su = -su; cu = cc[m][k]; if (k1 == 0) { /* set first angle */ sv = su; cv = cu; k1 = 1; } else { /* combine angles */ t = su * cv + cu * sv; cv = cu * cv - su * sv; sv = t; } } } /* Highest power of T. */ nt = *p++; /* Cosine and sine coefficients. */ cu = *pl++; su = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; su = su * T + *pl++; } sl += cu * cv + su * sv; } return (plan->trunclvl * sl); } /* Compute geocentric moon. */ extern struct plantbl moonlr, moonlat; extern double coseps, sineps; int gmoon (J, rect, pol) double J; double rect[], pol[]; { double x, cosB, sinB, cosL, sinL; g2plan (J, &moonlr, pol); x = pol[0]; x += LP_equinox; if (x < -6.48e5) x += 1.296e6; if (x > 6.48e5) x -= 1.296e6; pol[0] = STR * x; x = g1plan (J, &moonlat); pol[1] = STR * x; x = (1.0 + STR * pol[2]) * moonlr.distance; pol[2] = x; /* Convert ecliptic polar to equatorial rectangular coordinates. */ epsiln(J); cosB = cos(pol[1]); sinB = sin(pol[1]); cosL = cos(pol[0]); sinL = sin(pol[0]); rect[0] = cosB * cosL * x; rect[1] = (coseps * cosB * sinL - sineps * sinB) * x; rect[2] = (sineps * cosB * sinL + coseps * sinB) * x; return 0; } astronomical-almanac-5.6/jup404.c0000644000175000017500000012000506253703412015027 0ustar jrvjrv /* First date in file = 625296.50 Number of records = 16731.0 Days per record = 131.0 Julian Years Lon Lat Rad -3000.0 to -2499.7: 0.64 0.09 0.40 -2499.7 to -1999.7: 0.70 0.09 0.45 -1999.7 to -1499.7: 0.44 0.08 0.32 -1499.7 to -999.8: 0.42 0.07 0.32 -999.8 to -499.8: 0.55 0.06 0.34 -499.8 to 0.2: 0.43 0.06 0.31 0.2 to 500.2: 0.56 0.07 0.32 500.2 to 1000.1: 0.49 0.06 0.41 1000.1 to 1500.1: 0.48 0.06 0.38 1500.1 to 2000.1: 0.56 0.06 0.38 2000.1 to 2500.0: 0.63 0.08 0.33 2500.0 to 3000.0: 0.70 0.09 0.36 3000.0 to 3000.4: 0.526 0.023 0.190 */ #include "plantbl.h" static double FAR tabl[] = { 153429.13855, 130818.16897, 18120.42948, -8463.12663, -5058.91447, 1092566021.02148, 123671.25097, -5.43364, 12.06012, 30428.31077, -74667.61443, 46848.16236, -66373.44474, 24312.54264, -26045.64766, 18353.92564, -4022.13679, 4037.97936, 10059.82468, -4622.55896, 1383.21617, -187.25468, -1171.66028, -0.00062, -0.21713, -1198.83945, 1178.62445, -1492.07393, 153.07155, -245.57966, -391.94010, 82.26400, -40.92104, 3.72520, 10.57242, -0.04720, -0.04448, -0.04329, -0.06043, -0.03905, 0.15712, -0.05644, -0.00129, -0.00342, 0.02473, 0.00434, -0.01862, 0.00431, -0.03993, -0.03159, -0.15982, -0.09928, 0.04430, -0.00357, 0.31312, -0.01346, -0.00180, -0.09107, 0.01215, 0.02485, 0.01024, 27.29869, 2.70896, 12.91956, 19.21726, -6.91384, 5.12954, -1.07533, -1.71691, -0.01423, 0.03121, -32.48652, -26.13483, 46.78162, -62.02701, 94.96809, 81.73791, -20.13673, 131.05065, -0.00798, 0.01786, 13.99591, 16.87756, -8.51726, 21.59490, -14.28833, -9.45530, 7.73954, -6.53078, 0.03175, -0.04295, 3.06742, -0.11838, 1.03630, 0.94004, -0.14085, 0.14434, -0.03363, 0.00993, -0.00007, -0.02748, 26.01507, -7.37178, 16.96955, 6.24203, -0.40481, 3.72456, -0.53597, -0.14938, 37.82081, 26.15887, -2.82115, 78.26478, -63.39155, -5.52419, 13.11482, -43.54977, 15.64940, 6.67505, -10.25616, -7.39672, -12.37441, 12.24417, 8.54922, 9.68451, -0.03658, -0.00963, 1.65523, 0.43093, 0.32023, 0.71365, -0.12226, 0.03759, 0.10388, 0.47212, -0.02791, 0.09929, -0.04116, -0.03125, -0.10240, -0.23199, -0.03524, -0.13625, 7.52726, 6.86314, 0.01239, 13.46530, -5.22256, 1.56116, -0.15925, -1.19571, 3.26302, 0.06097, -0.14444, -0.20301, 1.93822, -80.12566, 0.98665, -7.52986, 3.86703, -2.43028, 0.64180, 0.78351, 0.00190, -0.00633, -0.00321, -0.04403, 0.19018, 0.14335, 0.10315, 0.53154, -0.00062, -0.00464, -0.00109, 0.02150, 1.19993, 47.21638, -24.56067, 25.06332, -7.50751, -6.36250, 1.39443, -1.23806, 0.04951, 0.02176, 0.02802, -0.01665, -0.10698, -0.13635, 73.54797, -52.34968, 74.98754, 86.56283, -69.01463, 44.56866, 0.04387, -0.05925, -0.03732, -0.03264, 0.00967, 0.02143, 10.59429, 26.48226, 34.03470, 3.96160, 4.15919, -20.22616, -5.25903, -3.40177, 0.05111, -0.06788, 0.06497, 1.21024, -0.29607, 0.49991, -0.06055, -0.03464, 0.02950, 0.16429, 0.00722, -0.90806, -0.02161, 0.00902, -0.00261, 0.00077, 0.00434, -0.29231, 0.00456, 0.04781, 1.33214, -2.62015, 0.79761, -0.81850, 0.06371, 0.00119, 0.03049, -0.03553, 0.02373, -0.01411, -189.06132, -169.17940, 5.27464, -227.72664, 83.72511, -12.04794, 0.23965, 23.75496, -3.43532, -0.34276, -1.35880, 0.45053, -0.34298, -0.11441, -0.16328, 0.07423, 481.48150, 79.82461, 453.82764, 941.94205, -635.83924, 397.29087, -81.54066, -417.22420, 149.91822, 10.53490, -0.13210, 0.36740, 0.33777, 0.15893, -2562.04968, 2442.77844, -2602.66709, 2838.87348, 723.50715, -1284.58208, -4557.23362, -4514.61100, -8960.81693, 4663.55087, -4947.61530, 19377.42027, -0.16786, -0.19514, 0.32100, 0.91502, 4.96600, -1.11836, 307.38057, 175.14618, 16.02093, 444.42376, -219.80047, 62.39286, -18.14266, -52.23698, 0.02111, 0.00469, -20.97409, -34.48296, -2.03906, -27.07560, 3.73818, -3.00599, 0.24112, 0.41430, -0.03552, 0.00394, -0.00217, 0.02307, 0.03686, 0.00510, 34.46537, 10.23293, 9.99520, 28.88781, -11.31210, 3.52646, -0.48062, -2.93641, -0.00987, -0.05310, -38.39539, 0.04568, -31.73684, -1.83151, -24.97332, -1.71244, 0.33498, 7.03899, -4.15247, 200.43434, -0.00800, 0.04462, 37.83113, -13.40661, 9.49434, -35.41588, -14.72767, -3.84674, -0.31412, 3.97734, 0.02908, -0.00353, 1.89935, -14.31774, 7.77051, -7.08945, 1.90915, 1.78908, -0.41445, 0.30506, -14.43121, 7.30707, -11.97842, -17.64121, 13.38962, -7.20982, -5.23362, 2.11364, -0.45605, 4.08835, 1.42683, 0.24838, -0.00605, 0.03199, -0.17609, -1.43091, 0.32444, -0.51371, 0.06182, 0.03733, 0.00696, -0.13438, 4.67581, 4.42379, -1.52602, 4.20659, -1.31757, -0.72910, 1.29012, 0.97780, 2.25895, -0.85306, 1.74120, -5.09507, 0.28107, -0.05040, 0.05508, -0.06349, -0.00061, 0.48249, -2.37749, 1.78180, -1.67423, -0.35618, 0.05789, -0.35287, 0.56252, -0.66584, 0.61979, 4.84016, -4.64462, 17.48002, 0.40982, -4.19214, -1.55252, -1.87505, -0.31070, 0.15554, -0.00034, 0.11102, 0.01116, -0.04166, 9.27689, -4.32090, 6.84888, 1.78741, -0.09306, 1.68391, -0.27482, -0.04197, -7.83068, 37.71086, -37.53346, 7.18559, 0.74427, -24.29751, 10.87837, 1.35503, 0.00998, -0.03395, -133.52206, -150.11329, 4.27494, -173.79469, 150.87961, -356.29181, -330.17873, -426.29809, -607.98186, 126.35464, -299.69623, 556.41055, -0.00342, 0.04411, 44.65946, 42.07312, 85.71397, 5.95130, 24.98064, -41.20026, -14.05970, -10.46101, -2.24038, 2.89211, 0.06175, 0.08128, 0.00705, 0.01939, -1.08361, -0.08213, -0.20868, -0.36268, -4.96489, -2.05966, -6.16586, 3.65514, -3.12555, 12.20821, -1.11236, -1.73772, -1.34045, -0.22774, -0.08639, 0.27355, -0.07700, 1.06260, -0.46013, 0.31916, -0.04969, -0.09488, -1.54000, 0.04949, -0.07616, -0.95933, 0.93303, 3.43183, -0.82917, -0.82042, -0.68158, 0.17083, 0.06942, 0.17491, -0.02699, -0.01051, 0.00657, 0.03063, -0.52595, 0.84035, -0.88323, -0.70188, 0.60928, -0.48179, 0.38290, 0.04482, 0.26456, -0.32369, -0.00615, 0.03218, -0.32943, 0.14675, -0.10782, -0.09036, -0.58003, 0.72888, -0.46654, 1.17977, 0.00222, 0.01541, -0.19226, -0.07770, -0.01829, -0.05070, -1.75385, -1.32969, 0.52361, -1.36036, 0.67222, 1.34612, 6.96841, -29.24025, -23.76900, -39.91647, -41.01215, -2.23638, -18.81024, 20.77095, -0.68592, -2.26212, -1.14065, -0.76493, -0.18044, 0.15193, -0.20669, -0.44387, 0.25697, -0.17880, -0.53097, 0.43181, -0.35187, 0.71934, -0.14962, 0.09220, -0.05031, -0.03924, 0.06571, 0.29487, 0.05170, 0.36847, 0.02754, -0.00411, -0.08313, -0.16907, 0.10273, -0.07315, -0.02312, 0.04912, -0.01062, -0.02713, 0.03806, 0.13401, -1.79865, -2.04540, -2.69965, -0.65706, -1.17916, 0.79292, 0.02415, 0.14001, -0.01767, 0.04209, 0.05212, -0.01795, 0.01285, 0.04028, 0.01075, 0.05533, 0.02323, -0.00864, -0.04691, 0.03128, 0.00548, 0.02254, 0.00011, 0.12033, }; static double FAR tabb[] = { 548.59659, 594.29629, 219.97664, 59.71822, 23.62157, 40.77732, 227.07380, 0.00293, -0.00745, -307.33226, -347.92807, -309.49383, -428.18929, -96.59506, -191.36254, 2.11014, -34.44145, 2.23085, 6.77110, -5.43468, -0.28391, 0.28355, -1.81690, 0.00036, 0.00078, -1.83259, 1.17464, -2.66976, -0.92339, -0.23645, -1.20623, 0.25248, -0.04958, 0.00064, 0.03599, -0.00079, 0.00004, -0.00005, -0.00010, -0.00024, 0.00051, 0.00001, 0.00005, 0.00015, 0.00010, 0.00017, -0.00004, 0.00113, -0.00011, 0.00021, 0.00087, 0.00120, -0.00114, -0.00881, -0.00020, -0.00005, 0.00009, 0.00005, 0.00007, 0.00002, -0.00033, -0.00554, -0.32274, 0.23695, -0.11184, 0.04050, 0.09929, -0.02189, 0.00305, -0.00142, -0.00055, 0.66623, 0.34590, 0.74913, -0.23202, -1.08316, -1.40407, 1.72287, -0.07604, 0.00024, 0.00004, 0.03592, 0.91143, -1.11848, -0.17473, 0.91500, -1.34912, 0.85229, 0.69029, -0.00019, 0.00075, 0.03615, 0.30768, -0.08733, 0.12016, -0.01716, -0.01138, 0.00021, 0.00004, 0.00531, 0.00098, -0.14354, -0.02364, -0.05559, -0.07561, 0.01419, -0.01141, 0.00014, 0.00218, -0.36564, 0.13498, -0.13283, -0.11462, 0.23741, 0.14960, -0.23173, 0.25148, 0.00763, -0.05987, -0.00857, 0.20312, -0.29399, 0.34831, -1.33166, -0.46808, -0.00027, 0.00046, 0.15729, 0.01367, 0.04093, 0.07447, -0.01598, 0.00785, 0.00583, 0.00324, 0.00053, 0.00160, -0.00030, 0.00043, -0.00208, 0.00334, -0.00316, 0.00136, 0.23086, 0.05711, 0.19558, 0.05897, 0.01070, 0.05021, -0.00818, -0.02242, 0.06301, -0.26483, 0.66177, 0.02125, 0.13477, 0.19376, -0.36520, 0.83588, -0.69848, -0.00877, 0.01626, -0.23878, -0.00373, 0.00044, 0.00008, -0.00004, -0.00374, -0.00283, 0.01104, -0.00619, 0.00004, 0.00015, 0.00026, 0.00013, 0.04630, -0.11815, 0.00773, 0.03796, -0.05172, 0.00149, 0.00444, -0.01493, -0.00064, -0.00044, -0.00033, 0.00002, -0.00012, 0.00284, -0.15622, -0.92158, -0.82690, -1.52101, -0.55934, 0.69375, -0.00171, 0.00031, 0.00129, -0.00013, -0.00024, -0.00083, 0.66101, -0.21764, -0.43967, 0.30157, 0.53389, 1.59141, 1.94286, 0.14146, -0.00064, -0.00006, 0.21850, -0.02912, 0.08594, 0.08734, -0.01678, 0.01629, 0.00133, 0.00562, 0.00128, -0.00025, -0.00005, 0.00027, 0.00032, 0.00001, 0.00037, 0.00042, 0.00070, 0.00003, 0.00275, -0.13096, 0.02329, -0.05582, 0.00405, -0.00251, 0.01316, -0.01165, 0.00279, -0.00374, -39.62783, 20.91467, -28.97236, 3.77560, -3.30029, 0.11472, -0.48216, 1.05814, -0.21607, -0.03055, -0.64162, -0.57355, -0.05861, -0.18592, -0.12207, -0.06279, -38.55325, -125.74207, -47.22357, 41.75842, -119.38841, 18.88515, -11.04830, -50.98851, 16.64895, 1.76553, 0.09474, 0.03714, 0.02593, 0.07967, -1187.61854, -1094.91786, -1011.21939, -1102.25998, -575.88672, -107.84860, -890.58889, -807.06589, 971.78461, -1287.24560, -4601.44669, -849.54329, -0.00904, 0.06233, -0.19456, -0.05521, -0.36915, 1.15363, 32.64763, -85.19705, 114.34437, -13.37747, 15.92865, 55.84857, -13.10538, 3.07629, -0.00327, 0.00104, -7.81035, 6.19960, -6.36096, 1.00493, -0.66971, -0.84572, 0.09943, -0.04583, 0.00200, -0.00032, -0.00265, 0.00047, -0.00053, 0.00046, -0.24396, 0.20664, -0.30820, -0.04917, 0.06184, -0.12642, 0.03053, 0.05054, 0.00035, 0.00012, 0.42063, -0.58254, 0.90517, -0.66276, 0.64765, 0.39338, -1.40645, 0.33017, -1.43377, -0.67089, -0.00045, -0.00036, 0.23690, 0.07185, 0.28386, -0.04397, 0.02836, -0.13082, -0.00978, 0.00108, 0.00046, 0.00083, -0.01665, 0.32499, -0.09980, 0.18611, -0.02561, 0.00239, -0.00084, -0.00110, 0.46854, -0.35113, 0.69908, 0.53244, 0.12875, 0.01115, 0.13930, 0.02747, -0.10587, -0.17759, -0.26850, 0.04400, 0.00010, -0.00015, 0.00164, -0.01308, 0.00488, -0.01046, 0.00170, 0.00024, 0.00084, 0.00014, -0.08481, -0.02547, -0.02290, -0.02281, -0.03946, -0.02810, 0.01298, 0.08658, 0.05575, -0.01081, 1.09695, 0.35441, -0.03127, 0.07946, 0.01245, 0.02578, -0.00524, -0.00027, 0.08217, -0.31742, 0.15273, -0.07804, 0.01197, 0.03053, 0.81596, 0.38640, -0.89777, 0.59499, -0.39581, -0.87375, 0.02096, 0.49772, 0.29986, 0.24210, 0.14038, -0.03016, -0.00208, 0.00045, 0.01024, 0.00114, 1.23010, 1.75663, -0.12741, 1.44996, -0.31607, 0.03151, 0.00259, -0.04741, -11.57091, 8.00331, -9.24028, -6.36906, 4.71248, -2.43695, 0.38630, 1.90625, 0.01401, 0.00114, 33.56690, -55.17784, 33.21425, -52.57002, 27.04138, 13.78610, 69.60307, -81.16312, 27.53960, -158.28336, -205.94418, -95.08051, -0.01407, -0.00364, -18.56128, 6.02270, -10.11059, 24.69471, 12.31878, 9.94393, 3.81994, -4.84109, -1.08440, -0.72136, 0.03731, -0.02094, 0.00789, -0.00176, 0.09673, -0.11181, 0.03112, -0.00065, -0.29167, -0.82083, 0.40866, -0.77487, -2.23349, -0.46973, 0.41024, -0.14274, 0.07755, -0.24895, -0.04965, -0.01197, -0.02264, 0.05917, -0.02817, 0.01242, -0.00250, -0.00247, -0.14414, -0.03739, 0.14708, -0.07908, 0.05843, 0.15173, -0.01601, -0.07844, -0.05957, -0.03143, -0.01830, 0.01257, -0.00109, -0.00000, 0.00174, 0.00050, -0.02119, 0.06918, -0.02470, 0.00185, 0.02372, -0.02417, 0.01081, 0.05222, 0.09820, 0.05931, -0.00588, -0.00086, 0.01688, -0.00133, -0.00073, 0.00041, -0.02280, -0.05706, -0.17694, -0.12027, 0.00196, -0.00060, 0.00051, -0.02426, 0.00314, -0.00302, 0.17923, -0.78343, 0.52073, -0.02398, -0.03978, 0.20841, 6.51325, 3.37139, 12.88844, -6.72098, 3.40949, -14.34313, -9.68278, -7.85143, 1.06886, -0.21727, 0.36675, -0.49815, -0.07289, -0.07537, 0.01107, -0.00644, 0.01013, -0.00306, -0.00708, -0.13488, -0.23041, -0.10698, -0.00049, -0.00692, -0.00142, -0.00211, -0.04021, 0.01805, 0.00479, 0.00620, 0.00739, 0.00566, -0.00101, -0.00022, 0.00261, -0.00188, -0.01812, -0.01205, -0.00061, -0.00061, -0.02479, 0.01157, 0.91642, -0.65781, 0.39969, -1.13699, -0.43337, -0.57828, 0.00145, 0.00281, -0.01675, -0.00975, 0.00119, -0.00074, -0.00343, 0.00139, 0.00061, 0.00086, 0.00054, -0.00046, -0.01996, -0.02689, 0.00034, 0.00037, -0.00006, 0.00001, }; static double FAR tabr[] = { -734.58857, -1081.04460, -551.65750, -148.79782, -25.23171, 164.64781, 248.64813, -0.05163, -0.02413, -1306.61004, 560.02437, -1622.58047, 589.92513, -812.39674, 166.85340, -157.92826, -107.14755, 68.98900, -18.95875, -0.16183, 36.24345, -9.19972, -2.29315, -0.00316, 0.00222, 10.95234, 21.37177, -6.29550, 21.83656, -7.70755, 1.38228, -0.21770, -1.49525, 0.17951, 0.01043, 0.00062, 0.00208, -0.00066, 0.00050, 0.00313, 0.00187, 0.00010, 0.00131, 0.00102, 0.00047, 0.00102, 0.00012, 0.00012, -0.00037, 0.00808, 0.00027, -0.01219, -0.00961, -0.04166, -0.00327, -0.00001, -0.00146, -0.00092, -0.00989, -0.00135, 0.00196, 0.19216, 2.48442, -1.43599, 1.39651, -0.48549, -0.53272, 0.14066, -0.10352, 0.00141, 0.00066, 2.96838, -3.09575, 6.27741, 5.24306, -8.77080, 9.03247, -10.98350, -3.58579, -0.00168, -0.00100, 0.20234, -0.75737, 0.36838, -0.58241, 0.41430, -0.35784, 0.47038, -0.10586, 0.00539, 0.00490, -0.01375, -0.01950, 0.00145, 0.00723, -0.00391, 0.00391, -0.00131, -0.00568, 0.01317, 0.00319, 1.31006, 5.89394, -1.61753, 3.68814, -0.80644, -0.14747, 0.04481, -0.11361, -4.36130, 7.92488, -16.29047, -1.52163, 2.14492, -14.38028, 9.65573, 3.56881, -1.87208, 3.36213, 1.84499, -2.41575, -2.77076, -3.23915, -3.34573, 1.40979, 0.00217, -0.00841, 0.29313, -0.36246, 0.22043, 0.02328, -0.01182, 0.04074, -0.15728, 0.02468, -0.03185, -0.01099, 0.01059, -0.01274, 0.07362, -0.02642, 0.04035, -0.00968, -2.14457, 2.53297, -4.34196, -0.11421, -0.38757, -1.73872, 0.39784, -0.01397, -0.03311, 0.97723, 0.16060, -0.07486, 25.96413, 0.75088, -3.04736, 0.30340, -1.43451, -1.35136, 0.26526, -0.40247, -0.00460, -0.00056, 0.01633, -0.00128, -0.05197, 0.07002, -0.19450, 0.03737, 0.00188, -0.00037, -0.00903, -0.00059, -19.73809, 0.58424, -10.42034, -10.14579, 2.65990, -3.07889, 0.50884, 0.58508, -0.00970, 0.02099, 0.00716, 0.01161, 0.05751, -0.04515, 22.08042, 30.82415, -36.27430, 31.40265, -18.30150, -29.16403, 0.02454, 0.01834, -0.01312, 0.01576, -0.00928, 0.00330, -11.78094, 4.06738, -2.51590, 15.05277, 9.12747, 2.88088, 2.32916, -2.08271, 0.02872, 0.02194, 0.60494, -0.04597, 0.24749, 0.15971, -0.02185, 0.03384, -0.07075, 0.01287, 0.40201, 0.00347, -0.00410, -0.00998, -0.00005, -0.00121, 0.13770, 0.00186, -0.02268, 0.00210, 1.26291, 0.65546, 0.38885, 0.38880, -0.00184, 0.03067, 0.01273, 0.01136, 0.00557, 0.01117, 94.13171, -88.37882, 120.53292, 8.32903, 7.77313, 43.46523, -11.66698, 0.44639, 0.15092, -1.68367, -0.30833, -0.49030, 0.01971, -0.14144, -0.04019, -0.05110, -39.70024, 272.91667, -468.46263, 256.77696, -200.63130, -307.98554, 206.56301, -41.76039, -4.74242, 74.19909, 0.18474, 0.05547, -0.06732, 0.16515, -1156.31285, -1102.97666, -1346.99288, -1121.01090, 666.84550, 421.92305, 2259.49740, -2268.69758, -2325.87639, -4476.46256, -9683.77583, -2472.92565, -0.10400, 0.08075, -0.45225, 0.16621, 0.57789, 2.43804, 85.21675, -154.17208, 219.91042, -9.71116, 31.13240, 108.60117, -25.85622, 8.98402, -0.00233, 0.01030, -17.01324, 10.41588, -13.34449, 1.08782, -1.48199, -1.81734, 0.20334, -0.11734, -0.00230, -0.01869, -0.01182, -0.00129, -0.00281, 0.02021, -5.75973, 19.13309, -16.13690, 5.53382, -1.96585, -6.29211, 1.63105, -0.26089, 0.02935, -0.00555, 0.30700, -19.96182, 0.99825, -16.32664, 0.83052, -13.76201, -3.15609, 0.17360, -111.81423, -2.05419, -0.02455, -0.00478, 7.45114, 21.53296, 19.90263, 5.69420, 2.31253, -8.15116, -2.17440, -0.23014, 0.00168, 0.01590, 8.78005, 0.71418, 4.48561, 4.50680, -1.05713, 1.17880, -0.19327, -0.24877, -5.00870, -8.66354, 10.51902, -7.71011, 4.65486, 8.05673, -1.39635, -3.07669, -2.40347, -0.11167, -0.04064, 0.83512, -0.02041, -0.00351, 0.97375, -0.15795, 0.36361, 0.19913, -0.02142, 0.04193, 0.08801, 0.00475, -2.81010, 3.11341, -2.79191, -0.93313, 0.44570, -0.88287, -0.51815, 0.54776, 0.29736, 0.99779, 2.28957, 0.82183, 0.03386, 0.12855, 0.03124, 0.02454, -0.31958, 0.00070, -1.48184, -1.28195, 0.03965, -1.12026, 0.23910, 0.01293, 0.36146, -0.64483, -1.88470, 0.21469, -11.79819, -1.87287, 2.65699, -0.36287, 0.88148, -1.26883, -0.19657, -0.14279, -0.07536, -0.00004, 0.01496, 0.00537, 2.48352, 3.75581, -0.34909, 3.26696, -0.82105, 0.11287, -0.00755, -0.13764, -15.34429, -2.79957, -3.22976, -15.46084, 10.66793, -0.26054, -0.12188, 5.06211, 0.01313, 0.00424, 84.34332, -57.05646, 92.68150, -0.02024, 149.62698, 59.14407, 174.04569, -129.26785, -55.99789, -238.01484, -212.51618, -115.94914, -0.01720, -0.00158, -13.65602, 17.47396, 0.16714, 32.66367, 16.30095, 9.18345, 3.98555, -5.39985, -1.09958, -0.86072, 0.02752, -0.02474, 0.00671, -0.00278, -0.21030, -0.73658, 0.20708, -0.21378, 0.78462, -2.14051, -1.60070, -2.60915, -5.02441, -1.19246, 0.67622, -0.41889, 0.07430, -0.53204, -0.11214, -0.03417, -0.72636, -0.15535, -0.16815, -0.35603, 0.07530, -0.02521, -0.01261, -0.94883, 0.39930, -0.05370, -2.77309, 0.38431, 0.72127, -0.52030, -0.01804, -0.51188, -0.11993, 0.02189, 0.00928, -0.02129, -0.02760, 0.00441, -0.56832, -0.48114, 0.64192, -0.65656, 0.37483, 0.51883, -0.08474, 0.20324, 0.12783, 0.13041, -0.01545, -0.00282, -0.16196, -0.26980, 0.06584, -0.09987, -0.36305, -0.27610, -0.57074, -0.13607, -0.00824, 0.00369, 0.06094, -0.12214, 0.03581, -0.00876, 0.49346, -0.74596, 0.47814, 0.18201, -1.00640, 0.24465, 10.09808, 2.30496, 13.63359, -7.94007, 0.29792, -13.55724, -6.48556, -5.99581, 0.69686, -0.22434, 0.23198, -0.35579, -0.04736, -0.05683, 0.36710, -0.16571, 0.14876, 0.21824, -0.18940, -0.15063, -0.23692, -0.09990, -0.08923, -0.12222, 0.02998, -0.04560, -0.16229, 0.04552, -0.33051, 0.02585, -0.00622, 0.01583, 0.15436, -0.07109, 0.06429, 0.09218, -0.01277, -0.00019, 0.02345, -0.01057, -0.07294, 0.02506, 0.62063, -0.52533, 0.16814, -0.77168, -0.20614, -0.31828, -0.12856, 0.01316, -0.01522, -0.00126, 0.01558, 0.04765, -0.02776, 0.01166, -0.05185, 0.00674, 0.00754, 0.02183, -0.00645, -0.01050, -0.02155, 0.00375, 0.12040, -0.00004, }; static char FAR args[] = { 0, 6, 3, 2, 5, -6, 6, 3, 7, 0, 2, 2, 5, -5, 6, 6, 3, 1, 5, -2, 6, -3, 8, 0, 2, 4, 5,-10, 6, 4, 3, 2, 5, -4, 6, -3, 7, 1, 3, 3, 5,-10, 6, 7, 7, 0, 2, 6, 5,-15, 6, 0, 3, 1, 5, -4, 6, 4, 7, 0, 3, 3, 5, -8, 6, 2, 7, 0, 3, 1, 5, -3, 6, 1, 7, 0, 3, 1, 5, -3, 6, 2, 7, 0, 1, 1, 7, 1, 2, 5, 5,-12, 6, 0, 3, 2, 5, -7, 6, 7, 7, 0, 3, 1, 5, -1, 6, -3, 7, 0, 2, 3, 5, -7, 6, 3, 3, 1, 5, -4, 6, 3, 7, 0, 2, 1, 5, -2, 6, 3, 3, 3, 5, -8, 6, 3, 7, 0, 2, 1, 5, -3, 6, 3, 3, 1, 5, -3, 6, 3, 7, 0, 2, 3, 5, -8, 6, 2, 3, 2, 5, -5, 6, 2, 7, 0, 1, 2, 7, 0, 2, 4, 5, -9, 6, 3, 2, 2, 5, -4, 6, 4, 1, 1, 6, 2, 3, 2, 5, -5, 6, 3, 7, 0, 2, 2, 5, -6, 6, 2, 2, 5, 5,-11, 6, 1, 3, 1, 5, -2, 7, -2, 8, 0, 2, 1, 5, -3, 7, 1, 2, 3, 5, -6, 6, 3, 2, 1, 5, -1, 6, 2, 2, 1, 5, -4, 6, 2, 2, 3, 5, -9, 6, 0, 3, 2, 5, -4, 6, 2, 7, 0, 2, 1, 5, -2, 7, 1, 2, 6, 5,-13, 6, 0, 3, 2, 5, -2, 6, -3, 7, 0, 2, 4, 5, -8, 6, 3, 2, 3, 6, -3, 7, 0, 3, 6, 5,-14, 6, 3, 7, 0, 3, 1, 5, -2, 7, 1, 8, 0, 2, 2, 5, -3, 6, 2, 3, 1, 5, -4, 7, 5, 8, 0, 3, 2, 5, -8, 6, 3, 7, 0, 3, 4, 5, -9, 6, 3, 7, 0, 1, 2, 6, 3, 3, 2, 5, -4, 6, 3, 7, 0, 2, 2, 5, -7, 6, 2, 2, 1, 5, -2, 8, 0, 2, 1, 5, -1, 7, 0, 3, 3, 5, -6, 6, 2, 7, 0, 3, 4, 5, -8, 6, 2, 8, 0, 2, 1, 5, -1, 8, 0, 3, 2, 5, -3, 6, 1, 7, 0, 2, 7, 5,-15, 6, 2, 3, 3, 5, -4, 6, -3, 7, 1, 2, 5, 5,-10, 6, 4, 3, 1, 5, 1, 6, -3, 7, 1, 3, 7, 5,-16, 6, 3, 7, 0, 2, 3, 5, -5, 6, 4, 3, 1, 5, -6, 6, 3, 7, 0, 3, 5, 5,-11, 6, 3, 7, 0, 1, 1, 5, 5, 3, 3, 5,-11, 6, 3, 7, 0, 3, 3, 5, -6, 6, 3, 7, 0, 2, 2, 5, -7, 7, 0, 2, 1, 5, -5, 6, 3, 3, 1, 5, -1, 6, 3, 7, 0, 2, 3, 5,-10, 6, 3, 3, 2, 5, -3, 6, 2, 7, 0, 2, 1, 5, 1, 7, 0, 3, 2, 5, -1, 6, -3, 7, 0, 2, 4, 5, -7, 6, 3, 2, 4, 6, -3, 7, 0, 2, 2, 5, -2, 6, 4, 3, 4, 5, -8, 6, 3, 7, 0, 1, 3, 6, 3, 3, 2, 5, -3, 6, 3, 7, 0, 2, 5, 5, -9, 6, 3, 2, 3, 5, -4, 6, 2, 2, 1, 5, 1, 6, 2, 2, 2, 5, -4, 7, 0, 2, 6, 5,-11, 6, 2, 2, 2, 5, -3, 7, 0, 2, 4, 5, -6, 6, 2, 2, 2, 5, -1, 6, 2, 1, 4, 6, 1, 2, 2, 5, -2, 7, 0, 2, 5, 5, -8, 6, 2, 2, 3, 5, -3, 6, 2, 2, 1, 5, 2, 6, 2, 2, 2, 5, -2, 8, 0, 2, 2, 5, -1, 7, 0, 2, 6, 5,-10, 6, 3, 2, 4, 5, -5, 6, 3, 2, 6, 6, -3, 7, 0, 1, 2, 5, 5, 3, 4, 5, -6, 6, 3, 7, 0, 1, 5, 6, 4, 2, 2, 5,-10, 6, 1, 2, 5, 5, -7, 6, 1, 2, 3, 5, -2, 6, 2, 2, 1, 5, 3, 6, 2, 2, 6, 5, -9, 6, 2, 2, 4, 5, -4, 6, 2, 2, 2, 5, 1, 6, 2, 2, 7, 5,-11, 6, 0, 2, 3, 5, -3, 7, 0, 2, 5, 5, -6, 6, 2, 2, 3, 5, -1, 6, 1, 2, 3, 5, -2, 7, 0, 2, 6, 5, -8, 6, 1, 2, 4, 5, -3, 6, 1, 2, 2, 5, 2, 6, 0, 2, 7, 5,-10, 6, 1, 2, 5, 5, -5, 6, 2, 1, 3, 5, 3, 2, 1, 5, 5, 6, 2, 2, 6, 5, -7, 6, 1, 2, 4, 5, -2, 6, 1, 2, 7, 5, -9, 6, 1, 2, 5, 5, -4, 6, 0, 2, 6, 5, -6, 6, 0, 2, 4, 5, -1, 6, 0, 2, 7, 5, -8, 6, 1, 2, 5, 5, -3, 6, 0, 2, 8, 5,-10, 6, 0, 2, 6, 5, -5, 6, 0, 1, 4, 5, 2, 2, 7, 5, -7, 6, 0, 2, 5, 5, -2, 6, 0, 2, 8, 5, -9, 6, 0, 2, 7, 5, -6, 6, 0, 2, 8, 5, -8, 6, 0, 2, 9, 5,-10, 6, 0, 1, 5, 5, 0, 2, 9, 5, -9, 6, 0, 2, 1, 3, -1, 5, 0, -1 }; /* Total terms = 142, small = 140 */ struct plantbl jup404 = { 9, { 0, 0, 1, 0, 9, 16, 7, 5, 0,}, 6, args, tabl, tabb, tabr, 5.2026032092000003e+00, 3652500.0, 1.0 }; astronomical-almanac-5.6/kep.h0000644000175000017500000000571306617064634014607 0ustar jrvjrv/* General definitions for aa program */ #include #include "plantbl.h" struct orbit { char obname[16]; /* name of the object */ double epoch; /* epoch of orbital elements */ double i; /* inclination */ double W; /* longitude of the ascending node */ double w; /* argument of the perihelion */ double a; /* mean distance (semimajor axis) */ double dm; /* daily motion */ double ecc; /* eccentricity */ double M; /* mean anomaly */ double equinox; /* epoch of equinox and ecliptic */ double mag; /* visual magnitude at 1AU from earth and sun */ double sdiam; /* equatorial semidiameter at 1au, arc seconds */ /* The following used by perterbation formulas: */ struct plantbl *ptable; double L; /* computed mean longitude */ double r; /* computed radius vector */ double plat; /* perturbation in ecliptic latitude */ }; struct star { char obname[32]; /* Object name (31 chars) */ double epoch; /* Epoch of coordinates */ double ra; /* Right Ascension, radians */ double dec; /* Declination, radians */ double px; /* Parallax, radians */ double mura; /* proper motion in R.A., rad/century */ double mudec; /* proper motion in Dec., rad/century */ double v; /* radial velocity, km/s */ double equinox; /* Epoch of equinox and ecliptic */ double mag; /* visual magnitude */ }; /* Note the items for a star are in different measurement units * in the ASCII file description. */ /* aa.c */ extern double DTR; extern double RTD; extern double RTS; extern double STR; extern double PI; extern double J2000; extern double B1950; extern double J1900; extern double JD; extern double TDT; extern double UT; extern double FAR dradt; extern double FAR ddecdt; extern int objnum, jdflag, prtflg; extern double obpolar[]; extern double FAR eapolar[]; extern double FAR rearth[]; extern double dp[]; /* angles.c */ extern double FAR SE; extern double FAR SO; extern double FAR EO; extern double FAR pq; extern double FAR ep; extern double FAR qe; /* nutate.c */ extern double jdnut, nutl, nuto; /* epsiln.c */ extern double jdeps, eps, coseps, sineps; /* vearth.c */ extern double jvearth, vearth[]; /* DEBUG = 1 to enable miscellaneous printouts. */ #define DEBUG 0 /* Get ANSI C prototypes, if you want them. */ #if __STDC__ #include "protos.h" #define ANSIPROT #else int showrd(), showcor(), dms(), hms(), jtocal(), epsiln(); int fk4fk5(), kepler(), kinit(), getnum(), deltap(); int lonlat(), nutate(), precess(), reduce(), rstar(); int lightt(), velearth(), diurpx(), diurab(), update(); int relativity(), showcname(), annuab(), angles(), altaz(); int domoon(), dosun(), doplanet(), dostar(), iter_trnsit(); double mod360(), modtp(); int getstar(), getorbit(), trnsit(); double sidrlt(), refrac(); double acos(), asin(), atan(), zatan2(), cos(), sin(); double tan(), sqrt(), fabs(), log(), floor(), polevl(); double sinh(), cosh(), tanh(); extern char *whatconstel(); #endif astronomical-almanac-5.6/kepler.c0000644000175000017500000001776706427431246015315 0ustar jrvjrv /* Program to solve Keplerian orbit * given orbital parameters and the time. * Returns Heliocentric equatorial rectangular coordinates of * the object. * * This program detects several cases of given orbital elements. * If a program for perturbations is pointed to, it is called * to calculate all the elements. * If there is no program, then the mean longitude is calculated * from the mean anomaly and daily motion. * If the daily motion is not given, it is calculated * by Kepler's law. * If the eccentricity is given to be 1.0, it means that * meandistance is really the perihelion distance, as in a comet * specification, and the orbit is parabolic. * * Reference: Taff, L.G., "Celestial Mechanics, A Computational * Guide for the Practitioner." Wiley, 1985. */ #include "kep.h" #ifdef ANSIPROT extern int embofs ( double J, double emb[], double *r ); int gplan (double, struct plantbl *, double *); int g3plan (double, struct plantbl *, double *, int); int gmoon (double, double *, double *); #else int embofs(), g3plan(), gplan(), gmoon(); #endif extern struct orbit earth; /* orbital elements of the earth */ extern double eps, coseps, sineps; /* obliquity of ecliptic */ int kepler(J, e, rect, polar) double J, rect[], polar[]; struct orbit *e; { double alat, E, M, W, temp; double epoch, inclination, ascnode, argperih; double meandistance, dailymotion, eccent, meananomaly; double r, coso, sino, cosa; /* Call program to compute position, if one is supplied. */ if( e->ptable ) { if( e == &earth ) g3plan (J, e->ptable, polar, 3); else gplan (J, e->ptable, polar); E = polar[0]; /* longitude */ e->L = E; W = polar[1]; /* latitude */ r = polar[2]; /* radius */ e->r = r; e->epoch = J; e->equinox = J2000; goto kepdon; } /* Decant the parameters from the data structure */ epoch = e->epoch; inclination = e->i; ascnode = e->W * DTR; argperih = e->w; meandistance = e->a; /* semimajor axis */ dailymotion = e->dm; eccent = e->ecc; meananomaly = e->M; /* Check for parabolic orbit. */ if( eccent == 1.0 ) { /* meandistance = perihelion distance, q * epoch = perihelion passage date */ temp = meandistance * sqrt(meandistance); W = (J - epoch ) * 0.0364911624 / temp; /* The constant above is 3 k / sqrt(2), * k = Gaussian gravitational constant = 0.01720209895 . */ E = 0.0; M = 1.0; while( fabs(M) > 1.0e-11 ) { temp = E * E; temp = (2.0 * E * temp + W)/( 3.0 * (1.0 + temp)); M = temp - E; if( temp != 0.0 ) M /= temp; E = temp; } r = meandistance * (1.0 + E * E ); M = atan( E ); M = 2.0 * M; alat = M + DTR*argperih; goto parabcon; } if( eccent > 1.0 ) { /* The equation of the hyperbola in polar coordinates r, theta * is r = a(e^2 - 1)/(1 + e cos(theta)) * so the perihelion distance q = a(e-1), * the "mean distance" a = q/(e-1). */ meandistance = meandistance/(eccent - 1.0); temp = meandistance * sqrt(meandistance); W = (J - epoch ) * 0.01720209895 / temp; /* solve M = -E + e sinh E */ E = W/(eccent - 1.0); M = 1.0; while( fabs(M) > 1.0e-11 ) { M = -E + eccent * sinh(E) - W; E += M/(1.0 - eccent * cosh(E)); } r = meandistance * (-1.0 + eccent * cosh(E)); temp = (eccent + 1.0)/(eccent - 1.0); M = sqrt(temp) * tanh( 0.5*E ); M = 2.0 * atan(M); alat = M + DTR*argperih; goto parabcon; } /* Calculate the daily motion, if it is not given. */ if( dailymotion == 0.0 ) { /* The constant is 180 k / pi, k = Gaussian gravitational constant. * Assumes object in heliocentric orbit is massless. */ dailymotion = 0.9856076686/(e->a*sqrt(e->a)); } dailymotion *= J - epoch; /* M is proportional to the area swept out by the radius * vector of a circular orbit during the time between * perihelion passage and Julian date J. * It is the mean anomaly at time J. */ M = DTR*( meananomaly + dailymotion ); M = modtp(M); /* If mean longitude was calculated, adjust it also * for motion since epoch of elements. */ if( e->L ) { e->L += dailymotion; e->L = mod360( e->L ); } /* By Kepler's second law, M must be equal to * the area swept out in the same time by an * elliptical orbit of same total area. * Integrate the ellipse expressed in polar coordinates * r = a(1-e^2)/(1 + e cosW) * with respect to the angle W to get an expression for the * area swept out by the radius vector. The area is given * by the mean anomaly; the angle is solved numerically. * * The answer is obtained in two steps. We first solve * Kepler's equation * M = E - eccent*sin(E) * for the eccentric anomaly E. Then there is a * closed form solution for W in terms of E. */ E = M; /* Initial guess is same as circular orbit. */ temp = 1.0; do { /* The approximate area swept out in the ellipse */ temp = E - eccent * sin(E) /* ...minus the area swept out in the circle */ - M; /* ...should be zero. Use the derivative of the error * to converge to solution by Newton's method. */ E -= temp/(1.0 - eccent*cos(E)); } while( fabs(temp) > 1.0e-11 ); /* The exact formula for the area in the ellipse is * 2.0*atan(c2*tan(0.5*W)) - c1*eccent*sin(W)/(1+e*cos(W)) * where * c1 = sqrt( 1.0 - eccent*eccent ) * c2 = sqrt( (1.0-eccent)/(1.0+eccent) ). * Substituting the following value of W * yields the exact solution. */ temp = sqrt( (1.0+eccent)/(1.0-eccent) ); W = 2.0 * atan( temp * tan(0.5*E) ); /* The true anomaly. */ W = modtp(W); meananomaly *= DTR; /* Orbital longitude measured from node * (argument of latitude) */ if( e->L ) alat = (e->L)*DTR + W - meananomaly - ascnode; else alat = W + DTR*argperih; /* mean longitude not given */ /* From the equation of the ellipse, get the * radius from central focus to the object. */ r = meandistance*(1.0-eccent*eccent)/(1.0+eccent*cos(W)); parabcon: /* The heliocentric ecliptic longitude of the object * is given by * tan( longitude - ascnode ) = cos( inclination ) * tan( alat ). */ coso = cos( alat ); sino = sin( alat ); inclination *= DTR; W = sino * cos( inclination ); E = zatan2( coso, W ) + ascnode; /* The ecliptic latitude of the object */ W = sino * sin( inclination ); W = asin(W); kepdon: /* Convert to rectangular coordinates, * using the perturbed latitude. */ rect[2] = r * sin(W); cosa = cos(W); rect[1] = r * cosa * sin(E); rect[0] = r * cosa * cos(E); /* Convert from heliocentric ecliptic rectangular * to heliocentric equatorial rectangular coordinates * by rotating eps radians about the x axis. */ epsiln( e->equinox ); W = coseps*rect[1] - sineps*rect[2]; M = sineps*rect[1] + coseps*rect[2]; rect[1] = W; rect[2] = M; /* Precess the position * to ecliptic and equinox of J2000.0 * if not already there. */ precess( rect, e->equinox, 1 ); /* If earth, adjust from earth-moon barycenter to earth * by AA page E2. */ if( e == &earth ) { embofs( J, rect, &r ); /* see below */ } /* Rotate back into the ecliptic. */ epsiln( J2000 ); W = coseps*rect[1] + sineps*rect[2]; M = -sineps*rect[1] + coseps*rect[2]; /* Convert to polar coordinates */ E = zatan2( rect[0], W ); W = asin( M/r ); /* Output the polar cooordinates */ polar[0] = E; /* longitude */ polar[1] = W; /* latitude */ polar[2] = r; /* radius */ return(0); } /* Adjust position from Earth-Moon barycenter to Earth * * J = Julian day number * emb = Equatorial rectangular coordinates of EMB. * pr = Earth's distance to the Sun (au) */ extern double emrat; int embofs( J, ea, pr ) double J; double ea[]; double *pr; { double pm[3], polm[3]; double a, b; int i; /* Compute the vector Moon - Earth. */ gmoon( J, pm, polm ); /* Precess the lunar position * to ecliptic and equinox of J2000.0 */ precess( pm, J, 1 ); /* Adjust the coordinates of the Earth */ a = 1.0 / (emrat + 1.0); b = 0.0; for( i=0; i<3; i++ ) { ea[i] = ea[i] - a * pm[i]; b = b + ea[i] * ea[i]; } /* Sun-Earth distance. */ *pr = sqrt(b); return(0); } astronomical-almanac-5.6/kfiles.c0000666000175000017500000001711207715206365015277 0ustar jrvjrv /* Disc file input routines to read initialization parameters * or file containing orbital elements. */ #if __BORLANDC__ #include #endif #include "kep.h" #ifdef ANSIPROT #include #endif #ifdef _MSC_VER #if _MSC_VER >= 1000 #include #include #endif #endif #ifndef ANSIPROT FILE *fincat(); #endif extern char *intfmt, *strfmt;/* see dms.c */ static char starnam[80] = {'s','t','a','r','.','c','a','t','\0'}; static char orbnam[80] = {'o','r','b','i','t','.','c','a','t','\0'}; static int linenum = 1; /* Read initialization file aa.ini * and adjust topocentric coordinates of observer. * * The following items will be read in automatically from the disc file * named aa.ini, if one is provided. The file contains one ASCII * string number per line so is easily edited. * * Terrestrial geocentric latitude and longitude of observer * in degrees East of Greenwich, North of equator * (kfiles.c converts from geodetic latitude input.) */ double tlong = -71.13; /* Cambridge, Massachusetts */ double tlat = 42.38; /* geocentric */ double glat = 42.17; /* geodetic */ /* Parameters for calculation of azimuth and elevation */ double attemp = 20.0; /* atmospheric temperature, degrees Centigrade */ double atpress = 1013.0; /* atmospheric pressure, millibars */ /* Distance from observer to center of earth, in earth radii */ double trho = 0.9985; static double flat = 298.257222; static double height = 0.0; /* Constants used elsewhere. These are DE403 values. */ double aearth = 6378137.; /* Radius of the earth, in meters. */ double au = 1.49597870691e8; /* Astronomical unit, in kilometers. */ double emrat = 81.300585; /* Earth/Moon mass ratio. */ double Clight = 2.99792458e5; /* Speed of light, km/sec */ double Clightaud; /* C in au/day */ extern double tlong, tlat, glat, trho, attemp, atpress, dtgiven; extern double Rearth; int kinit() { double a, b, fl, co, si, u; FILE *f, *fopen(); char s[84]; printf( "\n\tSteve Moshier's Ephemeris Program v5.6\n\n" ); printf( "Planetary and lunar positions approximate DE404.\n" ); f = fopen( "aa.ini", "r" ); if( f ) { fgets( s, 80, f ); sscanf( s, "%lf", &tlong ); fgets( s, 80, f ); sscanf( s, "%lf", &glat ); fgets( s, 80, f ); sscanf( s, "%lf", &height ); u = glat * DTR; /* Reduction from geodetic latitude to geocentric latitude * AA page K5 */ co = cos(u); si = sin(u); fl = 1.0 - 1.0/flat; fl = fl*fl; si = si*si; u = 1.0/sqrt( co*co + fl*si ); a = aearth*u + height; b = aearth*fl*u + height; trho = sqrt( a*a*co*co + b*b*si ); tlat = RTD * acos( a*co/trho ); if( glat < 0.0 ) tlat = -tlat; trho /= aearth; /* Reduction from geodetic latitude to geocentric latitude * AA page K5 */ /* tlat = glat - 0.19242861 * sin(2.0*u) + 0.00032314 * sin(4.0*u) - 0.00000072 * sin(6.0*u); trho = 0.998327073 + 0.001676438 * cos(2.0*u) - 0.000003519 * cos(4.0*u) + 0.000000008 * cos(6.0*u); trho += height/6378160.; */ printf( "Terrestrial east longitude %.4f deg\n", tlong ); printf( "geocentric latitude %.4f deg\n", tlat ); printf( "Earth radius %.5f\n", trho ); fgets( s, 80, f ); sscanf( s, "%lf", &attemp ); printf( "temperature %.1f C\n", attemp ); fgets( s, 80, f ); sscanf( s, "%lf", &atpress ); printf( "pressure %.0f mb\n", atpress ); fgets( s, 80, f ); sscanf( s, "%d", &jdflag ); switch( jdflag ) { case 0: printf("TDT and UT assumed equal.\n"); break; case 1: printf("Input time is TDT.\n" ); break; case 2: printf("Input time is UT.\n" ); break; default: printf("Illegal jdflag\n" ); exit(0); } fgets( s, 80, f ); sscanf( s, "%lf", &dtgiven ); if( dtgiven != 0.0 ) printf( "Using deltaT = %.2fs.\n", dtgiven ); fclose(f); } Clightaud = 86400.0 * Clight / au; /* Radius of the earth in au Thanks to Min He for pointing out this needs to be initialized early. */ Rearth = 0.001 * aearth / au; return(0); } /* Program to read in a file containing orbital parameters */ extern struct orbit earth; int getorbit(el) struct orbit *el; { FILE *f; char s1[128], s2[128], *u, *v; int i; getnum( "Name of orbit catalogue file: ", orbnam, strfmt ); f = fincat( orbnam, 2, s1, s2 ); if( f == 0 ) return(-1); /* failure flag */ printf( "%s\n", s1 ); printf( "%s\n", s2 ); /* Read in ASCII floating point numbers */ sscanf( s1, "%lf %lf %lf %lf %lf %lf", &el->epoch, &el->i, &el->W, &el->w, &el->a, &el->dm ); sscanf( s2, "%lf %lf %lf %lf %lf %15s", &el->ecc, &el->M, &el->equinox, &el->mag, &el->sdiam, &el->obname[0] ); el->obname[15] = '\0'; /* Clear out the rest of the data structure */ el->ptable = 0; el->L = 0.0; el->r = 0.0; el->plat = 0.0; if( strcmp( &el->obname[0], "Earth" ) ) { return(0); } else { u = (char *)&earth; v = (char *)el; for( i=0; i < (int) sizeof(struct orbit); i++ ) *u++ = *v++; printf( "Read in earth orbit\n" ); return(1); } } int getstar(el) struct star *el; { int sign; char s[128]; double rh, rm, rs, dd, dm, ds, x, z; FILE *f; char *p; int i; getnum( "Name of star catalogue file: ", starnam, strfmt ); f = fincat( starnam, 1, s, (char *)0 ); if( f == 0 ) return(-1); /* failure flag */ printf( "%s\n", s ); /* Read in the ASCII string data and name of the object */ sscanf( s, "%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %s", &el->epoch, &rh, &rm, &rs, &dd, &dm, &ds, &el->mura, &el->mudec, &el->v, &el->px, &el->mag, &el->obname[0] ); x = el->epoch; if( x == 2000.0 ) x = J2000; else if( x == 1950.0 ) x = B1950; else if( x == 1900.0 ) x = J1900; else x = J2000 + 365.25 * (x - 2000.0); el->epoch = x; /* read the right ascension */ el->ra = 2.0 * PI * (3600.0*rh + 60.0*rm + rs)/86400.0; /* read the declination */ sign = 1; if( (dd < 0.0) || (dm < 0.0) || (ds < 0.0) ) sign = -1; z = (3600.0*fabs(dd) + 60.0*fabs(dm) + fabs(ds))/RTS; if( dd == 0.0 ) { /* Scan the text for possible minus sign in front of declination 0 */ p = s; /* skip over 4 fields */ for( i=0; i<4; i++ ) { while( *p++ == ' ' ) ; while( *p++ != ' ' ) ; } while( *p++ == ' ' ) ; --p; if( *p == '-' ) sign = -1; } if( sign < 0 ) z = -z; el->dec = z; #if DEBUG printf( "%.2f\n", el->epoch ); printf( "%.0f %.0f %.3f\n", rh, rm, rs ); printf( "%.8f\n", el->ra ); printf( "%.0f %.0f %.3f\n", dd, dm, ds ); printf( "%.8f\n", el->dec ); printf( "d %.3f mua %.3f mud %.3f v %.3f\n", el->px, el->mura, el->mudec, el->v ); #endif el->mura *= 15.0/RTS; /* s/century -> "/century -> rad/century */ el->mudec /= RTS; z = el->px; if( z < 1.0 ) { if( z <= 0.0 ) el->px = 0.0; else el->px = STR * z; /* assume px in arc seconds */ } else { el->px = 1.0/(RTS * z); /* parsecs -> radians */ } return(0); } /* Open catalogue and find line number */ FILE *fincat( name, n, str1, str2 ) char *name; int n; /* number of lines per catalogue entry */ char *str1, *str2; { int i; FILE *f, *fopen(); f = fopen( name, "r" ); if( f == 0 ) { printf( "Can't find file %s\n", name ); return(0); /* failure flag */ } getnum( "Line number", &linenum, intfmt ); if( linenum <= 0 ) goto failure; for( i=0; i 1 ) { fgets( str2, 126, f ); if( *str2 == '-' ) goto endf; } } fclose(f); return( f ); endf: printf( "End of file reached.\n" ); failure: fclose(f); return(0); } astronomical-almanac-5.6/lightt.c0000644000175000017500000000322705336077776015324 0ustar jrvjrv/* Correction for light time from object to earth * including gravitational retardation due to the Sun. * AA page B36. */ #include "kep.h" int lightt( elemnt, q, e ) double e[], q[]; /* rectangular position vectors */ struct orbit *elemnt; /* orbital elements of object q */ { double p[3], p0[3], ptemp[3]; double P, Q, E, t, x, y; int i, k; /* save initial q-e vector for display */ for( i=0; i<3; i++ ) { p0[i] = q[i] - e[i]; } E = 0.0; for( i=0; i<3; i++ ) E += e[i]*e[i]; E = sqrt(E); for( k=0; k<2; k++ ) { P = 0.0; Q = 0.0; for( i=0; i<3; i++ ) { y = q[i]; x = y - e[i]; p[i] = x; Q += y * y; P += x * x; } P = sqrt(P); Q = sqrt(Q); /* Note the following blows up if object equals sun. */ t = (P + 1.97e-8 * log( (E+P+Q)/(E-P+Q) ) )/173.1446327; kepler( TDT-t, elemnt, q, ptemp ); } if( prtflg ) printf( "light time %.4fm, ", 1440.0*t ); /* Final object-earth vector and the amount by which it changed. */ for( i=0; i<3; i++ ) { x = q[i] - e[i]; p[i] = x; dp[i] = x - p0[i]; } showcor( "aberration", p0, dp ); /* Calculate dRA/dt and dDec/dt. * The desired correction of apparent coordinates is relative * to the equinox of date, but the coordinates here are * for J2000. This introduces a slight error. * * Estimate object-earth vector t days ago. We have * p(?) = q(J-t) - e(J), and must adjust to * p(J-t) = q(J-t) - e(J-t) = q(J-t) - (e(J) - Vearth * t) * = p(?) + Vearth * t. */ velearth(TDT); for( i=0; i<3; i++ ) p[i] += vearth[i]*t; deltap( p, p0, &dradt, &ddecdt ); /* see dms.c */ dradt /= t; ddecdt /= t; return(0); } astronomical-almanac-5.6/lonlat.c0000644000175000017500000000174306065440720015302 0ustar jrvjrv /* Display ecliptic longitude and latitude for * equinox of date. Input is equatorial rectangular * coordinates for equinox J2000. */ #include "kep.h" int lonlat( pp, J, polar, ofdate ) double pp[], J, polar[]; int ofdate; /* 1 means precess from J2000 to date J. */ { double s[3], x, y, z, yy, zz, r; int i; /* Make local copy of position vector * and calculate radius. */ r = 0.0; for( i=0; i<3; i++ ) { x = pp[i]; s[i] = x; r += x * x; } r = sqrt(r); /* Precess to equinox of date J */ if( ofdate ) precess( s, J, -1 ); /* Convert from equatorial to ecliptic coordinates */ epsiln(J); yy = s[1]; zz = s[2]; x = s[0]; y = coseps * yy + sineps * zz; z = -sineps * yy + coseps * zz; yy = zatan2( x, y ); zz = asin( z/r ); polar[0] = yy; polar[1] = zz; polar[2] = r; if( prtflg == 0 ) return(0); printf( "ecliptic long" ); dms( yy ); printf( " lat" ); dms( zz ); printf( " rad %.6E\n", r ); return(0); } astronomical-almanac-5.6/makefile0000644000175000017500000000337210334377613015351 0ustar jrvjrvCC= gcc CFLAGS= -O2 -Wall #CFLAGS= -g -Wall OBJS = altaz.o angles.o annuab.o constel.o deflec.o deltat.o diurab.o \ diurpx.o dms.o epsiln.o fk4fk5.o kepler.o kfiles.o lightt.o lonlat.o \ nutate.o precess.o refrac.o rplanet.o rstar.o sidrlt.o sun.o domoon.o \ trnsit.o vearth.o zatan2.o \ gplan.o mer404.o ven404.o ear404.o mar404.o jup404.o \ sat404.o ura404.o nep404.o plu404.o mlr404.o mlat404.o INCS = kep.h plantbl.h aa: aa.o $(OBJS) $(INCS) $(CC) -o aa aa.o $(OBJS) -lm # coff2exe aa aa.o: aa.c $(INCS) conjunct: conjunct.o $(OBJS) $(INCS) $(CC) -o conjunct conjunct.o $(OBJS) -lm # coff2exe conjunct conjunct.o: conjunct.c $(INCS) moonrise: moonrise.o $(OBJS) $(INCS) $(CC) -o moonrise moonrise.o $(OBJS) -lm moonrise.o: moonrise.c $(INCS) altaz.o: altaz.c $(INCS) angles.o: angles.c $(INCS) annuab.o: annuab.c $(INCS) constel.o: constel.c $(INCS) deflec.o: deflec.c $(INCS) deltat.o: deltat.c $(INCS) diurab.o: diurab.c $(INCS) diurpx.o: diurpx.c $(INCS) dms.o: dms.c $(INCS) epsiln.o: epsiln.c $(INCS) fk4fk5.o: fk4fk5.c $(INCS) kepler.o: kepler.c $(INCS) kfiles.o: kfiles.c $(INCS) lightt.o: lightt.c $(INCS) lonlat.o: lonlat.c $(INCS) nutate.o: nutate.c $(INCS) precess.o: precess.c $(INCS) refrac.o: refrac.c $(INCS) rplanet.o: rplanet.c $(INCS) rstar.o: rstar.c $(INCS) sidrlt.o: sidrlt.c $(INCS) sun.o: sun.c $(INCS) trnsit.o: trnsit.c $(INCS) vearth.o: vearth.c $(INCS) zatan2.o: zatan2.c $(INCS) domoon.o: domoon.c $(INCS) ear404.o: ear404.c $(INCS) jup404.o: jup404.c $(INCS) mar404.o: mar404.c $(INCS) mer404.o: mer404.c $(INCS) nep404.o: nep404.c $(INCS) sat404.o: sat404.c $(INCS) ura404.o: ura404.c $(INCS) ven404.o: ven404.c $(INCS) plu404.o: plu404.c $(INCS) mlr404.o: mlr404.c $(INCS) mlat404.o: mlat404.c $(INCS) astronomical-almanac-5.6/mar404.c0000644000175000017500000013520006253703370015016 0ustar jrvjrv /* First date in file = 1228000.50 Number of records = 397276.0 Days per record = 4.0 Julian Years Lon Lat Rad -1349.9 to -1000.0: 0.42 0.18 0.25 -1000.0 to -500.0: 0.45 0.14 0.21 -500.0 to 0.0: 0.37 0.10 0.20 0.0 to 500.0: 0.33 0.09 0.22 500.0 to 1000.0: 0.48 0.07 0.22 1000.0 to 1500.0: 0.40 0.07 0.19 1500.0 to 2000.0: 0.36 0.11 0.19 2000.0 to 2500.0: 0.38 0.14 0.20 2500.0 to 3000.0: 0.45 0.15 0.24 3000.0 to 3000.8: 0.182 0.125 0.087 */ #include "plantbl.h" static double FAR tabl[] = { 43471.66140, 21291.11063, 2033.37848, 6890507597.78366, 1279543.73631, 317.74183, 730.69258, -15.26502, 277.56960, -62.96711, 20.96285, 1.01857, -2.19395, 3.75708, 3.65854, 0.01049, 1.09183, -0.00605, -0.04769, 0.41839, 0.10091, 0.03887, 0.11666, -0.03301, 0.02664, 0.38777, -0.56974, 0.02974, -0.15041, 0.02179, -0.00808, 0.08594, 0.09773, -0.00902, -0.04597, 0.00762, -0.03858, -0.00139, 0.01562, 0.02019, 0.01878, -0.01244, 0.00795, 0.00815, 0.03501, -0.00335, -0.02970, -0.00518, -0.01763, 0.17257, 0.14698, -0.14417, 0.26028, 0.00062, -0.00180, 13.35262, 39.38771, -15.49558, 22.00150, -7.71321, -4.20035, 0.62074, -1.42376, 0.07043, -0.06670, 0.16960, -0.06859, 0.07787, 0.01845, -0.01608, -0.00914, 5.60438, -3.44436, 5.88876, 6.77238, -5.29704, 3.48944, 0.01291, 0.01280, -0.53532, 0.86584, 0.79604, 0.31635, -3.92977, -0.94829, -0.74254, -1.37947, 0.17871, -0.12477, 0.00171, 0.11537, 0.02281, -0.03922, -0.00165, 0.02965, 1.59773, 1.24565, -0.35802, 1.37272, -0.44811, -0.08611, 3.04184, -3.39729, 8.86270, 6.65967, -9.10580, 10.66103, 0.02015, -0.00902, -0.01166, -0.23957, -0.12128, -0.04640, -0.07114, 0.14053, -0.04966, -0.01665, 0.28411, -0.37754, -1.26265, 1.01377, 3.70433, -0.21025, -0.00972, 0.00350, 0.00997, 0.00450, -2.15305, 3.18147, -1.81957, -0.02321, -0.02560, -0.35188, 0.00003, -0.01110, 0.00244, -0.05083, -0.00216, -0.02026, 0.05179, 0.04188, 5.92031, -1.61316, 3.72001, 6.98783, -4.17690, 2.61250, 0.04157, 2.76453, -1.34043, 0.74586, -0.20258, -0.30467, 0.00733, 0.00376, 1.72800, 0.76593, 1.26577, -2.02682, -1.14637, -0.91894, -0.00002, 0.00036, 2.54213, 0.89533, -0.04166, 2.36838, -0.97069, 0.05486, 0.46927, 0.04500, 0.23388, 0.35005, 1.61402, 2.30209, -0.99859, 1.63349, -0.51490, -0.26112, 0.27848, -0.26100, -0.07645, -0.22001, 0.92901, 1.12627, -0.39829, 0.77120, -0.23716, -0.11245, -0.02387, 0.03960, -0.00802, 0.02179, 2.86448, 1.00246, -0.14647, 2.80278, -1.14143, 0.05177, 1.68671, -1.23451, 3.16285, 0.70070, 0.25817, 3.17416, 0.07447, -0.08116, -0.03029, -0.02795, 0.00816, 0.01023, 0.00685, -0.01075, -0.34268, 0.03680, -0.05488, -0.07430, -0.00041, -0.02968, 3.13228, -0.83209, 1.95765, 3.78394, -2.26196, 1.38520, -0.00401, -0.01397, 1.01604, -0.99485, 0.62465, 0.22431, -0.05076, 0.12025, 4.35229, -5.04483, 14.87533, 9.00826, -10.37595, 19.26596, 0.40352, 0.19895, 0.09463, -0.10774, -0.17809, -0.08979, -0.00796, -0.04313, 0.01520, -0.03538, 1.53301, -1.75553, 4.87236, 3.23662, -3.62305, 6.42351, -0.00439, -0.01305, 0.17194, -0.64003, 0.26609, 0.06600, 0.01767, -0.00251, -0.08871, -0.15523, 0.01201, -0.03408, -0.29126, -0.07093, -0.00998, -0.07876, 1.05932, -25.38650, -0.29354, 0.04179, -0.01726, 0.07473, -0.07607, -0.08859, 0.00842, -0.02359, 0.47858, -0.39809, 1.25061, 0.87017, -0.82453, 1.56864, -0.00463, 0.02385, -0.29070, 8.56535, -0.12495, 0.06580, -0.03395, -0.02465, -1.06759, 0.47004, -0.40281, -0.23957, 0.03572, -0.07012, 0.00571, -0.00731, 0.18601, -1.34068, 0.03798, -0.00532, 0.00448, -0.01147, 1.41208, -0.00668, 0.25883, 1.23788, -0.57774, 0.09166, -2.49664, -0.25235, -0.53582, -0.80126, 0.10827, -0.08861, -0.03577, 0.06825, -0.00143, 0.04633, 0.01586, -0.01056, -0.02106, 0.03804, -0.00088, -0.03458, -0.00033, -0.01079, 0.05821, -0.02445, 0.00602, 0.00721, -0.00315, -0.01021, -0.65454, 1.08478, -0.44593, -0.21492, -1.35004, 4.47299, -4.19170, 3.51236, 1946.04629, 13960.88247, 576.24572, 8023.81797, 2402.48512, -753.87007, -6376.99217, -10278.88014, -25743.89874, 15506.87748, 15609.59853, 35173.63133, -3.70370, 6.29538, -4.84183, -0.76942, -0.02465, -0.03840, 0.00565, -0.06071, 0.01174, 0.00253, -0.00230, 0.05252, -0.02813, 0.01359, 0.23208, 0.03393, 0.01734, 0.04838, -0.46340, -0.18941, 0.25428, -0.56925, 0.05213, 0.24704, 0.12922, -0.01531, 0.06885, -0.08510, 0.01853, -0.00390, 0.01196, -0.30530, 0.13117, -0.03533, 1.79597, -0.42743, 0.98545, 2.13503, -1.32942, 0.68005, -0.01226, 0.00571, 0.31081, 0.34932, 0.34531, -0.32947, -0.00548, 0.00186, -0.00157, -0.00065, 0.30877, -0.03864, 0.04921, 0.06693, 0.01761, -0.04119, 1.28318, 0.38546, 0.06462, 1.18337, -0.48698, 0.07086, 0.26031, -0.22813, 0.10272, 0.04737, -0.04506, -0.38581, -0.16624, -0.04588, 0.00992, 0.00722, -0.21041, 0.20560, -0.09267, -0.03438, 0.32264, -0.07383, 0.09553, -0.38730, 0.17109, -0.01342, -0.02336, -0.01286, 0.00230, 0.04626, 0.01176, 0.01868, -0.15411, -0.32799, 0.22083, -0.14077, 1.98392, 1.68058, -0.02526, -0.13164, -0.04447, -0.00153, 0.01277, 0.00553, -0.26035, -0.11362, 0.14672, -0.32242, 0.16686, -0.69957, 0.40091, -0.06721, 0.00837, 0.09635, -0.08545, 0.25178, -0.22486, 16.03256, 0.34130, -0.06313, 0.01469, -0.09012, -0.00744, -0.02510, -0.08492, -0.13733, -0.07620, -0.15329, 0.13716, -0.03769, 2.01176, -1.35991, -1.04319, -2.97226, -0.01433, 0.61219, -0.55522, 0.38579, 0.31831, 0.81843, -0.04583, -0.14585, -0.10218, 0.16039, -0.06552, -0.01802, 0.06480, -0.06641, 0.01672, -0.00287, 0.00308, 0.09982, -0.05679, -0.00249, -0.36034, 0.52385, -0.29759, 0.59539, -3.59641, -1.02499, -547.53774, 734.11470, 441.86760, -626.68255, -2255.81376, -1309.01028, -2025.69590, 2774.69901, 1711.21478, 1509.99797, -0.99274, 0.61858, -0.47634, -0.33034, 0.00261, 0.01183, -0.00038, 0.11687, 0.00994, -0.01122, 0.03482, -0.01942, -0.11557, 0.38237, -0.17826, 0.00830, 0.01193, -0.05469, 0.01557, 0.01747, 0.02730, -0.01182, -0.11284, 0.12939, -0.05621, -0.01615, 0.04258, 0.01058, -0.01723, 0.00963, 0.20666, 0.11742, 0.07830, -0.02922, -0.10659, -0.05407, 0.07254, -0.13005, -0.02365, 0.24583, 0.31915, 1.27060, 0.00009, -0.21541, -0.55324, -0.45999, -1.45885, 0.86530, 0.85932, 1.92999, -0.00755, -0.00715, -0.02004, -0.00788, 0.01539, 0.00837, 0.27652, -0.50297, -0.26703, -0.28159, 0.03950, 0.07182, -0.07177, 0.14140, 0.07693, 0.07564, -0.01316, -0.01259, 0.01529, 0.07773, -90.74225, -378.15784, -510.30190, -52.35396, -89.15267, 415.56828, 181.52119, 54.01570, -0.01093, -0.05931, -0.01344, -0.02390, 0.01432, -0.02470, -0.01509, -0.01346, 0.03352, 0.02248, 0.02588, -0.00948, 0.03610, 0.17238, 0.02909, -0.04065, 0.00155, -0.07025, -0.09508, 0.14487, 0.12441, 0.16451, 0.00001, -0.00005, -0.00982, -0.01895, -0.16968, 0.36565, 0.20234, 0.17789, -0.04519, -0.00588, 0.01268, 0.00107, -56.32137, -58.22145, -80.55270, 28.14532, 11.43301, 52.05752, 17.79480, -2.61997, -0.00005, -0.02629, 0.01080, -0.00390, 0.00744, 0.03132, 0.01156, -0.01621, 0.02162, 0.02552, 0.00075, -0.02497, 0.02495, 0.00830, 0.03230, 0.00103, -14.84965, -4.50200, -9.73043, 9.40426, 4.08054, 5.38571, 1.53731, -1.01288, 0.21076, 1.74227, 0.79760, 0.39583, 0.09879, -0.16736, -0.00723, -0.01536, }; static double FAR tabb[] = { -364.49380, -47.17612, -554.97858, -430.63121, 596.44312, -3.94434, -7.43169, -0.06665, -2.23987, 0.10366, -0.05567, -0.01463, 0.01908, -0.02611, -0.00350, -0.01057, -0.00610, -0.00015, 0.00002, 0.00010, 0.00033, 0.00007, -0.00000, -0.00010, -0.00004, 0.00012, 0.00002, -0.00014, -0.00048, -0.00003, -0.00007, 0.00008, -0.00005, -0.00043, -0.00003, -0.00010, -0.00004, 0.00001, 0.00001, -0.00003, -0.00003, 0.00004, 0.00007, -0.00041, 0.00031, 0.00076, 0.00062, 0.00001, -0.00002, 0.00035, 0.00053, 0.00026, 0.00019, 0.00020, 0.00010, 0.02936, 0.09624, -0.01153, 0.01386, 0.00551, -0.00690, 0.00196, 0.00148, -0.00408, -0.00673, -0.00067, -0.00152, -0.00014, -0.00005, 0.00000, 0.00005, -0.00116, 0.00276, -0.00391, 0.00983, -0.01327, -0.01986, -0.00003, 0.00001, 0.01104, 0.00631, -0.01364, 0.01152, -0.00439, 0.01103, -0.00546, 0.00181, -0.00039, -0.00083, 0.00007, 0.00002, -0.00010, -0.00008, 0.00005, 0.00002, -0.00584, 0.00512, -0.00722, -0.00174, 0.00101, -0.00316, -0.02229, -0.02797, -0.10718, 0.05741, 0.11403, 0.10033, 0.00036, -0.00022, 0.00787, 0.01191, 0.01756, -0.02121, -0.00169, -0.00364, 0.00070, -0.00051, 0.01850, -0.06836, 0.21471, 0.00162, -0.29165, 0.16799, -0.00002, 0.00011, -0.00075, -0.00077, -0.00675, -0.00814, 0.00029, -0.00599, 0.00107, 0.00013, 0.00010, -0.00002, 0.00005, 0.00020, 0.00355, 0.00306, -0.00013, -0.00061, -0.02950, -0.00847, 0.01037, -0.04783, 0.04237, 0.11662, -0.00331, 0.00207, -0.00107, -0.00264, 0.00072, -0.00023, -0.00151, 0.00146, -0.12847, 0.02294, 0.03611, 0.19705, 0.16855, -0.28279, -0.00000, -0.00002, -0.00525, -0.03619, 0.05048, -0.00481, -0.00745, 0.04618, 0.00286, 0.00443, 0.00521, -0.00351, 0.00200, 0.00474, -0.00149, 0.00031, -0.00003, 0.00029, 0.00686, 0.02467, 0.04275, -0.02223, 0.02282, -0.04228, 0.03312, 0.01847, -0.01253, 0.01601, 0.00076, 0.00091, 0.00045, 0.00035, 0.00658, 0.01586, -0.00310, 0.00628, -0.00045, 0.00316, -0.01602, -0.00340, -0.01744, 0.04907, 0.06426, 0.02275, -0.00217, -0.00377, -0.00091, 0.00037, 0.00040, -0.00003, -0.00017, -0.00027, 0.00366, 0.02693, -0.00934, 0.00386, 0.00616, -0.00037, 0.02028, 0.02120, -0.01768, 0.02421, 0.00102, 0.00877, 0.00012, 0.00030, -0.00019, -0.02165, 0.01245, -0.00742, 0.00172, 0.00320, -0.17117, -0.12908, -0.43134, 0.15617, 0.21216, 0.56432, 0.01139, -0.00937, -0.00058, -0.00337, -0.00999, 0.01862, -0.00621, -0.00080, -0.00025, -0.00140, 0.09250, 0.01173, -0.03549, 0.14651, -0.01784, 0.00945, 0.00000, -0.00006, -0.00500, 0.00086, 0.01079, -0.00002, -0.00012, -0.00029, -0.02661, 0.00140, -0.00524, -0.00460, -0.00352, -0.00563, -0.00277, -0.00052, -0.10171, -0.02001, 0.00045, 0.00265, -0.00082, 0.00160, -0.00302, -0.00434, -0.00022, -0.00134, 0.03285, 0.02964, -0.05612, -0.00668, -0.01821, 0.06590, 0.00039, 0.00061, -0.13531, -0.03831, 0.02553, 0.02130, -0.00336, 0.00468, -0.04522, -0.05540, 0.00129, -0.01767, 0.00181, 0.00031, -0.00011, -0.00034, -0.00146, 0.01101, -0.00030, 0.00240, -0.00039, 0.00072, -0.01954, -0.03822, 0.09682, -0.04541, -0.01567, 0.09617, -0.03371, 0.33028, -0.12102, 0.05874, -0.00990, -0.02236, 0.00109, 0.00158, -0.00482, 0.00019, -0.00036, 0.00004, 0.00024, 0.00201, 0.00017, 0.00011, -0.00012, 0.00002, -0.00323, -0.01062, -0.00130, 0.00091, 0.00056, -0.00017, 0.00774, 0.00601, 0.02550, 0.01700, -0.84327, 0.77533, -0.71414, -0.50643, -473.30877, -1504.79179, -458.52274, -865.82237, -417.34994, -681.03976, 765.50697, -1653.67165, 4427.33176, 710.53895, -5016.39367, 4280.60361, 0.33957, 0.38390, -0.38631, 0.81193, 0.00154, -0.00043, 0.01103, -0.00017, -0.00046, 0.00221, 0.00059, 0.00014, 0.00160, 0.00475, 0.06191, -0.13289, 0.02884, -0.00566, -0.01572, 0.23780, -0.05140, -0.03228, -0.00716, -0.00978, -0.01048, 0.01317, -0.01267, -0.01198, 0.00037, -0.00330, -0.02305, 0.00355, -0.00121, -0.00496, -0.04369, -0.01343, 0.05347, -0.12433, 0.02090, 0.17683, 0.00028, -0.00490, -0.02778, -0.05587, -0.01658, 0.05655, 0.00204, -0.00092, 0.00020, 0.00014, -0.00603, -0.03829, 0.00778, -0.00588, -0.00266, 0.00097, -0.02158, -0.07742, 0.09306, -0.01827, -0.01048, 0.07885, -0.02485, -0.02505, 0.00471, -0.01026, 0.06663, 0.01110, 0.00469, -0.05347, -0.00016, -0.00013, 0.02622, 0.02273, -0.01009, 0.01391, -0.01042, -0.00444, -0.04293, -0.00767, -0.00154, -0.01739, 0.00353, -0.00763, -0.00060, 0.00010, -0.00053, -0.00146, -0.05317, 0.05760, -0.01801, -0.02099, -0.02611, -0.01836, -0.00256, 0.00812, -0.00145, 0.00054, -0.00008, 0.00015, -0.04087, 0.08860, -0.05385, -0.02134, 0.02771, 0.02441, -0.00234, 0.01571, -0.00260, 0.00097, 0.10151, 0.49378, -0.28555, 0.11428, -0.00286, 0.01224, 0.00160, 0.00069, 0.00000, -0.00040, -0.13286, 0.00448, 0.01225, -0.00568, 0.00341, 0.00224, -0.23483, -0.07859, 0.30733, -0.21548, -0.02608, 0.00756, 0.09789, 0.02878, -0.11968, 0.08981, 0.02046, -0.00888, 0.02955, 0.01486, -0.00981, 0.01542, -0.01674, -0.01540, 0.00019, -0.00449, -0.02140, 0.00638, 0.00112, -0.00730, -0.08571, 0.13811, -0.16951, -0.02917, -0.03931, -0.32643, -68.64541, -81.00521, -47.97737, 15.75290, 181.76392, -36.00647, -48.32098, -259.02226, -265.57466, 554.05904, 0.09017, 0.18803, -0.12459, 0.10852, 0.00211, 0.00002, 0.00304, -0.00370, 0.00174, 0.00279, 0.00139, 0.00095, 0.04881, 0.00262, -0.01020, 0.03762, 0.00987, 0.00612, 0.00054, -0.00036, 0.00009, -0.00094, 0.02279, 0.01785, -0.00778, 0.01263, 0.00040, -0.00112, -0.00452, -0.00662, 0.00483, -0.00030, -0.00054, -0.00205, -0.00052, -0.00362, -0.00215, -0.00247, 0.02893, -0.01965, -0.00004, 0.04114, -0.00284, -0.00103, 0.01827, -0.07822, 0.18010, 0.04805, -0.21702, 0.18808, 0.00095, -0.00132, -0.01488, 0.00746, 0.00198, 0.00190, 0.01032, 0.03392, 0.04318, -0.07332, -0.01004, 0.00787, -0.00308, -0.01177, -0.01431, 0.02659, 0.00273, -0.00374, -0.02545, 0.00644, 28.68376, 13.74978, 29.60401, -47.98255, -65.91944, -18.48404, -1.73580, 64.67487, -0.02492, 0.00104, -0.00829, -0.00134, 0.00077, 0.00005, -0.00513, 0.00403, 0.00071, -0.00047, -0.00023, -0.00063, 0.00120, 0.00370, -0.00038, -0.00037, 0.00080, -0.00018, 0.00866, 0.00156, -0.01064, 0.02131, 0.00000, -0.00001, 0.00038, -0.00068, -0.00909, -0.02187, -0.02599, 0.05507, -0.00022, -0.01468, 0.00032, 0.00500, 9.86233, -2.85314, -2.25791, -13.83444, -12.38794, 3.79861, 2.76343, 6.63505, 0.00066, 0.00007, -0.00016, -0.00039, 0.00014, 0.00059, -0.00031, -0.00024, -0.00168, 0.00259, 0.00007, -0.00005, -0.00052, 0.00558, 0.00110, 0.01037, 1.59224, -2.37284, -2.00023, -2.28280, -1.49571, 1.48293, 0.60041, 0.56376, -0.54386, 0.03568, -0.10392, 0.31005, 0.09104, 0.03015, 0.00826, -0.00524, }; static double FAR tabr[] = { -816.07287, -381.41365, -33.69436, 177.22955, 0.18630, -8.29605, -11.15519, -0.57407, -3.53642, 0.16663, -0.06334, -0.03056, 0.02767, -0.04161, 0.03917, -0.02425, 0.00204, -0.00034, 0.00023, 0.00058, -0.00111, 0.00039, -0.00015, 0.00006, -0.00023, 0.00237, 0.00191, 0.00154, -0.00029, 0.00009, 0.00011, -0.00041, 0.00037, -0.00010, -0.00064, 0.00015, -0.00005, 0.00012, -0.00003, -0.00034, 0.00026, 0.00011, -0.00007, -0.00158, 0.00087, 0.00278, 0.00137, 0.00024, -0.00020, 0.00530, -0.00448, 0.00780, 0.00408, 0.00062, 0.00035, -1.35261, 0.79891, -0.81597, -0.43774, 0.14713, -0.27415, 0.05298, 0.02230, -0.02089, -0.01070, -0.00374, 0.00342, -0.00142, 0.00270, -0.00039, 0.00063, 0.16024, 0.27088, -0.32127, 0.27467, -0.16615, -0.24460, -0.00073, 0.00032, -0.05710, -0.05265, -0.06025, 0.05120, -0.05295, 0.23477, -0.08211, 0.04575, -0.00769, -0.01067, -0.00570, 0.00015, -0.00251, -0.00140, -0.00131, -0.00018, -0.12246, 0.15836, -0.13065, -0.03222, 0.00795, -0.04232, -0.36585, -0.31154, 0.68504, -0.96006, 1.19304, 0.88631, 0.00132, 0.00046, 0.13105, 0.04252, 0.05164, -0.06837, -0.01351, -0.01458, 0.00376, -0.00557, 0.28532, -0.17290, -0.53946, -0.79365, -0.95246, 0.74984, 0.00019, 0.00132, -0.00163, -0.00295, -0.40106, -0.26573, -0.00155, -0.22655, 0.04349, -0.00376, 0.00149, -0.00001, 0.00523, 0.00078, 0.01203, 0.00558, -0.00708, 0.00520, -0.36428, -1.28827, 1.50845, -0.83063, 0.58802, 0.89998, -0.55256, 0.01255, -0.15169, -0.26715, 0.06061, -0.04122, -0.00397, 0.00534, -0.52576, 1.22031, 1.44098, 0.92406, 0.67214, -0.85486, -0.00010, 0.00001, 0.28820, -0.84198, 0.78291, 0.00251, 0.02398, 0.32093, -0.02331, 0.10109, -0.07555, 0.03557, -0.61580, 0.43399, -0.43779, -0.26390, 0.06885, -0.13803, 0.17694, 0.19245, 0.15119, -0.05100, 0.49469, -0.45028, 0.33590, 0.15677, -0.04702, 0.10265, -0.00942, -0.00580, -0.00555, -0.00252, -0.32933, 0.92539, -0.91004, -0.04490, -0.01812, -0.37121, 0.34695, 0.50855, -0.24721, 0.86063, -0.84747, 0.01983, 0.01948, 0.02039, 0.00748, -0.00727, -0.00271, 0.00220, 0.00309, 0.00196, 0.02030, 0.17201, -0.03716, 0.02801, 0.01871, 0.00002, 0.31736, 1.17319, -1.42245, 0.73416, -0.52302, -0.85056, 0.00522, -0.00126, 0.33571, 0.34594, -0.07709, 0.21114, -0.04066, -0.01742, 1.72228, 1.46934, -3.06437, 5.06723, -6.53800, -3.55839, -0.06933, 0.13815, 0.03684, 0.03284, -0.04841, 0.09571, -0.02350, 0.00418, 0.01302, 0.00579, 0.73408, 0.64718, -1.37437, 2.04816, -2.70756, -1.52808, 0.00523, -0.00166, 0.25915, 0.06900, -0.02758, 0.10707, 0.00062, 0.00744, -0.08117, 0.04840, -0.01806, -0.00637, 0.03034, -0.12414, 0.03419, -0.00388, 10.92603, 0.48169, -0.01753, -0.12853, -0.03207, -0.00801, 0.03904, -0.03326, 0.01033, 0.00366, 0.17249, 0.20846, -0.38157, 0.54639, -0.68518, -0.36121, -0.01043, -0.00186, -3.33843, -0.16353, 0.03462, 0.06669, -0.01305, 0.01803, -0.22703, -0.52219, 0.11709, -0.19628, 0.03410, 0.01741, 0.00338, 0.00265, 0.63213, 0.08944, 0.00236, 0.01829, 0.00546, 0.00218, 0.00073, -0.72570, 0.63698, -0.13340, 0.04698, 0.29716, -0.13126, 1.27705, -0.40980, 0.27400, -0.04525, -0.05529, -0.03249, -0.01696, -0.02314, -0.00076, 0.00510, 0.00764, -0.01847, -0.01021, 0.01688, -0.00044, 0.00531, -0.00016, -0.01219, -0.02903, -0.00361, 0.00299, 0.00504, -0.00153, -0.53625, -0.32460, 0.10642, -0.22070, -2.21651, -0.66036, -1.74652, -2.08198, -6810.78679, 967.02869, -3915.97140, 291.65905, 372.99563, 1196.01966, 5108.01033, -3172.64698, -7685.78246, -12789.43898, -17474.50562, 7757.84703, 3.13224, 1.84743, -0.38257, 2.40590, 0.01860, -0.01217, 0.03004, 0.00278, -0.00125, 0.00579, -0.02673, -0.00112, 0.00662, 0.01374, -0.02729, 0.13109, -0.02836, 0.00877, 0.12171, -0.27475, 0.34765, 0.15882, -0.12548, 0.02603, 0.00710, 0.06538, -0.04039, -0.03257, -0.00186, -0.00880, 0.16643, 0.00707, 0.01918, 0.07156, -0.20459, -0.85107, 1.01832, -0.47158, 0.32582, 0.63002, -0.00282, -0.00711, -0.19695, 0.15053, 0.15676, 0.17847, 0.00071, 0.00286, -0.00039, 0.00083, 0.02009, 0.17859, -0.03894, 0.02805, 0.02379, 0.00752, 0.17529, -0.57783, 0.53257, -0.02829, 0.03211, 0.21777, 0.13813, 0.16305, -0.02996, 0.06303, 0.21058, -0.02659, 0.02596, -0.08808, -0.00389, 0.00586, 0.08986, 0.09204, -0.01480, 0.04031, 0.06115, 0.18366, 0.25636, 0.06905, 0.00719, 0.11391, 0.00636, -0.01113, -0.02808, 0.00150, -0.01219, 0.00832, 0.28626, -0.09573, 0.10481, 0.16559, -0.94578, 1.26394, 0.08846, -0.01623, 0.00082, -0.02640, -0.00347, 0.00798, 0.12873, -0.21248, 0.27999, 0.14348, 0.44082, 0.10453, 0.04362, 0.25332, -0.06077, 0.00555, -0.06947, -0.05511, -10.08703, -0.10614, 0.04059, 0.21355, 0.05632, 0.00871, 0.01599, -0.00531, 0.36835, -0.03530, 0.09519, -0.04961, 0.02568, 0.08613, 0.57033, 0.84599, 1.27123, -0.41266, -0.36937, -0.00655, -0.16547, -0.24000, -0.35213, 0.13345, 0.05870, -0.01524, 0.06419, 0.04136, -0.00681, 0.02606, -0.02519, -0.02732, -0.00105, -0.00677, -0.03891, 0.00106, 0.00087, -0.02256, -0.20834, -0.14624, -0.23178, -0.11786, 0.32479, -1.41222, -303.74549, -202.79324, 260.20290, 184.84320, 536.68016, -881.56427, -1125.64824, -791.09928, -596.61162, 659.35664, 0.24561, 0.39519, -0.12601, 0.18709, -0.00700, 0.00136, 0.30750, 0.00009, 0.00443, 0.00384, 0.01170, 0.02078, 0.15043, 0.04802, 0.00386, 0.06942, 0.02107, 0.00495, -0.01067, 0.00951, 0.00937, 0.01996, 0.04922, 0.04337, -0.00583, 0.02110, -0.00691, 0.02793, -0.00364, -0.00682, -0.09143, 0.15369, 0.02043, 0.05451, 0.04053, -0.08179, 0.09645, 0.05330, -0.10149, -0.01594, -0.96773, 0.13660, 0.17326, 0.00013, 0.20990, -0.23184, -0.38407, -0.64733, -0.84754, 0.38889, 0.00310, -0.00340, 0.00970, -0.00788, -0.01111, 0.00677, 0.18147, 0.09968, 0.10170, -0.09233, -0.03165, 0.01790, -0.04727, -0.02364, -0.02546, 0.02451, 0.00442, -0.00426, -0.02540, 0.00471, 130.42585, -31.30051, 17.99957, -174.75585, -142.96798, -27.89752, -19.42122, 59.14872, -0.01899, 0.00388, -0.01265, 0.00694, 0.01966, 0.01140, -0.00439, 0.00503, -0.01867, 0.02826, 0.00752, 0.02012, -0.14734, 0.01909, 0.03312, 0.02327, 0.05843, 0.00061, -0.06958, -0.05798, -0.09174, 0.06242, 0.00003, 0.00001, 0.00670, -0.00305, -0.13637, -0.06058, -0.06372, 0.07257, 0.00209, -0.01369, -0.00044, 0.00355, 17.90079, -17.48270, -8.77915, -24.54483, -15.67123, 3.62668, 0.52038, 5.13220, 0.02574, 0.00003, 0.00339, 0.00919, -0.02778, 0.00464, 0.01429, 0.01003, -0.01661, 0.01327, 0.02216, 0.00034, -0.00389, 0.01076, -0.00035, 0.00983, 1.23731, -4.18017, -2.61932, -2.66346, -1.45540, 1.10310, 0.23322, 0.40775, -0.43623, 0.06212, -0.09900, 0.19456, 0.03639, 0.02566, 0.00309, -0.00116, }; static char FAR args[] = { 0, 4, 3, 4, 3, -8, 4, 3, 5, 2, 3, 5, 2, -6, 3, -4, 4, 0, 2, 2, 5, -5, 6, 1, 3, 12, 3,-24, 4, 9, 5, 0, 3, 2, 2, 1, 3, -8, 4, 1, 3, 11, 3,-21, 4, 2, 5, 0, 3, 3, 2, -7, 3, 4, 4, 0, 3, 7, 3,-13, 4, -1, 5, 1, 3, 1, 3, -2, 4, 2, 6, 0, 3, 1, 2, -8, 3, 12, 4, 1, 3, 1, 4, -8, 5, 4, 6, 0, 3, 1, 4, -7, 5, 2, 6, 0, 3, 1, 4, -9, 5, 7, 6, 0, 1, 1, 7, 0, 2, 1, 5, -2, 6, 0, 3, 1, 3, -2, 4, 1, 5, 0, 3, 3, 3, -6, 4, 2, 5, 1, 3, 12, 3,-23, 4, 3, 5, 0, 2, 8, 3,-15, 4, 3, 2, 1, 4, -6, 5, 2, 3, 2, 2, -7, 3, 7, 4, 0, 2, 1, 2, -3, 4, 2, 2, 2, 5, -4, 6, 0, 1, 1, 6, 1, 2, 9, 3,-17, 4, 2, 3, 2, 3, -4, 4, 2, 5, 0, 3, 2, 3, -4, 4, 1, 5, 0, 2, 1, 5, -1, 6, 0, 2, 2, 2, -6, 4, 2, 2, 1, 3, -2, 4, 2, 2, 2, 5, -3, 6, 0, 1, 2, 6, 1, 2, 3, 5, -5, 6, 1, 1, 1, 5, 2, 3, 4, 3, -8, 4, 2, 5, 0, 2, 1, 5, -5, 6, 0, 2, 7, 3,-13, 4, 2, 2, 3, 2, -9, 4, 0, 2, 2, 5, -2, 6, 0, 1, 3, 6, 0, 2, 1, 4, -5, 5, 0, 2, 2, 3, -4, 4, 2, 2, 6, 3,-11, 4, 2, 2, 4, 5, -5, 6, 0, 1, 2, 5, 2, 3, 1, 4, -3, 5, -3, 6, 0, 2, 3, 3, -6, 4, 2, 2, 1, 4, -4, 5, 1, 2, 5, 3, -9, 4, 2, 1, 3, 5, 1, 2, 4, 3, -8, 4, 2, 3, 1, 4, -4, 5, 2, 6, 0, 3, 1, 4, -1, 5, -5, 6, 0, 2, 4, 3, -7, 4, 2, 2, 1, 4, -3, 5, 2, 3, 1, 4, -5, 5, 5, 6, 1, 3, 1, 4, -4, 5, 3, 6, 0, 3, 1, 4, -3, 5, 1, 6, 0, 2, 5, 3,-10, 4, 1, 1, 4, 5, 0, 2, 3, 3, -5, 4, 2, 3, 1, 4, -3, 5, 2, 6, 0, 2, 1, 4, -5, 6, 2, 2, 1, 4, -2, 5, 2, 3, 1, 4, -4, 5, 5, 6, 1, 2, 6, 3,-12, 4, 1, 2, 1, 4, -4, 6, 0, 2, 2, 3, -3, 4, 2, 2, 10, 3,-18, 4, 0, 2, 1, 4, -3, 6, 1, 3, 1, 4, -2, 5, 2, 6, 0, 2, 7, 3,-14, 4, 1, 3, 1, 4, 1, 5, -5, 6, 1, 2, 1, 4, -1, 5, 0, 3, 1, 4, -3, 5, 5, 6, 1, 3, 1, 4, 2, 5, -7, 6, 1, 2, 1, 4, -2, 6, 2, 3, 1, 4, -2, 5, 3, 6, 0, 2, 1, 3, -1, 4, 0, 2, 2, 2, -7, 4, 1, 2, 9, 3,-16, 4, 2, 2, 1, 4, -3, 7, 0, 2, 1, 4, -1, 6, 0, 3, 1, 4, -2, 5, 4, 6, 1, 2, 1, 2, -4, 4, 2, 2, 8, 3,-16, 4, 2, 2, 1, 4, -2, 7, 0, 3, 3, 3, -5, 4, 2, 5, 0, 3, 1, 4, 1, 5, -3, 6, 0, 2, 1, 4, -2, 8, 0, 2, 1, 4, -1, 7, 0, 2, 1, 4, -1, 8, 0, 3, 3, 2, -7, 3, 3, 4, 0, 3, 2, 2, 1, 3, -7, 4, 0, 3, 1, 4, 1, 6, -3, 7, 0, 3, 1, 4, 2, 5, -5, 6, 1, 3, 4, 3, -7, 4, 3, 5, 1, 1, 1, 4, 5, 3, 4, 3, -9, 4, 3, 5, 1, 3, 1, 4, -2, 5, 5, 6, 0, 3, 3, 2, -7, 3, 5, 4, 0, 3, 1, 3, -1, 4, 2, 6, 0, 3, 1, 4, 1, 5, -2, 6, 0, 3, 3, 3, -7, 4, 2, 5, 0, 2, 8, 3,-14, 4, 1, 2, 1, 2, -2, 4, 1, 2, 1, 4, 1, 6, 1, 2, 9, 3,-18, 4, 1, 2, 2, 2, -5, 4, 1, 2, 1, 3, -3, 4, 2, 2, 1, 4, 2, 6, 0, 2, 1, 4, 1, 5, 1, 3, 4, 3, -9, 4, 2, 5, 1, 2, 7, 3,-12, 4, 1, 2, 2, 4, -5, 5, 0, 2, 2, 3, -5, 4, 2, 2, 6, 3,-10, 4, 1, 2, 1, 4, 2, 5, 1, 3, 2, 4, -5, 5, 2, 6, 0, 2, 3, 3, -7, 4, 1, 2, 2, 4, -4, 5, 0, 2, 5, 3, -8, 4, 1, 2, 1, 4, 3, 5, 0, 3, 2, 4, -4, 5, 2, 6, 0, 3, 2, 4, -1, 5, -5, 6, 0, 2, 4, 3, -6, 4, 1, 2, 2, 4, -3, 5, 0, 3, 2, 4, -5, 5, 5, 6, 1, 3, 2, 4, -4, 5, 3, 6, 0, 2, 3, 3, -4, 4, 1, 2, 2, 4, -5, 6, 2, 2, 2, 4, -2, 5, 1, 3, 2, 4, -4, 5, 5, 6, 1, 2, 2, 4, -4, 6, 0, 2, 2, 3, -2, 4, 0, 2, 2, 4, -3, 6, 1, 2, 2, 4, -1, 5, 1, 2, 2, 4, -2, 6, 0, 1, 1, 3, 1, 2, 2, 4, -1, 6, 0, 2, 1, 2, -5, 4, 1, 2, 8, 3,-17, 4, 1, 3, 2, 4, 2, 5, -5, 6, 1, 3, 4, 3, -6, 4, 3, 5, 1, 3, 10, 3,-17, 4, 3, 6, 0, 1, 2, 4, 4, 3, 4, 3,-10, 4, 3, 5, 1, 2, 8, 3,-13, 4, 0, 2, 1, 2, -1, 4, 0, 2, 2, 4, 1, 6, 0, 2, 2, 2, -4, 4, 0, 2, 1, 3, -4, 4, 1, 2, 2, 4, 1, 5, 0, 2, 7, 3,-11, 4, 0, 2, 3, 4, -5, 5, 0, 2, 2, 3, -6, 4, 1, 2, 6, 3, -9, 4, 0, 2, 2, 4, 2, 5, 0, 2, 3, 4, -4, 5, 0, 2, 5, 3, -7, 4, 0, 2, 4, 3, -5, 4, 1, 2, 3, 4, -3, 5, 1, 2, 3, 3, -3, 4, 0, 2, 3, 4, -2, 5, 2, 3, 3, 4, -4, 5, 5, 6, 0, 2, 2, 3, -1, 4, 0, 2, 3, 4, -3, 6, 0, 2, 3, 4, -1, 5, 1, 2, 3, 4, -2, 6, 0, 2, 1, 3, 1, 4, 1, 2, 3, 4, -1, 6, 0, 3, 4, 3, -5, 4, 3, 5, 0, 1, 3, 4, 3, 3, 4, 3,-11, 4, 3, 5, 0, 1, 1, 2, 0, 2, 2, 2, -3, 4, 0, 2, 1, 3, -5, 4, 0, 2, 4, 4, -5, 5, 0, 2, 6, 3, -8, 4, 0, 2, 4, 4, -4, 5, 0, 2, 5, 3, -6, 4, 0, 2, 4, 3, -4, 4, 0, 2, 4, 4, -3, 5, 1, 3, 6, 3, -8, 4, 2, 5, 0, 2, 3, 3, -2, 4, 0, 2, 4, 4, -2, 5, 1, 2, 4, 4, -1, 5, 0, 2, 1, 3, 2, 4, 0, 1, 4, 4, 3, 2, 2, 2, -2, 4, 0, 2, 7, 3, -9, 4, 0, 2, 5, 4, -5, 5, 0, 2, 6, 3, -7, 4, 0, 2, 5, 4, -4, 5, 0, 2, 5, 3, -5, 4, 0, 2, 5, 4, -3, 5, 0, 2, 5, 4, -2, 5, 0, 1, 5, 4, 3, 1, 6, 4, 2, 1, 7, 4, 0, -1 }; /* Total terms = 201, small = 199 */ struct plantbl mar404 = { 9, { 0, 5, 12, 24, 9, 7, 3, 2, 0,}, 5, args, tabl, tabb, tabr, 1.5303348827100001e+00, 3652500.0, 1.0 }; astronomical-almanac-5.6/mer404.c0000644000175000017500000006777506253703034015044 0ustar jrvjrv /* First date in file = 1228000.50 Number of records = 397276.0 Days per record = 4.0 Julian Years Lon Lat Rad -1349.9 to -1000.0: 0.42 0.18 0.16 -1000.0 to -500.0: 0.37 0.19 0.13 -500.0 to 0.0: 0.35 0.17 0.12 0.0 to 500.0: 0.34 0.15 0.10 500.0 to 1000.0: 0.28 0.14 0.09 1000.0 to 1500.0: 0.34 0.14 0.09 1500.0 to 2000.0: 0.35 0.13 0.09 2000.0 to 2500.0: 0.38 0.12 0.12 2500.0 to 3000.0: 0.42 0.13 0.16 3000.0 to 3000.8: 0.252 0.087 0.115 */ #include "plantbl.h" static double FAR tabl[] = { 35.85255, -163.26379, 53810162857.56026, 908082.18475, 0.05214, -0.07712, 1.07258, 0.04008, 0.49259, 0.00230, 0.02324, 0.05869, 0.24516, 0.22898, -0.06037, 0.13023, 0.00331, -0.03576, 0.06464, 0.00089, 0.03103, 0.05078, -0.01133, 0.01520, 0.14654, 0.07538, 0.25112, -0.24473, -0.17928, -0.53366, -0.06367, 0.20458, -0.42985, 0.14848, -0.35317, -0.61364, 0.00325, -0.08617, -0.23180, 0.08576, 0.22995, 0.43569, 1.92114, 2.89319, -5.55637, 4.70329, -4.91411, -5.45521, 0.02607, 0.04468, -0.05439, 0.13476, -0.07329, -0.00985, -0.00278, 0.05377, 0.07474, -0.09658, 0.29818, 0.20422, -0.29074, 0.44962, -0.15411, -0.04287, 0.29907, -1.02948, 3.62183, 0.84869, -0.08157, 0.02754, -0.03610, -0.12909, 0.09195, -0.04424, -0.08845, 0.09347, -0.27140, 0.08185, 0.24783, 0.19543, -0.25154, 0.41371, -0.00046, 0.01524, 0.04127, 0.06663, 0.43023, 0.11790, 0.04427, 0.05329, 0.00411, -0.71074, -0.07111, -0.09824, 0.01264, -0.02075, -0.00068, -0.01678, 0.01186, 0.00181, 0.00302, -0.21963, -0.06412, -0.10155, -0.36856, 0.20240, 0.32282, 0.65133, -0.07178, -0.01876, 0.13399, -0.39522, 1.28413, 0.33790, 0.05040, -0.01679, -0.00794, 0.01117, 0.02630, 0.00575, -0.07113, -0.11414, 0.16422, -0.23060, 0.35198, 0.05409, 1.11486, -0.35833, 0.87313, 1.66304, -1.28434, 0.72067, 0.01400, 0.00971, 0.21044, -0.87385, 3.20820, 0.67957, -0.01716, 0.00111, -0.13776, -0.02650, -0.06778, 0.00908, 0.00616, -0.04520, -0.31625, -0.61913, 0.36184, 0.09373, 0.00984, -0.03292, 0.01944, 0.00530, 0.00243, -0.00123, 0.01589, 0.02223, -0.02992, -0.01086, 4356.04809, -5859.86328, 2918.27323, -4796.67315, 510.24783, -1220.02233, 127.48927, 250.10654, 3250.43013, -904.27614, -5667.40042, -22634.00922, -82471.79425, 18615.92342, 0.01941, 0.00372, 0.01830, -0.00652, -0.02548, -0.01157, 0.00635, 0.02343, -0.00980, 0.00961, 0.12137, 0.10068, 0.16676, -0.07257, -0.07267, -0.13761, 0.25305, -0.28112, -0.07974, 0.07866, -0.41726, 0.49991, -1.55187, -1.14150, 1.54754, -2.35141, -0.00862, 0.00808, 0.00218, -0.03726, 0.06914, -0.08986, -0.00501, 2.09577, -0.01409, -0.01842, 0.04138, 0.05961, -0.12276, -0.04929, -0.03963, -0.06080, -0.27697, -0.09329, -0.01011, 0.00295, -0.01374, 0.01328, -0.00171, 0.25815, 0.01446, 0.00782, 0.17909, -0.04683, 0.03765, -0.04990, 0.00036, 0.00528, 0.05508, -0.01369, -0.11751, -0.10624, -0.14448, 0.10522, -0.00884, 0.43006, 0.01162, 0.01659, -0.00076, 0.10143, 0.55779, 0.05510, 0.12350, -0.34025, 0.01320, 0.92985, -0.00026, -0.03426, 0.01305, 0.00041, 0.13187, -0.11903, 0.00058, 0.09877, -33.10230, -41.96782, -268.28908, 174.29259, 731.20089, 1508.07639, 5223.99114, -3008.08849, -3909.34957, -9646.69156, 0.02988, 0.03182, 0.07149, 0.04513, -0.02356, -0.01641, -0.03188, -0.03711, 0.15084, -0.22436, 0.61987, 0.25706, 0.02425, 0.01200, -0.05543, -0.14435, -0.53398, 0.10997, 0.00465, -0.01893, 0.01260, -0.01314, 0.00650, -0.05499, -0.06804, 0.01608, 0.02134, 0.04160, 0.00636, 0.01293, -0.03470, -0.02697, -0.11323, 0.02409, -0.02618, 0.00827, 0.01879, 0.16838, 0.08978, 0.01934, -0.23564, 0.05565, 0.03686, 0.02644, -0.02471, 0.00558, -140.22669, -120.40692, -501.88143, 434.05868, 1044.54998, 1162.72084, 1527.78437, -882.37371, -0.00768, 0.02213, -0.04090, 0.16718, -0.05923, -0.12595, 0.01154, -0.00025, -0.00776, -0.01653, -0.01213, -0.02773, 0.00344, 0.02180, -0.02558, -0.05682, -0.00490, 0.01050, 38.75496, -78.17502, -189.90700, -136.33371, -249.94062, 319.76423, 205.73478, 272.64549, -0.01132, -0.01071, -0.04607, -0.00390, 0.02903, -0.02070, 0.01326, -0.00901, 35.38435, 7.45358, 31.08987, -70.52685, -92.13879, -51.58876, -51.80016, 48.98102, -0.00124, -0.01159, 0.47335, 13.71886, 23.71637, 5.55804, 10.06850, -25.65292, -11.85300, -10.20802, -4.72861, 1.27151, -0.47322, 7.46754, 6.99528, 1.79089, 2.05336, -2.90866, -1.97528, 0.72236, -0.25084, 1.90269, 0.72127, 0.41354, -0.30286, -0.53125, -0.50883, -0.01200, -0.08301, 0.18083, -0.04286, -0.10963, -0.04544, -0.01645, -0.00013, -0.00986, }; static double FAR tabb[] = { 68.33369, 422.77623, -2057.26405, -2522.29068, -0.00030, -0.00009, 0.02400, -0.06471, 0.02074, -0.00904, 0.00044, 0.00261, -0.00174, -0.00088, -0.00027, 0.00003, 0.00005, -0.00004, -0.00036, 0.00200, 0.01432, 0.01199, 0.00006, -0.00004, 0.00236, 0.00803, 0.01235, 0.00406, -0.03253, 0.00179, -0.00243, 0.00132, -0.00352, 0.00011, -0.00146, -0.01154, 0.00824, -0.01195, -0.01829, -0.00465, 0.12540, 0.09997, 0.00400, 0.00288, -0.02848, 0.01094, -0.02273, -0.07051, 0.01305, 0.01078, -0.00119, 0.00136, -0.00107, -0.00066, 0.00097, -0.00315, 0.00120, 0.00430, -0.00710, -0.00157, 0.06052, -0.04777, 0.00192, -0.00229, -0.02077, 0.00647, 0.06907, 0.07644, -0.00717, 0.00451, 0.00052, -0.00262, 0.00345, 0.00039, -0.00674, 0.00346, -0.02880, 0.00807, 0.00054, 0.00206, -0.01745, 0.00517, -0.00044, 0.00049, 0.01749, 0.01230, 0.01703, 0.01563, 0.00934, 0.02372, 0.01610, -0.01136, 0.00186, -0.00503, 0.00082, -0.00673, 0.00170, -0.00539, 0.00042, 0.00037, 0.00415, -0.00430, 0.00258, -0.00914, -0.01761, -0.00251, 0.15909, 0.13276, 0.02436, -0.00791, 0.00491, 0.03890, -0.02982, 0.05645, -0.00003, 0.00427, -0.00363, 0.00221, 0.00077, 0.00130, 0.00131, -0.00071, 0.00796, 0.00453, 0.01186, 0.01631, 0.12949, -0.02546, 0.03613, 0.32854, -0.43001, 0.01417, 0.00034, 0.00095, -0.03268, 0.04034, 0.11407, 0.15049, -0.00079, -0.00052, -0.04009, 0.00988, -0.00259, -0.00085, 0.00221, -0.00133, 0.00003, -0.01733, 0.01055, 0.01976, 0.00222, 0.00085, 0.00089, 0.00087, 0.00014, 0.00001, 0.00145, 0.00802, 0.00122, 0.00068, 947.79367, -1654.39690, 542.00864, -1281.09901, 90.02068, -318.36115, -87.67090, 92.91960, 376.98232, -419.10705, 5094.60412, 2476.97098, -18160.57888, 16010.48165, 0.00621, -0.00128, 0.00186, -0.00153, -0.00790, 0.00011, -0.00032, 0.00165, -0.00277, 0.00539, 0.00552, 0.00682, 0.01086, -0.00978, -0.02292, -0.01300, 0.02940, -0.04427, -0.02051, 0.04860, -0.05020, 0.29089, -0.50763, -0.04900, 0.11177, -0.41357, -0.00222, 0.00504, -0.00006, -0.00459, -0.00175, -0.02691, 0.05921, 0.18938, -0.00181, -0.00154, 0.00322, 0.00586, -0.01098, -0.00520, -0.00861, -0.01342, -0.02694, -0.00706, -0.00103, 0.00012, -0.00284, 0.00797, 0.00743, 0.02523, 0.00872, 0.00096, 0.03155, -0.01644, 0.00414, -0.00583, 0.00029, 0.00066, 0.00935, -0.00619, -0.02498, -0.01600, -0.03545, 0.07623, 0.01649, 0.06498, 0.00148, 0.00209, 0.00621, 0.02014, 0.17407, -0.05022, -0.03485, -0.17012, 0.06164, 0.20059, -0.00804, -0.01475, 0.00296, -0.00068, 0.01880, -0.03797, 0.00608, 0.02270, 5.89651, -6.62562, -37.41057, -10.51542, -47.22373, 95.76862, 494.45951, -5.37252, -3991.04809, -2886.97750, 0.01232, 0.00487, 0.03163, 0.00561, -0.01847, -0.00207, -0.10138, 0.01430, -0.04269, -0.22338, 0.24955, -0.02066, 0.01119, -0.00186, 0.03416, 0.01805, -0.12498, 0.10385, -0.00210, -0.01011, 0.00346, -0.00682, -0.00683, -0.02227, -0.01649, 0.01259, 0.01392, 0.01174, 0.00440, 0.00351, -0.02871, -0.00375, -0.03170, 0.02246, -0.00833, 0.00596, 0.04081, 0.06666, 0.05400, -0.02387, -0.07852, 0.05781, 0.01881, 0.00324, -0.00868, 0.00606, -6.52157, -19.74446, -72.46009, 43.12366, 321.78233, 215.45201, 452.61804, -1025.05619, 0.00119, 0.01169, 0.02239, 0.09003, -0.05329, -0.03974, 0.00688, -0.00421, -0.00676, -0.00515, -0.01171, -0.00952, 0.01337, 0.01270, -0.02791, -0.02184, 0.00058, 0.00679, 8.42102, -11.87757, -49.07247, -25.34584, -43.54829, 161.26509, 261.70993, 56.25777, 0.00568, 0.00871, -0.02656, 0.01582, 0.00875, -0.02114, 0.00464, -0.01075, 9.08966, 1.37810, 3.44548, -27.44651, -59.62749, -0.73611, -0.77613, 65.72607, -0.00664, -0.00723, 1.04214, 4.78920, 11.67397, -1.84524, -4.16685, -19.14211, -16.14483, 3.02496, -1.98140, 1.16261, 1.81526, 4.21224, 5.59020, -2.55741, -1.54151, -3.85817, -1.08723, 1.23372, 1.12378, 1.51554, 0.88937, -0.57631, -0.50549, -0.25617, -0.37618, 0.42163, 0.18902, 0.19575, -0.15402, -0.04062, -0.04017, 0.05717, -0.01665, -0.00199, }; static double FAR tabr[] = { -8.30490, -11.68232, 86.54880, 4361.05018, 0.00002, -0.00001, -0.01102, 0.00410, 0.00007, -0.00276, 0.00117, 0.00082, 0.00049, 0.00007, 0.00003, -0.00001, 0.00012, 0.00005, -0.00186, -0.00534, -0.03301, 0.01808, 0.00008, 0.00005, -0.00394, 0.00202, 0.02362, -0.00359, 0.00638, -0.06767, 0.00422, -0.00493, 0.00660, 0.00513, -0.00417, 0.00708, 0.05849, -0.00213, -0.07647, -0.16162, -0.30551, 0.13856, -0.02789, 0.01811, -0.04155, -0.06229, 0.05729, -0.03694, -0.03087, 0.01610, -0.00297, -0.00167, 0.00041, -0.00157, -0.00115, 0.00058, 0.00796, 0.00436, -0.01393, 0.02921, -0.05902, -0.02363, 0.00459, -0.01512, 0.10038, 0.02964, -0.08369, 0.34570, -0.00749, -0.02653, 0.01361, -0.00326, 0.00406, 0.00952, -0.00594, -0.00829, -0.02763, -0.09933, -0.04143, 0.05152, -0.08436, -0.05294, -0.00329, -0.00016, -0.04340, 0.02566, -0.03027, 0.10904, 0.03665, -0.03070, 0.23525, 0.00182, 0.03092, -0.02212, 0.01255, 0.00777, -0.01025, 0.00042, -0.00065, 0.00440, 0.08688, 0.00136, 0.05700, -0.03616, -0.11272, -0.20838, -0.37048, 0.18314, 0.00717, -0.02911, 0.15848, 0.05266, -0.13451, 0.51639, 0.00688, 0.02029, 0.00596, 0.00423, -0.00253, 0.01196, 0.05264, -0.03301, 0.10669, 0.07558, -0.02461, 0.16282, -0.18481, -0.57118, 0.85303, -0.44876, 0.37090, 0.65915, -0.00458, 0.00660, 0.41186, 0.09829, -0.31999, 1.51149, -0.00052, -0.00809, 0.01384, -0.07114, -0.00435, -0.03237, 0.02162, 0.00294, 0.29742, -0.15430, -0.04508, 0.17436, 0.01577, 0.00485, -0.00258, 0.00946, 0.00061, 0.00119, 0.01095, -0.00788, 0.00530, -0.01478, 2885.06380, 2152.76256, 2361.91098, 1442.28586, 602.45147, 251.18991, -121.68155, 71.20167, 404.94753, 1607.37580, 11211.04090, -2905.37340, -9066.27933, -40747.62807, -0.00189, 0.00957, 0.00332, 0.00907, 0.00574, -0.01255, -0.01134, 0.00291, -0.00666, -0.00615, -0.04947, 0.06182, 0.03965, 0.08091, 0.06846, -0.03612, 0.13966, 0.12543, -0.05494, -0.05043, -0.24454, -0.20507, 0.56201, -0.75997, 1.15728, 0.76203, -0.00559, -0.00536, 0.01872, 0.00104, 0.03044, 0.02504, -1.07241, -0.00288, 0.00950, -0.00760, -0.03211, 0.02261, 0.02678, -0.06868, 0.03008, -0.02062, 0.04997, -0.15164, -0.00176, -0.00580, -0.00730, -0.00676, -0.13906, -0.00089, -0.00362, 0.00817, 0.02021, 0.07719, 0.02788, 0.02061, -0.00274, 0.00016, 0.00566, 0.02293, 0.04691, -0.05005, -0.05095, -0.06225, -0.19770, -0.00456, -0.00848, 0.00595, -0.04506, -0.00172, -0.01960, 0.22971, 0.14459, 0.04362, -0.40199, 0.00386, 0.01442, -0.00088, -0.00020, 0.00544, 0.04768, 0.05222, -0.04069, -0.00003, 15.71084, -12.28846, -66.23443, -109.83758, -586.31996, 311.09606, 1070.75040, 2094.34080, 3839.04103, -1797.34193, -0.01216, 0.01244, -0.01666, 0.02627, 0.00687, -0.01291, 0.00939, -0.01905, 0.09401, 0.05027, -0.09398, 0.23942, -0.00379, 0.00834, 0.05632, -0.01907, -0.04654, -0.21243, 0.00255, 0.00179, 0.00540, 0.00497, 0.01427, 0.00243, -0.00697, -0.02792, -0.01524, 0.00810, -0.00461, 0.00238, 0.00899, -0.01515, -0.01011, -0.04390, -0.00447, -0.00992, -0.06110, 0.00975, -0.00261, 0.03415, -0.02336, -0.08776, -0.00883, 0.01346, -0.00229, -0.00895, 42.18049, -48.21316, -148.61588, -171.57236, -414.27195, 343.09118, 394.59044, 511.79914, -0.00911, -0.00220, -0.06315, -0.00988, 0.04357, -0.02389, 0.00004, 0.00232, 0.00581, -0.00317, 0.00948, -0.00497, -0.00734, 0.00300, 0.01883, -0.01055, -0.00365, -0.00126, 24.18074, 12.28004, 43.18187, -58.69806, -102.40566, -79.48349, -74.81060, 89.71332, 0.00241, -0.00135, -0.00136, -0.01617, 0.00818, 0.00873, 0.00368, 0.00383, -2.25893, 10.18542, 20.73104, 9.07389, 13.73458, -29.10491, -20.62071, -10.63404, 0.00382, -0.00143, -3.77385, 0.12725, -1.30842, 6.75795, 7.94463, 1.79092, 1.24458, -4.73211, -0.36978, -1.25710, -2.06373, 0.06194, -0.00509, 2.08851, 1.07491, 0.04112, -0.28582, -0.51413, -0.53312, 0.11936, 0.04447, 0.23945, 0.12450, -0.11821, -0.06100, -0.12924, -0.05193, 0.02219, 0.01977, -0.02933, -0.00771, -0.01077, 0.00109, -0.00273, }; static char FAR args[] = { 0, 3, 3, 1, 1,-10, 3, 11, 4, 0, 2, 2, 5, -5, 6, 2, 3, 5, 1,-14, 2, 2, 3, 1, 3, 1, 1, -5, 2, 4, 3, 0, 1, 1, 6, 0, 1, 2, 6, 0, 3, 2, 1, -7, 2, 3, 3, 0, 1, 1, 5, 2, 2, 1, 1, -4, 3, 2, 1, 2, 5, 2, 2, 2, 1, -5, 2, 2, 1, 3, 5, 0, 2, 4, 1,-10, 2, 1, 2, 3, 1, -8, 2, 0, 2, 1, 1, -3, 2, 2, 2, 1, 1, -2, 2, 2, 1, 1, 3, 0, 2, 3, 1, -7, 2, 1, 2, 1, 1, -3, 3, 0, 1, 1, 2, 0, 2, 2, 1, -4, 2, 1, 2, 4, 1, -9, 2, 0, 1, 2, 3, 0, 2, 1, 1, -2, 3, 0, 2, 1, 1, -4, 2, 0, 2, 1, 1, -1, 2, 0, 2, 3, 1, -6, 2, 0, 1, 3, 3, 0, 2, 2, 1, -7, 2, 0, 2, 1, 1, -2, 4, 0, 2, 1, 1, -1, 3, 0, 1, 2, 2, 2, 2, 2, 1, -3, 2, 2, 2, 4, 1, -8, 2, 0, 2, 3, 1,-10, 2, 0, 2, 1, 1, -4, 5, 0, 2, 1, 1, -3, 5, 2, 2, 1, 1, -5, 2, 2, 2, 1, 1, -5, 6, 0, 2, 1, 1, -2, 5, 1, 3, 1, 1, -4, 5, 5, 6, 0, 1, 4, 3, 0, 2, 1, 1, -3, 6, 1, 2, 1, 1, -1, 5, 0, 2, 1, 1, -2, 6, 0, 2, 1, 1, -1, 6, 0, 2, 1, 1, -2, 7, 0, 2, 1, 1, -1, 7, 0, 3, 4, 1,-14, 2, 2, 3, 0, 3, 1, 1, 2, 5, -5, 6, 0, 1, 1, 1, 6, 3, 2, 1,-10, 3, 11, 4, 0, 3, 1, 1, -2, 5, 5, 6, 0, 3, 6, 1,-14, 2, 2, 3, 0, 2, 1, 1, 1, 6, 0, 2, 1, 1, 2, 6, 0, 2, 1, 1, 1, 5, 1, 2, 2, 1, -4, 3, 1, 2, 1, 1, 2, 5, 0, 2, 3, 1, -5, 2, 2, 2, 1, 1, 3, 5, 0, 2, 5, 1,-10, 2, 0, 1, 3, 2, 0, 2, 2, 1, -2, 2, 0, 2, 1, 1, 1, 3, 0, 2, 4, 1, -7, 2, 0, 2, 2, 1, -3, 3, 0, 2, 1, 1, 1, 2, 0, 2, 3, 1, -4, 2, 0, 2, 5, 1, -9, 2, 0, 2, 1, 1, 2, 3, 0, 2, 2, 1, -2, 3, 0, 1, 4, 2, 0, 2, 2, 1, -1, 2, 0, 2, 4, 1, -6, 2, 0, 2, 2, 1, -2, 4, 0, 2, 2, 1, -1, 3, 0, 2, 1, 1, 2, 2, 1, 2, 3, 1, -3, 2, 0, 2, 5, 1, -8, 2, 0, 2, 2, 1, -3, 5, 0, 1, 5, 2, 1, 2, 2, 1, -2, 5, 0, 2, 1, 1, 4, 3, 0, 2, 2, 1, -3, 6, 0, 2, 2, 1, -1, 5, 0, 2, 2, 1, -2, 6, 0, 1, 2, 1, 4, 2, 2, 1, 1, 5, 0, 2, 3, 1, -4, 3, 0, 2, 2, 1, 2, 5, 0, 2, 4, 1, -5, 2, 2, 2, 1, 1, 3, 2, 0, 2, 3, 1, -2, 2, 1, 2, 3, 1, -3, 3, 0, 2, 2, 1, 1, 2, 0, 2, 4, 1, -4, 2, 0, 2, 3, 1, -2, 3, 0, 2, 3, 1, -1, 2, 0, 2, 3, 1, -1, 3, 0, 2, 2, 1, 2, 2, 0, 2, 4, 1, -3, 2, 0, 2, 3, 1, -3, 5, 0, 2, 1, 1, 5, 2, 1, 2, 3, 1, -2, 5, 0, 2, 3, 1, -1, 5, 0, 2, 3, 1, -2, 6, 0, 1, 3, 1, 3, 2, 4, 1, -4, 3, 0, 2, 5, 1, -5, 2, 0, 2, 4, 1, -2, 2, 0, 2, 5, 1, -4, 2, 0, 2, 4, 1, -2, 3, 0, 2, 5, 1, -3, 2, 0, 2, 2, 1, 5, 2, 0, 2, 4, 1, -2, 5, 0, 2, 4, 1, -1, 5, 0, 1, 4, 1, 3, 2, 6, 1, -5, 2, 1, 2, 5, 1, -2, 2, 0, 2, 5, 1, -2, 5, 0, 1, 5, 1, 3, 2, 7, 1, -5, 2, 0, 1, 6, 1, 3, 1, 7, 1, 3, 1, 8, 1, 2, 1, 9, 1, 2, 1, 10, 1, 1, 1, 11, 1, 0, -1 }; struct plantbl mer404 = { 9, { 11, 14, 10, 11, 4, 5, 2, 0, 0,}, 6, args, tabl, tabb, tabr, 3.8709830979999998e-01, 3652500.0, 1.0 }; astronomical-almanac-5.6/messier.cat0000644000175000017500000001514604145405322016003 0ustar jrvjrv2000 05 34.5 0 22 01 0 0 0 0 0 8.4 M1_NGC1952 2000 21 33.5 0 00 -49 0 0 0 0 0 6.5 M2_NGC7089 2000 13 42.2 0 28 23 0 0 0 0 0 6.4 M3_NGC5272 2000 16 23.6 0 -26 32 0 0 0 0 0 5.9 M4_NGC6121 2000 15 18.6 0 2 05 0 0 0 0 0 5.8 M5_NGC5904 1986.5 17 39.2 0 -32 12 0 0 0 0 600 4.6 M6_C1736-321_NGC6405 1986.5 17 53.0 0 -34 48 0 0 0 0 240 3.3 M7_C1750-348_NGC6475 2000 18 03.8 0 -24 23 0 0 0 0 0 5.8 M8_NGC6523 2000 17 19.2 0 -18 31 0 0 0 0 0 7.9 M9_NGC6333 2000 16 57.1 0 -4 06 0 0 0 0 0 6.6 M10_NGC6254 1986.5 18 50.4 0 -6 17 0 0 0 0 1720 6.1 M11_C1848-063_NGC6705 2000 16 47.2 0 -1 57 0 0 0 0 0 6.6 M12_NGC6218 2000 16 41.7 0 36 28 0 0 0 0 0 5.9 M13_NGC6205 2000 17 37.6 0 -3 15 0 0 0 0 0 7.6 M14_NGC6402 2000 21 30.0 0 12 10 0 0 0 0 0 6.4 M15_NGC7078 1986.5 18 18.1 0 -13 47 0 0 0 0 2500 6.5 M16_C1816-138_NGC6611 2000 18 20.8 0 -16 11 0 0 0 0 0 7. M17_NGC6618 2000 18 19.9 0 -17 08 0 0 0 0 0 6.9 M18_NGC6613 2000 17 2.6 0 -26 16 0 0 0 0 0 7.2 M19_NGC6273 2000 18 2.6 0 -23 02 0 0 0 0 0 8.5 M20_NGC6514 1986.5 18 03.8 0 -22 30 0 0 0 0 1300 7.2 M21_C1801-225_NGC6531 2000 18 36.4 0 -23 54 0 0 0 0 0 5.1 M22_NGC6656 1986.5 17 56.0 0 -19 01 0 0 0 0 660 5.9 M23_C1753-190_NGC6494 2000 18 16.9 0 -18 29 0 0 0 0 0 4.5 M24 1986.5 18 30.9 0 -19 15 0 0 0 0 580 6.2 M25_C1828-192_IC4725 1986.5 18 44.5 0 -9 25 0 0 0 0 1550 9.0 M26_C1842-094_NGC6694 2000 19 59.6 0 22 43 0 0 0 0 0 8.1 M27_NGC6853 2000 18 24.5 0 -24 52 0 0 0 0 0 6.9 M28_NGC6626 1986.5 20 23.4 0 38 29 0 0 0 0 1250 7.5 M29_C2022+383_NGC6913 2000 21 40.4 0 -23 11 0 0 0 0 0 7.5 M30_NGC7099 1986.5 00 42.00 0 41 11.7 0 0 0 -229 0 4.37 M31_NGC0224 1986.5 00 41.97 0 40 47.5 0 0 0 -217 0 9.09 M32_NGC0221 1986.5 01 33.11 0 30 35.1 0 0 0 -183 0 6.27 M33_NGC0598 1986.5 02 41.2 0 42 43 0 0 0 0 440 5.8 M34_NGC1039_C0238+425 1986.5 06 08.0 0 24 21 0 0 0 0 870 5.6 M35_C0605+243_NGC2168 1986.5 05 35.2 0 34 07 0 0 0 0 1270 6.5 M36_C0532+341_NGC1960 1986.5 05 51.5 0 32 33 0 0 0 0 1350 6.2 M37_C0549+325_NGC2099 1986.5 05 27.8 0 35 50 0 0 0 0 1320 6.8 M38_C0525+358_NGC1912 1986.5 21 31.7 0 48 23 0 0 0 0 270 5.3 M39_C2130+482_NGC7092 2000 12 22.4 0 58 05 0 0 0 0 0 8. M40 1986.5 06 46.5 0 -20 43 0 0 0 0 700 5.0 M41_C0644-206_NGC2287 2000 05 35.4 0 -5 27 0 0 0 0 0 4. M42_NGC1976 2000 05 35.6 0 -5 16 0 0 0 0 0 9. M43_NGC1982 1986.5 08 39.3 0 20 02 0 0 0 0 160 3.9 M44_C0837+201_NGC2632 1986.5 03 46.2 0 24 05 0 0 0 0 125 1.5 M45_C0344+239_Pleiades 1986.5 07 41.2 0 -14 47 0 0 0 0 1660 6.6 M46_C0739-147_NGC2437 1986.5 07 36.0 0 -14 28 0 0 0 0 480 4.3 M47_C0734-143_NGC2422 1986.5 08 13.1 0 -5 46 0 0 0 0 610 5.5 M48_C0811-056_NGC2548 2000 12 29.8 0 8 00 0 0 0 0 0 8.4 M49_NGC4472 1986.5 07 02.6 0 -8 19 0 0 0 0 910 7.2 M50_C0700-082_NGC2323 2000 13 29.9 0 47 12 0 0 0 0 0 8.1 M51_NGC5194-5 1986.5 23 23.6 0 61 31 0 0 0 0 1600 8.2 M52_C2322+613_NGC7654 2000 13 12.9 0 18 10 0 0 0 0 0 7.7 M53_NGC5024 2000 18 55.1 0 -30 29 0 0 0 0 0 7.7 M54_NGC6715 2000 19 40.0 0 -30 58 0 0 0 0 0 7.0 M55_NGC6809 2000 19 16.6 0 30 11 0 0 0 0 0 8.2 M56_NGC6779 2000 18 53.6 0 33 02 0 0 0 0 0 9.0 M57_NGC6720 2000 12 37.7 0 11 49 0 0 0 0 0 9.8 M58_NGC4579 2000 12 42.0 0 11 39 0 0 0 0 0 9.8 M59_NGC4621 2000 12 43.7 0 11 33 0 0 0 0 0 8.8 M60_NGC4649 2000 12 21.9 0 4 28 0 0 0 0 0 9.7 M61_NGC4303 2000 17 01.2 0 -30 07 0 0 0 0 0 6.6 M62_NGC6266 2000 13 15.8 0 42 02 0 0 0 0 0 8.6 M63_NGC5055 2000 12 56.7 0 21 41 0 0 0 0 0 8.5 M64_NGC4826 2000 11 18.9 0 13 05 0 0 0 0 0 9.3 M65_NGC3623 2000 11 20.2 0 12 59 0 0 0 0 0 9.0 M66_NGC3627 1986.5 08 49.7 0 11 52 0 0 0 0 800 7.4 M67_C0847+120_NGC2682 2000 12 39.5 0 -26 45 0 0 0 0 0 8.2 M68_NGC4590 2000 18 31.4 0 -32 21 0 0 0 0 0 7.7 M69_NGC6637 2000 18 43.2 0 -32 18 0 0 0 0 0 8.1 M70_NGC6681 2000 19 53.8 0 18 47 0 0 0 0 0 8.3 M71_NGC6838 2000 20 53.5 0 -12 32 0 0 0 0 0 9.4 M72_NGC6981 2000 20 58.9 0 -12 38 0 0 0 0 0 0 M73_NGC6994 2000 01 36.7 0 15 47 0 0 0 0 0 9.2 M74_NGC628 2000 20 06.1 0 -21 55 0 0 0 0 0 8.6 M75_NGC6864 2000 01 42.4 0 51 34 0 0 0 0 0 11.5 M76_NGC650-1 2000 02 42.7 0 00 -01 0 0 0 0 0 8.8 M77_NGC1068 2000 05 46.7 0 00 03 0 0 0 0 0 8. M78_NGC2068 2000 05 24.5 0 -24 33 0 0 0 0 0 8.0 M79_NGC1904 2000 16 17.0 0 -22 59 0 0 0 0 0 7.2 M80_NGC6093 2000 09 55.6 0 69 04 0 0 0 0 0 6.8 M81_NGC3031 2000 09 55.8 0 69 41 0 0 0 0 0 8.4 M82_NGC3034 2000 13 37.0 0 -29 52 0 0 0 0 0 7.6 M83_NGC5236 2000 12 25.1 0 12 53 0 0 0 0 0 9.3 M84_NGC4374 2000 12 25.4 0 18 11 0 0 0 0 0 9.2 M85_NGC4382 2000 12 26.2 0 12 57 0 0 0 0 0 9.2 M86_NGC4406 2000 12 30.8 0 12 24 0 0 0 0 0 8.6 M87_NGC4486 2000 12 32.0 0 14 25 0 0 0 0 0 9.5 M88_NGC4501 2000 12 35.7 0 12 33 0 0 0 0 0 9.8 M89_NGC4552 2000 12 36.8 0 13 10 0 0 0 0 0 9.5 M90_NGC4569 2000 12 35.4 0 14 30 0 0 0 0 0 10.2 M91_NGC4548 2000 17 17.1 0 43 08 0 0 0 0 0 6.5 M92_NGC6341 1986.5 07 44.0 0 -23 50 0 0 0 0 1100 6.5 M93_C0742-237_NGC2447 2000 12 50.9 0 41 07 0 0 0 0 0 8.1 M94_NGC4736 2000 10 44.0 0 11 42 0 0 0 0 0 9.7 M95_NGC3351 2000 10 46.8 0 11 49 0 0 0 0 0 9.2 M96_NGC3368 2000 11 14.8 0 55 01 0 0 0 0 0 11.2 M97_NGC3587 2000 12 13.8 0 14 54 0 0 0 0 0 10.1 M98_NGC4192 2000 12 18.8 0 14 25 0 0 0 0 0 9.8 M99_NGC4254 2000 12 22.9 0 15 49 0 0 0 0 0 9.4 M100_NGC4321 1986.5 14 02.75 0 54 25.1 0 0 0 241 0 8.16 M101_NGC5457 2000 0 0 0 0 0 0 0 0 0 0 0 There_is_no_M102 1986.5 01 32.3 0 60 38 0 0 0 0 2600 6.9 M103_C0129+604_NGC0581 1986.5 12 39.28 0 -11 33.0 0 0 0 1128 0 9.29 M104_NGC4594 2000 10 47.8 0 12 35 0 0 0 0 0 9.3 M105_NGC3379 2000 12 19.0 0 47 18 0 0 0 0 0 8.3 M106_NGC4258 2000 16 32.5 0 -13 03 0 0 0 0 0 8.1 M107_NGC6171 2000 11 11.5 0 55 40 0 0 0 0 0 10.0 M108_NGC3556 2000 11 57.6 0 53 23 0 0 0 0 0 9.8 M109_NGC3992 2000 00 40.4 0 41 41 0 0 0 0 0 8.0 M110_NGC205 ------ astronomical-almanac-5.6/mlat404.c0000644000175000017500000006016506614662746015217 0ustar jrvjrv /* geocentric moon polar coordinates re mean ecliptic and equinox of date S. L. Moshier December, 1996 See mlr404.c for test summary. */ #include "plantbl.h" static long FAR tabr[] = {-1}; static long FAR tabb[] = {-1}; static long FAR tabl[] = { -3, -4, 4, -1856, 0, 8043, -9, -1082, -1, -310, -1, -522, -330, -1449, -853, 4656, -66, 7, -1, 9996928, -66, 6, 23, 183, 0, 173, 0, -56, 0, 50, 0, -785, 1, 51, 0, -60, 1, 11843, 0, -50754, 0, 1834, 1, -7910, 0, -48060, 1, 56, 0, 13141, -1, -56318, 0, 2541, -1, -649, -133, 778, -46, 8, 1, 1665737, -47, 7, 0, 65, 0, 45, 0, -138, 0, -1005, 0, -2911, 0, -47, 0, 96, 0, -394, 2, 76, 2, -17302, 0, 74337, 0, -101, 0, 58, 0, -171, 0, -77, 0, -1283, 0, 2686, 0, -55, 0, 99, 0, 55, 0, 397, 0, 540, 0, 626, -1, -5188, 0, 10857, 0, -216, -2, -123, 0, 6337, 2, 224, -152, -23472, -29, -74336, 0, 295775, -20, 149, -2, 84, 9, 304, 0, -3051, -70, -6, -57, 34, 0, -638, 0, -201, -73, 9, 0, -100, -101, -8, 0, -57, 0, -207, -3, 80, -45, 45, -5, 102, -59, -23, 52, 201, -48, 233, -220, 71, 4, 2810, 0, 6236541, -61, 218, -216, 67, 51, 201, -59, -23, -144, -837, -457, 3029, -45, 42, -15, 73, -6, -169, 0, 135, -64, -7, 0, -16245, 0, -81, -74, -10, 0, 702, 0, -3013, 0, -5889, 1, 141, 58, 9598, 12, 30443, 1, -120946, -1, -84, -2, 11246, -1, -48391, 0, 1393, 0, 200, -136, -17, 0, 558, -64, -8, 0, -71, 0, 317577, -28, 183, 1, 219, 0, 421, 0, -133, 501, -139, 3, 354, -101, -13, 74, 7, 144, -84, 59, -2, 1, 64, -2931, 12559, -4641, 2638, -303, -2058, -13, -100, -123, -79, -19214, 6084, 1494, 26993, 15213, -82219, 42, 52, 48, -101, -53, -4, 4, 47, 58, -131, 46, 14, -21, -6, -1311, -8791, 10198, -4185, 2815, 5640, 167, 422, -229, 83, 3140, 39, 1221, 120, 96, -30, -1, 184612405, 187, 416, -226, 81, -1985, -10083, 9983, -4464, 2807, 5643, -21, -9, 113, -367, 120, 580, -667, 27, 8, 66, -56, -6, 337, 95, -87, 3303, -1, 65, 68, -374, 0, -574, 15, -94, 0, -53, 0, -1303, 0, -236, 283, 36, -1, -54, 269, -35, 0, -83, 0, -52, 0, 730, 0, -3129, 0, 813, 0, -4299, 1, 59, -6, 5130, 1, 16239, -1, -64603, 0, -80, 91, 12, 0, -561, 133, -17, 0, 250, -12, 71, 0, 155664, 82, -11, 0, 106, 0, -604, 0, 21862, 55, -7, 0, -1514, 0, 6501, 0, 906, 0, -68, 0, 241, 0, 366, 0, 70, 0, -1382, 0, 5957, 0, 113, 0, -51, 0, -55, 0, 731, 0, -264, 0, 65788, 1, -1504, 0, 3147, 0, 217, 0, -4105, 0, 17658, 1, 69, 0, -3518, 0, -1767, -43, -7044, -10, -22304, 0, 88685, 3, 91, 0, -485, 0, -57, -1, 333548, -24, 172, 11, 544, 1, -1132, 0, 353, 0, -188, 0, 53, 0, 77, 158, -887, 35, 131, -54, 13, 0, 1994821, -53, 14, 36, 125, 2, 56, 0, -243, 0, -364, -2, 1916, 0, -8227, 0, 15700, -1, -67308, 1, 66, 0, -53686, 1, 3058, 1, -13177, 0, -72, 0, -72, 0, 61, 0, 15812, 0, 165, 8, -96, 318, 1341, 803, -4252, 24, 193, 1137, -226, 310, 622, -56, 30, -3, 10101666, -56, 30, 1096, -225, 300, 600, -31, 409, -1, -507, 0, -287, 0, -1869, 0, 8026, 1, 544, -1, -1133, 0, 27984, 0, -62, 0, -249, 0, 187, 0, -1096, 1, 53, 2, 12388, 0, -53107, 0, -322, 0, -94, 0, 15157, 0, -582, 0, 3291, 0, 565, 0, 106, 0, 112, 0, 306, 0, 809, 0, 130, 0, -961, 0, 4149, 0, 174, 0, -105, 0, 2196, 0, 59, 0, 36737, -1, -1832, 0, 3835, 0, -139, 0, 24138, 0, 1325, 1, 64, 0, -361, 0, -1162, -44, -6320, -10, -20003, 0, 79588, 2, 80, 0, -2059, 0, -304, 0, 21460, 0, -166, 0, -87, 89, -493, 32, 114, 34, 510, 1, 1172616, 31, 113, -1, 57, 0, 214, 0, -656, 0, -646, 0, 1850, 0, -7931, 0, -6674, 0, 2944, 0, -12641, 0, 916, 45, -255, 16, 60, -1, 619116, 16, 57, 0, -58, 0, 1045, 0, -156, -15, 88, 0, -62964, 0, -126, 0, 1490, 0, -6387, 0, 119, 0, 1338, 0, -56, 0, 204, 0, 153, 0, 940, 0, 251, 0, 312, 0, 584, 0, -786, 0, 3388, 0, -52, 0, 4733, 0, 618, 0, 29982, 0, 101, 0, -174, 0, -2637, 0, 11345, 0, -284, 0, -524, 0, -121, 0, 1464, 11, -60, -1, 151205, 0, 139, 0, -2448, 0, -51, 0, -768, 0, -638, 0, 552, 0, -2370, 0, 70, 0, 64, 0, 57, 0, 39840, 0, 104, 0, -10194, 0, -635, 0, 69, 0, 113, 0, 67, 0, 96, 0, 367, 0, 134, 0, 596, 0, 63, 0, 1622, 0, 483, 0, 72, 0, 11917, 0, -63, 0, 1273, 0, -66, 0, -262, 0, -97, 0, 103, 0, 15196, 0, -1445, 0, -66, 0, -55, 0, -323, 0, 2632, 0, -1179, 0, 59, 0, -56, 0, 78, 0, 65, 0, 422, 0, 309, 0, 2125, 0, -66, 0, 124, 0, -57, 0, 1379, 0, -304, 0, 177, 0, -118, 0, 146, 0, 283, 0, 119, }; static char FAR args[] = { 0, 1, 3, 1, 10, 1, 12, -1, 11, 1, 4, 2, 10, 2, 12, -1, 13, -1, 11, 0, 5, 2, 10, -1, 13, -1, 11, 3, 2, -3, 3, 0, 5, 2, 10, -1, 13, -1, 11, 2, 3, -2, 5, 0, 2, -1, 13, 1, 14, 1, 5, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, 2, 1, 13, -1, 11, 0, 5, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, 5, 2, 10, -1, 13, -1, 11, 2, 3, -3, 5, 0, 4, 1, 10, 1, 12, -2, 13, 1, 11, 0, 4, 1, 13, -1, 11, 1, 2, -1, 3, 0, 5, 2, 10, -1, 13, -1, 11, 2, 2, -2, 3, 0, 3, 1, 10, -2, 13, 1, 11, 0, 4, 1, 13, -1, 11, 1, 3, -1, 5, 0, 4, -1, 13, 1, 11, 1, 2, -1, 3, 0, 3, 1, 12, 1, 13, -1, 11, 1, 4, 2, 10, 1, 12, -1, 13, -1, 11, 1, 2, 1, 10, -1, 11, 0, 4, -1, 13, 1, 11, 1, 3, -1, 5, 0, 3, 1, 12, -1, 13, 1, 11, 1, 3, 2, 10, -3, 13, 1, 11, 0, 3, 2, 12, 1, 13, -1, 11, 0, 3, -2, 10, 1, 13, 1, 14, 0, 6, -2, 10, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, 3, 2, 10, -1, 13, -1, 11, 0, 6, 2, 10, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, 4, -1, 13, 1, 11, 2, 3, -2, 5, 0, 4, -1, 13, 1, 11, 3, 2, -3, 3, 0, 3, 1, 10, -1, 12, -1, 11, 0, 3, 2, 12, -1, 13, 1, 11, 0, 3, 2, 10, 1, 13, -3, 11, 0, 5, -2, 10, 1, 13, 1, 11, 1, 2, -1, 3, 0, 4, 2, 10, -1, 12, -3, 13, 1, 11, 0, 3, 3, 10, -2, 13, -1, 11, 0, 5, -2, 10, 1, 13, 1, 11, 1, 3, -1, 5, 0, 4, 2, 10, -1, 12, -1, 13, -1, 11, 1, 2, 3, 10, -3, 11, 0, 5, -2, 10, 1, 13, 1, 11, 2, 2, -2, 3, 0, 4, 2, 10, -1, 12, 1, 13, -3, 11, 0, 3, 4, 10, -3, 13, -1, 11, 0, 4, 2, 10, -2, 12, -1, 13, -1, 11, 1, 3, 4, 10, -1, 13, -3, 11, 0, 4, 2, 10, -3, 12, -1, 13, -1, 11, 0, 3, 4, 10, -1, 12, -3, 11, 0, 3, 2, 10, -3, 12, -1, 11, 0, 4, 4, 10, -1, 12, -2, 13, -1, 11, 0, 2, 4, 10, -3, 11, 0, 3, 2, 10, -2, 12, -1, 11, 1, 4, 3, 10, -1, 12, -1, 13, -1, 11, 0, 4, -2, 10, 1, 11, 2, 3, -2, 5, 0, 3, 4, 10, -2, 13, -1, 11, 0, 4, -2, 10, 1, 11, 2, 2, -2, 3, 0, 3, 2, 10, -1, 12, -1, 11, 2, 3, -2, 10, 1, 12, 1, 14, 0, 4, -2, 10, 1, 11, 2, 3, -2, 4, 0, 4, -2, 10, 1, 11, 1, 3, -1, 5, 0, 3, 3, 10, -1, 13, -1, 11, 0, 4, -2, 10, 1, 11, 3, 2, -4, 3, 0, 4, -2, 10, 1, 11, 1, 3, -2, 5, 0, 4, 2, 10, -1, 12, -2, 13, 1, 11, 0, 4, -2, 10, 1, 11, 1, 2, -1, 3, 0, 2, -1, 10, 1, 2, 0, 3, 2, 10, 2, 13, -3, 11, 0, 4, -2, 10, 1, 11, 2, 2, -3, 3, 0, 3, 2, 12, -2, 13, 1, 11, 0, 4, 1, 10, -1, 12, 1, 13, -1, 11, 0, 3, -2, 10, 1, 11, 1, 5, 0, 4, 2, 10, -1, 11, 1, 3, -2, 4, 0, 3, 2, 10, -2, 11, 1, 14, 0, 4, -2, 10, 1, 11, 8, 2,-13, 3, 0, 5, -2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0, 5, 2, 10, -1, 11, 4, 3, -8, 4, 3, 5, 1, 2, 2, 10, -1, 11, 1, 5, -2, 10, 1, 11, 4, 3, -8, 4, 3, 5, 1, 5, 2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0, 4, 2, 10, -1, 11, 8, 2,-13, 3, 0, 2, -2, 10, 1, 14, 1, 4, -2, 10, 1, 11, 1, 3, -2, 4, 0, 3, 2, 10, -1, 11, 1, 5, 0, 2, 2, 12, -1, 11, 0, 4, 3, 10, 1, 12, -1, 13, -1, 11, 0, 4, 2, 10, -1, 11, 2, 2, -3, 3, 0, 3, 2, 10, -2, 13, 1, 11, 0, 4, 2, 10, -1, 11, 1, 2, -1, 3, 0, 3, 1, 10, 1, 2, -2, 3, 0, 3, 1, 12, -2, 13, 1, 11, 1, 3, 1, 10, 1, 13, -1, 11, 0, 4, 2, 10, -1, 11, 1, 3, -1, 5, 0, 3, 2, 10, 1, 12, -1, 11, 2, 3, -2, 10, -1, 12, 1, 14, 0, 2, 1, 12, -1, 11, 1, 3, 1, 10, -1, 13, 1, 11, 0, 4, 2, 10, -1, 11, 2, 2, -2, 3, 0, 3, 1, 10, 2, 2, -3, 3, 0, 4, 2, 10, 1, 12, -2, 13, 1, 11, 0, 3, -1, 10, 1, 2, -2, 3, 0, 3, -1, 11, 1, 2, -1, 3, 0, 2, 2, 13, -1, 11, 0, 2, -2, 13, 1, 14, 0, 4, 2, 10, -1, 11, 2, 3, -2, 5, 0, 4, 2, 10, -1, 11, 3, 2, -3, 3, 0, 4, 2, 10, 2, 12, -2, 13, -1, 11, 0, 3, 1, 10, 1, 3, -2, 5, 0, 4, 1, 10, 1, 12, 1, 13, -1, 11, 0, 3, 1, 10, 3, 2, -4, 3, 0, 3, 1, 10, 1, 3, -1, 5, 0, 3, 1, 10, 1, 3, -2, 6, 0, 3, 1, 10, 2, 3, -2, 4, 0, 4, 1, 10, 1, 12, -1, 13, -1, 11, 0, 3, 2, 10, 2, 12, -1, 11, 2, 4, 1, 10, 1, 3, 2, 5, -5, 6, 1, 1, 1, 14, 2, 3, 1, 10, 8, 2,-12, 3, 1, 5, -2, 10, 1, 13, -1, 11, 20, 2,-21, 3, 0, 5, 2, 10, -2, 13, 1, 11, 2, 3, -3, 5, 0, 3, 1, 10, 1, 3, 1, 6, 0, 4, -1, 13, -1, 11, 26, 2,-29, 3, 0, 3, -1, 11, 8, 2,-13, 3, 0, 4, -1, 13, -1, 11, 18, 2,-16, 3, 2, 4, -1, 13, 1, 11, 10, 2, -3, 3, 1, 1, 1, 11, 3, 4, -1, 13, -1, 11, 10, 2, -3, 3, 1, 4, -1, 13, 1, 11, 18, 2,-16, 3, 2, 3, 1, 11, 8, 2,-13, 3, 0, 2, 1, 10, 2, 4, 0, 4, 2, 10, -1, 11, 5, 2, -6, 3, 1, 5, 2, 10, -2, 13, -1, 11, 2, 3, -3, 5, 0, 5, -2, 10, 1, 13, 1, 11, 20, 2,-21, 3, 0, 3, 1, 10, 1, 3, 1, 5, 0, 2, -2, 11, 1, 14, 0, 5, 2, 10, -2, 13, 1, 11, 2, 3, -2, 5, 0, 3, 1, 10, 5, 2, -7, 3, 0, 4, 1, 10, 1, 12, -1, 13, 1, 11, 0, 3, 1, 10, 2, 2, -2, 3, 0, 4, 2, 10, 2, 12, -2, 13, 1, 11, 0, 2, 2, 13, -3, 11, 0, 4, 2, 10, -1, 11, 4, 2, -4, 3, 0, 3, 1, 10, 4, 2, -5, 3, 0, 3, 1, 10, -3, 13, 1, 11, 0, 2, 1, 10, 1, 2, 0, 3, 1, 11, 1, 2, -1, 3, 0, 4, 2, 10, -1, 11, 3, 3, -3, 5, 0, 3, 1, 12, 2, 13, -1, 11, 1, 4, 2, 10, 1, 12, -2, 13, -1, 11, 0, 3, 1, 10, -1, 13, -1, 11, 0, 3, 1, 11, 1, 3, -1, 5, 0, 2, 1, 12, 1, 11, 2, 4, 2, 10, -1, 11, 5, 2, -5, 3, 0, 3, 1, 10, 5, 2, -6, 3, 0, 3, 2, 10, 1, 12, -3, 11, 0, 3, 1, 10, 2, 2, -1, 3, 0, 3, 2, 10, -4, 13, 1, 11, 0, 3, -2, 10, 2, 13, 1, 14, 0, 3, 2, 10, -2, 13, -1, 11, 0, 3, 1, 10, 3, 2, -2, 3, 0, 4, 1, 10, -1, 12, -1, 13, -1, 11, 0, 2, 2, 12, 1, 11, 0, 2, 2, 10, -3, 11, 0, 3, 1, 10, 4, 2, -3, 3, 0, 4, 2, 10, -1, 12, -2, 13, -1, 11, 1, 3, 2, 10, -1, 12, -3, 11, 0, 3, 4, 10, -4, 13, -1, 11, 0, 4, 2, 10, -2, 12, -2, 13, -1, 11, 0, 4, 4, 10, -2, 12, -1, 13, -1, 11, 0, 3, 6, 10, -3, 13, -1, 11, 0, 4, 4, 10, -1, 12, -1, 13, -1, 11, 1, 4, 2, 10, -3, 12, -1, 13, 1, 11, 0, 3, 5, 10, -2, 13, -1, 11, 0, 3, 4, 10, 1, 13, -3, 11, 0, 4, 2, 10, -2, 12, 1, 13, -1, 11, 0, 3, 3, 10, -1, 12, -1, 11, 0, 3, 4, 10, -1, 13, -1, 11, 0, 4, 2, 10, -2, 12, -1, 13, 1, 11, 1, 3, 4, 10, -3, 13, 1, 11, 0, 4, 2, 10, -1, 12, 1, 13, -1, 11, 1, 5, -2, 10, 1, 13, -1, 11, 2, 2, -2, 3, 0, 2, 3, 10, -1, 11, 0, 4, 4, 10, 1, 12, -1, 13, -1, 11, 0, 4, 2, 10, -1, 12, -1, 13, 1, 11, 2, 5, -2, 10, 1, 13, -1, 11, 1, 3, -1, 5, 0, 3, 3, 10, -2, 13, 1, 11, 0, 5, -2, 10, 1, 13, -1, 11, 1, 2, -1, 3, 0, 3, 2, 10, 1, 13, -1, 11, 0, 3, -2, 10, -1, 13, 1, 14, 0, 3, 2, 12, -1, 13, -1, 11, 1, 3, 3, 10, 1, 12, -1, 11, 0, 3, 1, 10, -1, 12, 1, 11, 0, 4, -1, 13, -1, 11, 3, 2, -3, 3, 0, 4, -1, 13, -1, 11, 2, 3, -2, 5, 0, 3, 2, 10, -1, 13, 1, 14, 0, 4, -2, 10, -1, 11, 18, 2,-16, 3, 0, 6, 2, 10, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, 3, 2, 10, -1, 13, 1, 11, 0, 6, -2, 10, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, 5, 2, 10, -2, 13, 1, 11, 18, 2,-16, 3, 0, 4, -2, 10, 1, 13, -2, 11, 1, 14, 0, 3, 1, 12, -3, 13, 1, 11, 0, 3, 1, 10, 2, 13, -1, 11, 0, 4, 2, 10, 1, 12, 1, 13, -1, 11, 1, 3, 1, 12, -1, 13, -1, 11, 1, 4, -1, 13, -1, 11, 1, 3, -1, 5, 0, 2, 1, 10, 1, 11, 0, 4, 2, 10, 1, 12, -1, 13, 1, 11, 1, 3, 1, 12, 1, 13, -3, 11, 0, 4, -1, 13, -1, 11, 1, 2, -1, 3, 0, 5, 2, 10, -1, 13, 1, 11, 2, 2, -2, 3, 0, 2, 3, 13, -1, 11, 0, 4, 1, 10, 1, 12, -2, 13, -1, 11, 0, 4, 2, 10, 2, 12, 1, 13, -1, 11, 0, 2, 1, 13, 1, 14, 1, 5, 2, 10, -1, 13, 1, 11, 2, 3, -3, 5, 0, 4, -2, 13, -1, 11, 18, 2,-16, 3, 1, 5, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, 2, 1, 13, 1, 11, 0, 5, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, 3, 1, 11, 18, 2,-16, 3, 1, 3, -1, 13, -2, 11, 1, 14, 0, 5, 2, 10, -1, 13, 1, 11, 2, 3, -2, 5, 0, 5, 2, 10, -1, 13, 1, 11, 3, 2, -3, 3, 0, 3, 1, 10, 1, 12, 1, 11, 1, 4, 2, 10, 2, 12, -1, 13, 1, 11, 1, 2, 1, 13, -3, 11, 0, 4, 1, 13, 1, 11, 1, 2, -1, 3, 0, 3, 1, 12, 3, 13, -1, 11, 0, 4, 2, 10, 1, 12, -3, 13, -1, 11, 0, 3, 1, 10, -2, 13, -1, 11, 0, 4, 1, 13, 1, 11, 1, 3, -1, 5, 0, 3, 1, 12, 1, 13, 1, 11, 1, 2, 1, 10, -3, 11, 0, 3, 1, 12, -1, 13, 3, 11, 0, 3, 2, 10, -3, 13, -1, 11, 0, 3, 2, 12, 1, 13, 1, 11, 0, 3, 2, 10, -1, 13, -3, 11, 0, 4, 2, 10, -1, 12, -3, 13, -1, 11, 0, 4, 2, 10, -1, 12, -1, 13, -3, 11, 0, 4, 6, 10, -1, 12, -2, 13, -1, 11, 0, 3, 4, 10, -2, 12, -1, 11, 0, 3, 6, 10, -2, 13, -1, 11, 0, 4, 4, 10, -2, 12, -2, 13, 1, 11, 0, 3, 4, 10, -1, 12, -1, 11, 1, 3, 2, 10, -3, 12, 1, 11, 0, 3, 5, 10, -1, 13, -1, 11, 0, 4, 4, 10, -1, 12, -2, 13, 1, 11, 0, 4, 2, 10, -2, 12, 2, 13, -1, 11, 0, 2, 4, 10, -1, 11, 0, 3, 2, 10, -2, 12, 1, 11, 1, 4, 3, 10, -1, 12, -1, 13, 1, 11, 0, 3, 4, 10, -2, 13, 1, 11, 0, 4, 2, 10, -1, 12, 2, 13, -1, 11, 0, 4, -2, 10, -1, 11, 2, 2, -2, 3, 0, 3, 3, 10, 1, 13, -1, 11, 0, 3, 4, 10, 1, 12, -1, 11, 0, 3, 2, 10, -1, 12, 1, 11, 2, 4, -2, 10, -1, 11, 1, 3, -1, 5, 0, 3, 3, 10, -1, 13, 1, 11, 0, 4, 4, 10, 1, 12, -2, 13, 1, 11, 0, 3, 2, 10, 2, 13, -1, 11, 0, 3, 2, 12, -2, 13, -1, 11, 0, 4, 1, 10, -1, 12, 1, 13, 1, 11, 0, 2, 2, 10, 1, 14, 0, 5, -2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0, 2, 2, 10, 1, 11, 1, 5, 2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0, 3, -2, 10, -2, 11, 1, 14, 0, 4, 3, 10, 1, 12, -1, 13, 1, 11, 0, 3, 2, 10, -2, 13, 3, 11, 0, 4, 2, 10, 1, 12, 2, 13, -1, 11, 0, 3, 1, 12, -2, 13, -1, 11, 1, 3, 1, 10, 1, 13, 1, 11, 0, 3, 2, 10, 1, 12, 1, 11, 1, 2, 4, 13, -1, 11, 0, 2, 2, 13, 1, 14, 0, 4, -3, 13, -1, 11, 18, 2,-16, 3, 0, 2, 2, 13, 1, 11, 0, 4, 1, 13, 1, 11, 18, 2,-16, 3, 0, 4, 2, 10, 1, 11, 2, 3, -2, 5, 0, 4, 1, 10, 1, 12, 1, 13, 1, 11, 0, 3, 2, 10, 2, 12, 1, 11, 0, 2, 2, 11, 1, 14, 0, 1, 3, 11, 0, 3, 1, 10, -3, 13, -1, 11, 0, 3, 1, 12, 2, 13, 1, 11, 1, 2, 1, 12, 3, 11, 0, 3, 2, 10, -4, 13, -1, 11, 0, 3, 2, 12, 2, 13, 1, 11, 0, 3, 2, 10, -2, 13, -3, 11, 0, 4, 6, 10, -1, 12, -1, 13, -1, 11, 0, 3, 6, 10, -1, 13, -1, 11, 0, 4, 4, 10, -2, 12, -1, 13, 1, 11, 0, 3, 6, 10, -3, 13, 1, 11, 0, 4, 4, 10, -1, 12, 1, 13, -1, 11, 0, 4, 4, 10, -1, 12, -1, 13, 1, 11, 1, 3, 5, 10, -2, 13, 1, 11, 0, 3, 4, 10, 1, 13, -1, 11, 0, 4, 2, 10, -2, 12, 1, 13, 1, 11, 0, 3, 4, 10, -1, 13, 1, 11, 0, 4, 2, 10, -1, 12, 3, 13, -1, 11, 0, 4, 4, 10, 1, 12, 1, 13, -1, 11, 0, 4, 2, 10, -1, 12, 1, 13, 1, 11, 1, 2, 3, 10, 1, 11, 0, 4, 4, 10, 1, 12, -1, 13, 1, 11, 0, 4, 2, 10, -1, 12, -1, 13, 3, 11, 0, 3, 2, 10, 3, 13, -1, 11, 0, 3, 2, 10, 1, 13, 1, 14, 0, 3, 2, 10, 1, 13, 1, 11, 0, 3, 3, 10, 1, 12, 1, 11, 0, 3, 2, 10, -1, 13, 3, 11, 0, 4, 2, 10, 1, 12, 3, 13, -1, 11, 0, 3, 1, 12, -3, 13, -1, 11, 0, 3, 1, 10, 2, 13, 1, 11, 0, 4, 2, 10, 1, 12, 1, 13, 1, 11, 1, 3, 1, 12, -1, 13, -3, 11, 0, 2, 1, 10, 3, 11, 0, 2, 5, 13, -1, 11, 0, 2, 3, 13, 1, 11, 0, 4, 1, 10, 1, 12, 2, 13, 1, 11, 0, 2, 1, 13, 3, 11, 0, 3, 1, 12, 3, 13, 1, 11, 0, 3, 1, 12, 1, 13, 3, 11, 0, 3, 2, 10, -5, 13, -1, 11, 0, 3, 6, 10, -1, 12, -1, 11, 0, 4, 6, 10, -1, 12, -2, 13, 1, 11, 0, 2, 6, 10, -1, 11, 0, 3, 4, 10, -2, 12, 1, 11, 0, 3, 6, 10, -2, 13, 1, 11, 0, 4, 4, 10, -1, 12, 2, 13, -1, 11, 0, 3, 4, 10, -1, 12, 1, 11, 0, 3, 4, 10, 2, 13, -1, 11, 0, 4, 2, 10, -2, 12, 2, 13, 1, 11, 0, 2, 4, 10, 1, 11, 0, 3, 4, 10, -2, 13, 3, 11, 0, 4, 2, 10, -1, 12, 2, 13, 1, 11, 0, 3, 3, 10, 1, 13, 1, 11, 0, 3, 4, 10, 1, 12, 1, 11, 0, 3, 2, 10, -1, 12, 3, 11, 0, 3, 2, 10, 4, 13, -1, 11, 0, 3, 2, 10, 2, 13, 1, 11, 0, 2, 2, 10, 3, 11, 0, 3, 1, 12, -4, 13, -1, 11, 0, 3, 1, 10, 3, 13, 1, 11, 0, 4, 2, 10, 1, 12, 2, 13, 1, 11, 0, 2, 4, 13, 1, 11, 0, 2, 2, 13, 3, 11, 0, 1, 5, 11, 0, 3, 1, 12, 4, 13, 1, 11, 0, 4, 6, 10, -1, 12, -1, 13, 1, 11, 0, 3, 6, 10, 1, 13, -1, 11, 0, 3, 6, 10, -1, 13, 1, 11, 0, 4, 4, 10, -1, 12, 1, 13, 1, 11, 0, 3, 4, 10, 1, 13, 1, 11, 0, 3, 4, 10, -1, 13, 3, 11, 0, 4, 2, 10, -1, 12, 3, 13, 1, 11, 0, 4, 4, 10, 1, 12, 1, 13, 1, 11, 0, 3, 2, 10, 3, 13, 1, 11, 0, 3, 2, 10, 1, 13, 3, 11, 0, 2, 5, 13, 1, 11, 0, 2, 3, 13, 3, 11, 0, 2, 6, 10, 1, 11, 0, 3, 4, 10, 2, 13, 1, 11, 0, 3, 2, 10, 4, 13, 1, 11, 0, -1 }; struct plantbl moonlat = { 14, { 0, 26, 29, 8, 3, 5, 0, 0, 0, 6, 5, 3, 5, 1, 0, 0, 0, 0,}, 3, args, tabl, tabb, tabr, 0.0000000000000000e+00, 3.6525000000000000e+06, 1.0000000000000000e-04, }; astronomical-almanac-5.6/mlr404.c0000644000175000017500000017260106254270272015040 0ustar jrvjrv/* geocentric moon polar coordinates re mean equinox and ecliptic of date For latitude coefficients, see mlat404.c. S. L. Moshier December, 1996 Residuals against JPL ephemeris DE404 (arc seconds) First date in file = 1221000.5 Number of samples = 1053099 Sampling interval = 1.515625 days Peak excursions from these mostly different test points were consolidated with the above. They added .01" to a few of the peak readings. First date in file = 1221000.50 Number of samples = 524290.0 Sampling interval = 3.0 days Julian Years Longitude Latitude Distance 1 = 1.9 km Peak RMS Ave Peak RMS Ave Peak RMS Ave -1369.0 to -1000.0: 0.43 0.07 0.00 0.33 0.05 -0.00 0.18 0.03 0.00 -1000.0 to -500.0: 0.49 0.06 -0.00 0.33 0.04 -0.00 0.18 0.03 0.00 -500.0 to 0.0: 0.48 0.06 0.00 0.32 0.04 0.00 0.15 0.03 0.00 0.0 to 500.0: 0.45 0.05 0.00 0.30 0.04 -0.00 0.17 0.03 -0.00 500.0 to 1000.0: 0.48 0.05 -0.00 0.29 0.04 0.00 0.17 0.03 -0.00 1000.0 to 1500.0: 0.42 0.05 -0.00 0.28 0.04 -0.00 0.16 0.03 0.00 1500.0 to 2000.0: 0.35 0.05 -0.00 0.26 0.04 0.00 0.15 0.03 0.00 2000.0 to 2500.0: 0.39 0.06 0.00 0.25 0.04 -0.00 0.15 0.03 -0.00 2500.0 to 3000.0: 0.44 0.07 -0.00 0.30 0.05 -0.00 0.19 0.03 -0.00 3000.0 to 3000.8: 0.23 0.08 -0.04 0.11 0.04 -0.00 0.08 0.03 -0.00 */ #include "plantbl.h" static long FAR tabl[] = { 175667, 66453, 5249, -42, 20057, 403, -2360, 6148, -7644, 24646, -1273, 9127, -1395, 1958, 232, -289, -97, 553, 69, 130, -80, 6, 129, -868, 26, -89, 1042, 1172, 194, -112, -47433, -241666, 224626, -103752, 63419, 127606, 2294, -691, -1827, -1254, -1, -119, 1057, 324, 505, -195, 254, -641, -36, 1008, -1082, -3, -87, 122, 161, 11, 2, -106, 29, -123, -32, 41, -524, -35, 133, -595, 225, 837, -108, -191, -2294, 841, -340, -394, -351, -1039, 238, -108, -66, 21, 1405, 869, 520, 2776, -174, 71, 425, 652, -1260, -80, 249, 77, -192, -17, -97, 134, -7, -54, -802, -7436, -2824, 70869, -35, 2481, 1865, 1749, -2166, 2415, 33, -183, -835, 283, 27, -45, 56, 235, 2, 718, -1206, 275, -87, -158, -7, -2534, 0, 10774, 1, -324, -208, 821, 281, 1340, -797, 440, 224, 72, -65, -5, -7, -44, -48, 66, -151, -40, -41, -45, 76, -108, -18, 1202, 0, -2501, 1438, -595, 900, 3040, -3435, -5, -100, -26, 0, -13714, -183, 68, 453, -83, -228, 325, 97, 13, 2, 105, -61, 257, 0, 57, 88, -11, -1, -8220, 0, 275, -43, -10, -199, 105, 1, -5849, 2, 24887, -128, 48, 712, 970, -1407, 845, -266, 378, 311, 1526, -1751, 27, 0, -185858, 133, 6383, -108, 25, -7, 1944, 5, 390, -11, 31, 277, -384, 158, 72, -81, -41, -13, -111, -2332, -65804, -698, 505812, 34, 1676716, -72, -6664384, 154, -57, 52, 95, -4, -5, -7, 37, -63, -32, 4, 3349, 1, -14370, 16, -83, 0, -401, 13, 3013, 48, -20, 0, 250, 51, -79, -7, -146, 148, 9, 0, -64, -17, -59, -67, -492, -2, 2116601, -12, -1848, 8, -436, -6, 324, 0, -1363, -163, 9, 0, -74, 63, 8167, -29, 37587, -22, -74501, -71, 497, -1, 551747, -87, -22, 0, -51, -1, -463, 0, -444, 3, 89, 15, -84, -36, -6829, -5, -21663, 0, 86058, 0, -298, -2, 751, -2, -1015, 0, 69, 1, -4989, 0, 21458, 0, -330, 0, -7, 0, -226, 0, -1407, 0, 2942, 0, 66, 0, 667, 0, -155, 0, 105, 0, -107, 0, -74, 0, -52, 0, 91, 0, 59, 0, 235, -1, -1819, 0, 2470, 71, 13, 0, 1026, 14, -54, 0, -174, -121, -19, 0, -200, 0, 3008, -16, -8043, -10, -37136, -3, 73724, -157, -5, 0, -854, 8, 147, -13, -893, 0, 11869, -23, -172, 89, 14, -1, 872, 0, -3744, 11, 1606, 0, -559, -1, -2530, 0, 454, 0, -193, -60, -10, -82, -13, -75, 6, 36, 81, 354, -162836, 148, -516569, 4, 2054441, 4, -94, 39, 38, 61, -30, 2, 121, -11, 590, 62, 2108, 0, -12242, -476, -42, -84, 113, -394, 236, 0, 276, -49, 31, 0, 86, 1, -1313, 1, 69, -60, 88, -46, 18, 0, -63818, 14, -93, 113, 547, -618, 17, -7, 12290, -1, -25679, 0, 92, -115, 50, -48, 233, 4, 1311, 1, -5567, 3, 1251, 29, 548, -244, 257, -2, 1825, 42, 637, -46, 68, -62, 8, 3, 110, 445, -100, -316, -202, 2925, -621, 763, 1495, -169, -184, 20, -76, -475, -138, 8, -141, -197, 1351, -1284, 422, -129, 1879, -102, 8382, -9, 45864958, -215, 1350, -1285, 422, -481, -136, 8, -140, 40, -53, 2622, -543, 700, 1406, 402, -95, -318, -194, 122, 13, -30, 147, -121, -902, 61, -23, -63, 7, 69, 479, -224, 228, -7, 500, 0, -429, -42, 193, -92, 37, 67, 5, -350, -31, 0, 67, -55, -5, 0, 47, -36, 53, 5, 561, 0, -126, 0, 871, -52, 4, -201, 116922, -22, 371352, -12, -1473285, 0, 87, -164, 84, -3, 422, 30, 1434, -26, 38, 2, -1249943, -404, -34, -57, 79, 5, 509, 1, 131, -344, 168, 112, 22540, 30, 71218, 18, -283983, 0, -851, 0, -1538, 0, 1360, -12, 51, -48, 68, 88, -20, 1, 63, 0, -568, 303, 25, 0, -122, 87, 586, -606, -14, 0, -100, -85, 8, -165, 54, -45, 140, 0, -54, 4, -831, 1, 3495, 31, 116, -46, -11, -371, 190, -507, 399, -2, 57, -60, 36, -198, -1174, -613, 4988, -87, -4, 141, 560, -276, 187, 1876, 1379, 778, 4386, 24, -15, 167, -774, -71, -9, -62, 90, 98, 580, -663, -7, 34, -112, 57, 15, -355, -214, -3240, -13605, 12229, -5723, 3496, 7063, 33, -51, 1908, 1160, -226, 715, 964, 1170, -1264, 623, 14071, 5280, 5614, 3026, 488, 1576, -2, 226395859, 824, 1106, -1287, 617, 1917, 1156, -214, 718, 90, -97, 12078, -2366, 3282, 6668, -219, 9179, 593, 2015, -282, -186, 57, 25, 31, -102, -77, -4, -268, -341, -7, -45, -3, 74, 15, -615, -88, -7, 234, -353, 1, -119, -163, -1159, -601, 4969, 22, -58, -17, -11434, 17, 54, 348, 348, -460, 434, -371, 175, -11, -204, 4, -6440, -5, -53, -4, -14388, -37, -45231, -7, 179562, -44, 136, -160, 49, -101, 81, -1, -188, 0, 2, -4, 12124, -11, -25217, 71, 543, -557, -14, -75, 526, 0, 395274, -233, -16, 93, -20, -43, 61, 0, -1275, 0, -824, 1, -415, 0, 1762, -261, 131, -45, 64, -297, -25, 0, -17533, -6, -56, 21, 1100, 1, 327, 1, 66, 23, -217, -83, -7, 83, 86847, 49, 275754, -4, -1093857, -46, 2, 0, -24, 0, -419, 0, -5833, 1, 506, 0, -827, -1, -377, -11, -78, 0, 131945, -2, -334, 1, -75, 0, -72, 0, -213, -6, 5564, -2, -11618, 0, 1790, 0, -131, 0, 6, 0, -76, 0, -130, 0, -1115, 0, 4783, 0, -195, 0, -627, 0, -55, 0, -83, 0, 163, 0, -54, 0, 82, 0, 149, 0, -754, 0, 1578, 0, 138, 0, 68, 2, -2506, 0, 3399, 0, -125, 86, 16, 0, -6350, 0, 27316, 18, -63, 0, -169, -1, 46, -136, -21, 0, -239, -30, -8788, -15, -40549, -4, 80514, -46, -8, -168, -6, -1, 536, 0, -2314, 9, 148, -13, -842, -1, 307713, -23, -175, 95, 15, 0, -297, 11, 1341, 0, -106, 0, 5, -4, 68, -114, 10, 32, 75, 159, -130487, 98, -413967, 2, 1647339, -4, -85, 100, -46, 2, 95, -11, 461, 51, 1647, 0, -32090, -375, -33, -65, 86, -300, 180, 0, 836, 0, -3576, 0, -222, 0, -993, -41, 60, 0, -4537, -431, -34, 2, 927, 0, -1931, -79, 33, -31, 144, -1, 284, 0, -1207, 0, 88, -11, 315, -178, 177, -1, 144, -58, 986, 11, 86, -228, -110, 2636, -494, 718, 1474, 28, -35, -24, 782, -797, 277, 2142, -1231, 856, 1853, 74, 10797, 0, 23699298, -21, 786, -796, 277, 27, -34, 2615, -494, 712, 1461, -226, -109, -11, 663, 0, -123, -169, 157, -54, 266, 0, -76, 1, -634, 0, 2738, -25, 106, -63, 24, 0, -372, -221, -24, 0, -5356, 0, -219, 0, 91, -28, 7684, -6, 24391, -1, -96795, -77, 43, 2, 95, -47, -3, 0, -84530, 2, 310, 1, 88, 111, 19331, 32, 61306, 4, -243595, 0, 770, 0, -103, 0, 160, 0, 356, 0, 236, -41, 354, 39, 303, 12, -56, 873, -143, 238, 482, -28, 35, -93, 31, -3, 7690211, -91, 33, -34, 43, 824, -130, 226, 450, -39, 341, -1, -687, 0, -303, 11, -2935, 1, 12618, 121, 924, 9, -1836, -268, -1144, -678, 3685, -69, -261, 0, -4115951, -69, -261, 5, -151, 0, -88, 0, 91, 0, 187, 0, -1281, 1, 77, 1, 6059, 3, 19238, 0, -76305, 0, -90, 0, -238, 0, -962, 0, 4133, 0, 96, 0, 9483, 0, 85, 0, -688, 0, -5607, 0, 55, 0, -752, 0, 71, 0, 303, 0, -288, 0, 57, 0, 45, 0, 189, 0, 401, 0, -1474, 0, 3087, 0, -71, 0, 2925, 0, -75, 0, 359, 0, 55, 1, -10155, 0, 43735, 0, -572, 0, -49, 0, -660, 0, -3591, 0, 7516, 0, 668, -1, -53, -2, 384259, 0, -163, 0, -93, 1, 112, -95, -11528, -22, -36505, -1, 145308, 5, 145, 0, 4047, 1, 1483, 0, -6352, 0, 991, 0, -4262, 0, -93, 0, -334, 0, -160, 0, -153, -10, 127, 51, 185, -77, 18, 56, 1217, 6, 1919574, -74, 17, 50, 180, -5, 93, 0, -104, 0, -58, -3, -353, -1, 1499, 0, -229, -15, 86, 0, -93657, 0, 1561, 0, -6693, 0, -5839, 1, 6791, 0, -29143, 1, -701, 0, 3015, 0, 2543, 0, 693, -1, 361233, 0, -50, 0, 946, -1, -140, -70, 407, 0, -450995, 0, -368, 0, 54, 0, -802, 0, -96, 0, 1274, 0, -5459, 0, -614, 0, 2633, 0, 685, 0, -915, 0, -85, 0, 88, 0, 106, 0, 928, 0, -726, 0, 1523, 0, 5715, 0, -4338, 0, 18706, 0, -135, 0, -132, 0, -158, 0, -98, 0, 680, -1, 138968, 0, -192, 0, -1698, 0, -2734, 0, 11769, 0, 4, 0, 673, 0, -2891, 0, 889, 0, -3821, 0, 121, -1, 143783, 0, 231, -9, 51, 0, -57413, 0, -483, 0, -407, 0, 676, 0, -2902, 0, 531, 0, 445, 0, 672, 0, 19336, 0, 70, 0, -39976, 0, -68, 0, 4203, 0, -406, 0, 446, 0, -108, 0, 79, 0, 84, 0, 734, 0, 255, 0, 3944, 0, -655, 0, 2825, 0, -109, 0, -234, 0, 57, 0, 19773, 0, -2013, 0, 958, 0, -521, 0, -757, 0, 10594, 0, -9901, 0, 199, 0, -275, 0, 64, 0, 54, 0, 165, 0, 1110, 0, -3286, 0, 909, 0, 54, 0, 87, 0, 258, 0, 1261, 0, -51, 0, 336, 0, -114, 0, 2185, 0, -850, 0, 75, 0, -69, 0, -103, 0, 776, 0, -1238, 0, 137, 0, 67, 0, -260, 0, 130, 0, 49, 0, 228, 0, 215, 0, -178, 0, 57, 0, -133, }; static long FAR tabb[] = {-1}; static long FAR tabr[] = { -5422, -2120, 1077, 772, 39, 75, 3, 10, -468, -326, -113, -78, -4, -2, 1, 3, 29, 24, 4, 2, 1, 0, -9, 7, -2, 0, -32, -13, -3, -3, 233, 126, 89, 77, -33, 16, 3, -3, 0, -1, 2, 0, 0, 1, 4, 9, 1, 1, 16, -1, 0, 18, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -22, -5, 10, 3, 1, 1, -15, 7, -2, 1, -8, -11, -1, -2, -1, 1, 46, -58, 126, -23, 4, 8, 35, 8, 10, -17, 0, 0, 0, 0, -10, -7, 0, 0, -23, 3, 151, 10, -327, 0, 4, -5, 6, 5, 1, 0, -1, -3, 0, 0, 0, 1, -185, 0, -3, -24, -5, -2, -1062, 3, 4560, 0, -3, 0, 4, 1, 8, -1, 2, 4, 0, 1, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, -1, 277, 3, -583, 1, -1, 4, -32, 7, 0, -34, 1, -1, -23685, 0, -1, -2, -1, -7, -5, -4, 0, 2, -2, 0, -5, -1, 35, 0, 0, 2, 202, 0, 180, 0, 0, -1, -3, -6, -193, 0, 770, -1, -2, -4, -32, 23, -28, -46, -13, -9, -54, 10, -1, -61, -44895, 0, -230, 5, -1, -4, -71, 0, -15, 0, 1, 0, 15, 11, -3, 6, 2, -3, 4, -1, 2576, -138, -19881, -47, -65906, -1, 261925, -4, -2, -7, 4, -2, 0, 0, -1, 0, 1, -3, 172, -2, -727, 0, 4, 1, 324, 0, -139, 1, 1, 3, -276, 0, 5, 3, 9, 0, -1, 10, -37, 0, 5, -1, 76, -10, 1318810, 1, 12, -1, -38, 1, -141, 0, 611, 0, 0, -11, 4, 0, -627, 2, -2882, -3, 5711, -2, -48, -7, 55294, 0, 2, -7, 31, 0, 34, 0, -259, 0, -55, 2, 6, 3, -4273, 20, -13554, 3, 53878, 0, -46, 0, -85, 0, 114, 0, -45, 0, -818, 0, 3520, 0, 34, 0, -157, 0, 29, 0, -878, 0, 1838, 0, -428, 0, 161, 0, 24, 0, 65, 0, 19, 0, 15, 0, 12, 0, -26, 0, -14, 0, -149, 0, 584, 0, -793, 0, 4, -23, -238, 0, -18, -5, 45, 0, -7, 42, 79, 0, -1723, 0, 2895, -6, 13362, -4, -26525, -1, -2, 57, 291, 0, 52, -3, -327, 5, -2755, 0, -63, 9, 5, -33, -261, -1, 1122, 0, 621, -4, -227, 0, 1077, 0, -167, 0, 85, 0, -4, 23, -5, 32, 3, 30, -32, 14, 64607, 141, 204958, 59, -815115, 2, -37, -1, 15, -15, 12, 24, 48, -1, 235, 4, 843, -25, 4621, 0, -17, 191, 45, 34, 95, 159, -132, 0, 13, 20, 32, 0, -540, 0, 29, 0, 37, 25, 8, 19, 22127, 0, -35, -5, 232, -48, 7, 262, 5428, 3, -11342, 1, -45, 0, -21, -49, -100, -21, -626, 1, 2665, 0, 532, -2, 235, -12, -111, -105, 774, 1, -283, 17, 29, 20, 3, 27, 47, -2, -43, -192, -87, 136, -269, -1264, 646, -330, -79, 73, -33, -9, 60, -205, 61, 4, -584, -85, -182, -555, -780, -57, -3488, -45, -19818328, -4, 583, 93, 182, 555, -59, 208, -60, -4, 23, 17, 235, 1133, -608, 302, 41, 174, 84, -137, 6, -53, 63, 13, -392, 52, -10, -27, -3, -27, 199, -31, 99, 97, -218, -3, 209, 0, 84, 18, 16, 40, 2, -30, 14, -154, 30, 0, -2, 24, -108, 0, -24, -16, 262, -2, 55, 0, -304, 0, 2, 25, 55112, 95, 175036, 11, -694477, 5, 41, 0, -38, -76, 199, 1, 679, -14, -17, -12, 582619, 1, -16, 191, 38, 27, -234, 2, -60, 0, 80, 163, -10296, 48, -32526, 13, 129703, 8, -1366, 0, -741, 0, -646, 0, 25, 6, 33, 23, 10, 43, -31, 0, -6, 0, -12, 147, 59, 0, 287, -42, -7, 297, -59, 0, -4, -42, -27, -81, -69, -22, 27, 0, -423, -2, 1779, -1, -57, 15, 5, -23, 94, 182, -197, -250, 24, 1, -18, -30, 581, -98, -2473, -303, -2, 43, -277, 70, -92, -136, -681, 925, -2165, 384, -8, -12, 382, 82, -4, 35, -45, -31, -286, 48, 3, -328, -55, -17, 8, -28, -106, 175, -6735, 1601, -2832, -6052, 3495, -1730, -25, -17, -574, 944, -354, -112, -579, 476, -308, -625, -2411, 7074, -1529, 2828, -1335, 247,-112000844, -1, 545, -409, 305, 637, 572, -950, 356, 106, 48, 44, 1170, 5974, -3298, 1624, -4538, -106, -996, 294, 92, -139, -12, 28, 50, 16, 2, -38, 169, -133, 22, -3, 38, 1, 305, 7, 4, -44, 175, 116, 59, 1, -573, 81, 2453, 297, 29, 11, 5674, -8, -27, 9, 173, -173, 215, 228, -87, -184, 102, -5, 3206, 2, -53, 2, 7159, -7, 22505, -19, -89344, -3, 67, 22, 24, 79, -40, -50, 94, 0, 186, 0, -6063, 0, 12612, -5, -271, 35, 7, -278, -479, -74, 426754, 0, 8, -116, -10, -47, -31, -22, 645, 0, 426, 0, -213, 0, 903, 0, -67, -133, -33, -23, 13, -152, -9316, 0, 29, -3, -564, 11, -167, 0, -34, 0, 114, 12, 4, -44, -44561, 42, -141493, 25, 561256, -2, -1, -24, -261, 0, 211, 0, -4263, 0, -262, 1, 1842, 0, 202, 0, 41, -6, 77165, 0, 176, -1, 39, 1, -24, 0, 118, 0, -2991, -4, 6245, -1, 46886, 0, -75, 0, -100, 0, 40, 0, 75, 0, -618, 0, 2652, 0, 112, 0, 1780, 0, 30, 0, 49, 0, 86, 0, 33, 0, -30, 0, -95, 0, 277, 0, -580, 0, -35, 0, -319, 0, 1622, 1, -2201, 0, 79, 0, 10, -57, 2363, 0, -10162, 0, -41, -12, 62, 0, 30, 1, -14, 89, -2721, 0, 5780, -19, 26674, -10, -52964, -2, -5, 30, -4, 111, -317, -1, 1369, 0, 93, -6, -564, 9, -115913, 0, -113, 15, 10, -62, 99, 0, 891, -7, 36, 0, 108, 0, -42, -2, 7, 75, -50, 21, 86822, 104, 275441, 65, -1096109, 1, -56, 3, 31, 66, 63, -1, 307, 7, 1097, -34, 17453, 0, -22, 250, 57, 43, 120, 200, -297, 0, 1269, 0, 166, 0, -662, 0, 40, 28, 1521, 0, -23, 288, 351, -2, -729, 0, -22, -52, -96, -21, -139, -1, 589, 0, 35, 0, 210, 7, -118, -119, 62, 0, -583, -26, -42, 5, -73, 152, -330, -1759, 983, -479, -23, -19, -522, -15, -185, -533, 739, 1559, -1300, 614, -7332, 52, -15836758, 0, 524, 16, 185, 532, 23, 18, 330, 1751, -978, 476, 73, -151, 519, 18, 38, 0, 105, 113, -178, -37, 26, 0, 262, 1, -1139, 0, 71, 17, 16, 42, 151, 0, 16, -148, 4147, 0, 149, 0, -30, 0, 2980, 9, 9454, 2, -37519, 0, -28, -49, 37, -1, 2, -31, 33870, 0, -208, 1, -59, 1, -13105, 68, -41564, 21, 165148, 3, -1022, 0, -40, 0, -132, 0, -228, 0, 95, 0, -138, -16, -126, 16, 24, 5, -57, -346, 191, -94, -14, -11, -12, -37, -3053364, -1, 13, 36, 17, 13, 51, 327, -179, 90, 138, 16, 233, 0, 62, 0, 1164, 0, -5000, 0, -407, 117, 770, 9, -4, 1, 21, 2, 1, 0, -16869, 0, -1, 0, 1, 0, 35, 0, -78, 0, 78, 0, -533, 0, -31, 1, -2448, -6, -7768, -1, 30812, 0, 37, 0, -227, 0, 197, 0, -846, 0, -77, 0, 4171, 0, -67, 0, 287, 0, 2532, 0, -19, 0, -40, 0, -56, 0, 128, 0, 83, 0, -45, 0, -36, 0, -92, 0, -134, 0, 714, 0, -1495, 0, 32, 0, -981, 0, 15, 0, -166, 0, -59, 0, 4923, 0, -21203, 0, 246, 0, 15, 0, 104, 0, 1683, 0, -3523, 0, -865, 0, -25, 1, -186329, -1, 10, 0, 50, 0, 53, 0, 5455, -45, 17271, -10, -68747, 0, 69, -2, -7604, 0, -724, 1, 3101, 0, -46, 0, 200, 0, -44, 0, 97, 0, -53, 0, 62, 0, -54, -4, 88, -24, -9, -36, -581, 27, -914711, 3, 8, 35, -86, 24, 51, 3, 48, 0, 26, 0, 133, 1, -577, 0, 105, 0, -3, -1, 3194, 0, 528, 0, -2263, 0, 2028, 0, -3266, 1, 14016, 0, 10, 0, -41, 0, -100, 0, -32, 0, -124348, 0, 16, 0, -325, 0, 50, -1, 1, 0, -553, 0, 0, 0, 0, 0, 2, 0, -34, 0, -444, 0, 1902, 0, 9, 0, -37, 0, 254, 0, 156, 0, -2, 0, -35, 0, -48, 0, -368, 0, 327, 0, -686, 0, -2263, 0, 1952, 0, -8418, 0, -13, 0, 52, 0, 9, 0, 21, 0, -261, 0, -62404, 0, 0, 0, 79, 0, 1056, 0, -4547, 0, -351, 0, -305, 0, 1310, 0, -1, 0, 6, 0, 0, 0, -55953, 0, -80, 0, 0, 0, 168, 0, -147, 0, 127, 0, -265, 0, 1138, 0, -1, 0, -9, 0, -8, 0, -5984, 0, -22, 0, -5, 0, 0, 0, 0, 0, 127, 0, -2, 0, 10, 0, -31, 0, -29, 0, -286, 0, -98, 0, -1535, 0, 252, 0, -1087, 0, 43, 0, 4, 0, -19, 0, -7620, 0, 29, 0, -322, 0, 203, 0, 0, 0, -3587, 0, 10, 0, 0, 0, 94, 0, 0, 0, -1, 0, -1, 0, -315, 0, 1, 0, 0, 0, 0, 0, -30, 0, -94, 0, -460, 0, 1, 0, -114, 0, 0, 0, -746, 0, 4, 0, -23, 0, 24, 0, 0, 0, -237, 0, 1, 0, 0, 0, -18, 0, 0, 0, 0, 0, -16, 0, -76, 0, -67, 0, 0, 0, -16, 0, 0, 0, }; static char FAR args[] = { 0, 3, 3, 4, 3, -8, 4, 3, 5, 1, 2, 2, 5, -5, 6, 2, 5, -1, 10, 2, 13, -1, 11, 3, 3, -7, 4, 0, 3, 1, 13, -1, 11, 2, 5, 1, 2, 4, 5,-10, 6, 0, 4, 2, 10, -2, 13, 14, 3,-23, 4, 1, 3, 3, 2, -7, 3, 4, 4, 1, 3, -1, 13, 18, 2,-16, 3, 2, 2, 8, 2,-13, 3, 1, 5, 2, 10, -2, 13, 2, 3, -3, 5, 1, 6, 0, 3, -1, 13, 26, 2,-29, 3, 0, 3, 1, 10, -1, 11, 2, 4, 1, 4, 1, 10, -1, 13, 3, 2, -4, 3, 1, 4, 1, 10, -1, 13, 3, 3, -4, 4, 0, 3, -1, 10, 15, 2,-12, 3, 0, 4, 2, 10, -3, 13, 24, 2,-24, 3, 0, 3, -1, 10, 23, 2,-25, 3, 0, 4, 1, 10, -1, 11, 1, 3, 1, 6, 0, 4, 2, 10, -2, 11, 5, 2, -6, 3, 0, 4, 2, 10, -2, 13, 6, 2, -8, 3, 0, 4, -2, 10, 1, 13, 12, 2, -8, 3, 1, 5, -1, 10, 1, 13, -1, 11, 20, 2,-20, 3, 1, 4, -2, 10, 1, 13, 3, 1, -1, 3, 1, 5, 2, 10, -2, 13, 2, 3, -5, 5, 5, 6, 0, 4, 2, 10, -2, 13, 2, 3, -3, 5, 1, 4, 2, 10, -2, 13, 6, 3, -8, 4, 0, 4, -2, 10, 1, 13, 20, 2,-21, 3, 1, 4, 1, 10, -1, 11, 1, 3, 1, 5, 0, 1, 1, 6, 0, 4, 2, 10, -2, 13, 5, 3, -6, 4, 0, 3, 3, 2, -5, 3, 2, 5, 0, 2, -1, 11, 1, 14, 1, 4, 2, 10, -2, 13, 2, 3, -2, 5, 0, 2, 1, 3, -2, 4, 1, 4, 1, 10, -1, 11, 5, 2, -7, 3, 0, 1, 1, 5, 0, 2, 7, 3,-13, 4, 0, 4, -2, 10, 1, 13, 15, 2,-13, 3, 0, 4, 2, 10, -2, 13, 3, 2, -3, 3, 0, 2, -2, 11, 2, 14, 1, 3, 1, 10, 1, 12, -1, 13, 1, 3, -1, 13, 21, 2,-21, 3, 0, 2, 3, 2, -5, 3, 0, 2, 2, 3, -4, 4, 1, 2, 5, 2, -8, 3, 0, 3, -1, 13, 23, 2,-24, 3, 0, 2, 6, 3,-11, 4, 0, 1, 2, 5, 0, 2, 3, 3, -6, 4, 0, 2, 5, 3, -9, 4, 0, 4, 1, 10, -1, 11, 1, 3, -2, 5, 0, 3, 2, 10, 2, 12, -2, 13, 1, 2, 2, 2, -3, 3, 2, 2, 4, 3, -7, 4, 0, 2, 2, 13, -2, 11, 0, 2, 3, 3, -5, 4, 0, 2, 1, 2, -2, 3, 0, 2, 2, 3, -3, 4, 0, 4, 1, 10, -1, 11, 4, 2, -5, 3, 0, 2, 1, 3, -1, 4, 0, 2, 4, 2, -6, 3, 0, 4, 2, 10, -2, 13, 2, 2, -2, 3, 0, 3, 1, 10, -1, 11, 1, 2, 0, 2, 1, 2, -1, 3, 0, 3, 1, 12, 2, 13, -2, 11, 0, 2, 5, 3, -8, 4, 0, 2, 1, 3, -3, 5, 0, 3, 2, 10, 1, 12, -2, 13, 1, 2, 4, 3, -6, 4, 0, 2, 1, 3, -2, 5, 1, 2, 3, 3, -4, 4, 0, 2, 3, 2, -4, 3, 1, 2, 1, 10, -1, 13, 0, 2, 1, 3, -1, 5, 0, 2, 1, 3, -2, 6, 0, 2, 2, 3, -2, 4, 0, 2, 1, 3, -1, 6, 0, 2, 8, 2,-14, 3, 0, 3, 1, 3, 2, 5, -5, 6, 1, 3, 5, 3, -8, 4, 3, 5, 1, 1, 1, 12, 3, 3, 3, 3, -8, 4, 3, 5, 1, 3, 1, 3, -2, 5, 5, 6, 0, 2, 8, 2,-12, 3, 0, 2, 1, 3, 1, 5, 0, 3, 2, 10, 1, 12, -2, 11, 1, 2, 5, 2, -7, 3, 0, 3, 1, 10, 1, 13, -2, 11, 0, 2, 2, 2, -2, 3, 0, 2, 5, 3, -7, 4, 0, 3, 1, 12, -2, 13, 2, 11, 0, 2, 4, 3, -5, 4, 0, 2, 3, 3, -3, 4, 0, 1, 1, 2, 0, 3, 3, 10, 1, 12, -3, 13, 0, 2, 2, 3, -4, 5, 0, 2, 2, 3, -3, 5, 0, 2, 2, 10, -2, 13, 0, 2, 2, 3, -2, 5, 0, 2, 3, 2, -3, 3, 0, 3, 1, 10, -1, 12, -1, 13, 1, 2, 2, 3, -1, 5, 0, 2, 2, 3, -2, 6, 0, 1, 2, 12, 2, 3, -2, 10, 1, 11, 1, 14, 0, 2, 2, 10, -2, 11, 0, 2, 2, 2, -1, 3, 0, 4, -2, 10, 2, 13, 1, 2, -1, 3, 0, 2, 4, 2, -4, 3, 0, 2, 3, 10, -3, 13, 0, 4, -2, 10, 2, 13, 1, 3, -1, 5, 0, 2, 3, 3, -3, 5, 0, 3, 2, 10, -1, 12, -2, 13, 2, 3, 3, 10, -1, 13, -2, 11, 0, 1, 3, 12, 1, 4, -2, 10, 2, 13, 2, 2, -2, 3, 0, 3, 2, 10, -1, 12, -2, 11, 1, 2, 5, 2, -5, 3, 0, 2, 4, 10, -4, 13, 0, 2, 6, 2, -6, 3, 0, 3, 2, 10, -2, 12, -2, 13, 1, 3, 4, 10, -2, 13, -2, 11, 0, 3, 2, 10, -2, 12, -2, 11, 0, 2, 7, 2, -7, 3, 0, 3, 2, 10, -3, 12, -2, 13, 0, 2, 8, 2, -8, 3, 0, 2, 9, 2, -9, 3, 0, 2, 10, 2,-10, 3, 0, 3, 2, 10, -4, 12, -1, 13, 0, 3, 4, 10, -2, 12, -3, 13, 0, 4, 4, 10, -1, 12, -1, 13, -2, 11, 0, 3, 2, 10, -3, 12, -1, 13, 1, 4, -2, 10, 1, 13, 3, 3, -2, 5, 0, 3, 4, 10, -1, 12, -3, 13, 0, 4, -2, 10, 1, 13, 3, 3, -3, 5, 0, 4, 2, 10, -2, 12, 1, 13, -2, 11, 0, 4, -2, 10, 1, 13, 2, 2, -1, 3, 0, 3, 3, 10, -1, 12, -2, 11, 0, 3, 4, 10, -1, 13, -2, 11, 0, 3, 2, 10, -2, 12, -1, 13, 2, 4, -2, 10, 1, 13, 2, 3, -1, 5, 0, 3, 3, 10, -1, 12, -2, 13, 0, 4, -2, 10, 1, 13, 3, 2, -3, 3, 0, 4, -2, 10, 1, 13, 2, 3, -2, 5, 0, 2, 4, 10, -3, 13, 0, 4, -2, 10, 1, 13, 2, 3, -3, 5, 0, 3, -2, 10, 1, 13, 1, 2, 0, 4, 2, 10, -1, 12, 1, 13, -2, 11, 1, 4, -2, 10, 1, 13, 2, 2, -2, 3, 0, 2, 3, 12, -1, 13, 0, 2, 3, 10, -2, 11, 0, 2, 1, 10, -2, 12, 0, 4, 4, 10, 1, 12, -1, 13, -2, 11, 0, 3, -1, 13, 3, 2, -2, 3, 0, 3, -1, 13, 3, 3, -2, 5, 0, 3, -2, 10, 18, 2,-15, 3, 0, 5, 2, 10, -1, 13, 3, 3, -8, 4, 3, 5, 0, 3, 2, 10, -1, 12, -1, 13, 2, 5, -2, 10, 1, 13, 5, 3, -8, 4, 3, 5, 0, 5, -2, 10, 1, 13, 1, 3, 2, 5, -5, 6, 0, 4, 2, 10, -2, 13, 18, 2,-17, 3, 0, 4, -2, 10, 1, 13, 1, 3, -1, 6, 0, 4, -2, 10, 1, 13, 2, 3, -2, 4, 0, 4, -2, 10, 1, 13, 1, 3, -1, 5, 0, 2, 3, 10, -2, 13, 0, 4, -2, 10, 1, 13, 3, 2, -4, 3, 0, 4, -2, 10, 1, 13, 3, 3, -4, 4, 0, 4, -2, 10, 1, 13, 1, 3, -2, 5, 0, 3, 4, 10, 1, 12, -3, 13, 0, 4, -2, 10, 1, 13, 1, 3, -3, 5, 0, 3, -1, 13, 4, 2, -4, 3, 0, 4, -2, 10, 1, 13, 1, 2, -1, 3, 0, 4, -2, 10, 1, 13, 1, 3, -1, 4, 0, 4, -2, 10, 1, 13, 2, 3, -3, 4, 0, 4, -2, 10, 1, 13, 3, 3, -5, 4, 0, 3, 2, 10, 1, 13, -2, 11, 0, 4, -2, 10, -1, 13, 1, 11, 1, 14, 0, 4, -2, 10, 1, 13, 2, 2, -3, 3, 1, 2, 2, 12, -1, 13, 1, 3, 3, 10, 1, 12, -2, 11, 0, 4, 2, 10, -1, 13, 2, 3, -4, 4, 0, 4, 2, 10, -1, 13, 3, 2, -5, 3, 0, 2, 1, 10, -1, 12, 1, 3, -1, 13, 3, 2, -3, 3, 0, 3, -2, 10, 1, 13, 1, 5, 0, 4, 2, 10, -1, 13, 1, 3, -2, 4, 0, 3, -1, 13, 2, 3, -2, 5, 0, 4, 2, 10, -1, 13, -1, 11, 1, 14, 0, 3, -1, 13, 5, 3, -6, 4, 0, 3, -2, 10, 1, 13, 1, 6, 0, 3, -1, 10, 1, 3, -1, 5, 0, 4, -2, 10, 1, 13, 8, 2,-13, 3, 1, 3, -2, 10, 18, 2,-16, 3, 1, 5, -2, 10, 1, 13, 3, 2, -7, 3, 4, 4, 1, 4, 2, 10, -1, 13, 2, 5, -5, 6, 1, 5, 2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 1, 2, 2, 10, -1, 13, 2, 5, -2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 1, 4, -2, 10, 1, 13, 2, 5, -5, 6, 1, 5, 2, 10, -1, 13, 3, 2, -7, 3, 4, 4, 0, 4, 2, 10, -2, 13, 18, 2,-16, 3, 1, 4, 2, 10, -1, 13, 8, 2,-13, 3, 1, 3, -1, 10, 3, 2, -4, 3, 0, 3, -1, 13, 6, 2, -8, 3, 0, 3, -1, 13, 2, 3, -3, 5, 0, 3, -1, 13, 6, 3, -8, 4, 0, 3, 2, 10, -1, 13, 1, 6, 0, 4, -2, 10, 1, 13, -1, 11, 1, 14, 0, 4, -2, 10, 1, 13, 1, 3, -2, 4, 0, 3, 2, 10, -1, 13, 1, 5, 0, 3, 3, 10, 1, 12, -2, 13, 0, 4, -2, 10, 1, 13, 3, 2, -5, 3, 0, 4, -2, 10, 1, 13, 2, 3, -4, 4, 0, 2, -1, 13, 1, 2, 0, 4, 2, 10, -1, 13, 2, 2, -3, 3, 0, 3, -1, 10, 1, 2, -1, 3, 0, 3, -1, 13, 4, 2, -5, 3, 0, 3, 2, 10, -3, 13, 2, 11, 0, 4, 2, 10, -1, 13, 2, 3, -3, 4, 0, 3, -1, 13, 2, 2, -2, 3, 0, 4, 2, 10, -1, 13, 1, 2, -1, 3, 0, 4, 2, 10, 1, 12, 1, 13, -2, 11, 0, 3, -2, 13, 18, 2,-15, 3, 0, 2, 1, 12, -1, 13, 2, 3, -1, 13, 1, 3, -1, 6, 0, 4, 2, 10, -1, 13, 1, 3, -2, 5, 0, 3, -1, 13, 2, 3, -2, 4, 0, 3, -1, 13, 1, 3, -1, 5, 0, 4, 2, 10, -1, 13, 3, 3, -4, 4, 0, 1, 1, 10, 0, 3, -1, 13, 3, 2, -4, 3, 0, 3, -1, 13, 3, 3, -4, 4, 0, 4, 2, 10, -1, 13, 1, 3, -1, 5, 0, 4, 2, 10, -1, 13, 2, 3, -2, 4, 0, 3, -1, 13, 1, 3, -2, 5, 0, 3, 2, 10, 1, 12, -1, 13, 2, 3, 1, 12, 1, 13, -2, 11, 0, 3, -1, 13, 1, 2, -1, 3, 0, 4, 2, 10, -1, 13, 2, 2, -2, 3, 0, 3, -1, 13, 4, 2, -6, 3, 0, 3, -1, 13, 2, 3, -3, 4, 0, 3, 1, 13, 1, 2, -2, 3, 0, 4, 2, 10, -1, 13, 3, 3, -3, 4, 0, 2, 3, 13, -2, 11, 0, 4, 2, 10, -1, 13, 4, 2, -5, 3, 0, 3, 1, 10, 1, 2, -1, 3, 0, 3, -1, 13, 2, 2, -3, 3, 1, 3, 2, 10, 2, 12, -3, 13, 0, 3, 2, 10, -1, 13, 1, 2, 0, 3, 1, 13, 2, 3, -4, 4, 0, 3, 1, 13, 3, 2, -5, 3, 0, 2, 21, 2,-21, 3, 0, 3, 1, 10, 1, 12, -2, 13, 1, 4, 2, 10, -1, 13, 2, 3, -4, 5, 0, 4, 2, 10, -1, 13, 7, 3,-10, 4, 0, 2, -1, 13, 1, 5, 0, 3, 1, 13, 1, 3, -2, 4, 0, 4, 2, 10, -3, 13, 2, 3, -2, 5, 0, 3, 1, 10, 1, 3, -2, 5, 0, 3, 1, 13, -1, 11, 1, 14, 1, 2, -1, 13, 1, 6, 0, 4, 2, 10, -1, 13, 6, 3, -8, 4, 1, 4, 2, 10, -1, 13, 2, 3, -3, 5, 1, 3, -1, 13, 8, 3,-15, 4, 0, 4, 2, 10, -1, 13, 6, 2, -8, 3, 0, 5, 2, 10, -1, 13, -2, 11, 5, 2, -6, 3, 0, 3, 1, 10, 3, 3, -4, 4, 0, 3, 1, 10, 3, 2, -4, 3, 1, 4, 1, 10, -1, 13, -1, 11, 2, 4, 0, 3, -2, 13, 26, 2,-29, 3, 0, 3, -1, 13, 8, 2,-13, 3, 0, 3, -2, 13, 18, 2,-16, 3, 2, 4, -1, 13, 3, 2, -7, 3, 4, 4, 0, 3, 1, 13, 2, 5, -5, 6, 1, 4, 1, 13, 4, 3, -8, 4, 3, 5, 1, 1, 1, 13, 3, 4, -1, 13, 4, 3, -8, 4, 3, 5, 1, 3, -1, 13, 2, 5, -5, 6, 1, 4, 1, 13, 3, 2, -7, 3, 4, 4, 0, 2, 18, 2,-16, 3, 1, 3, 1, 13, 8, 2,-13, 3, 2, 2, 26, 2,-29, 3, 0, 4, 1, 10, 1, 13, -1, 11, 2, 4, 0, 5, 2, 10, 1, 13, -2, 11, 5, 2, -6, 3, 0, 3, 1, 13, 8, 3,-15, 4, 1, 4, 2, 10, -3, 13, 2, 3, -3, 5, 0, 3, 1, 10, 1, 3, -1, 5, 0, 2, 1, 13, 1, 6, 0, 4, 2, 10, -1, 13, 5, 3, -6, 4, 0, 3, 1, 10, 2, 3, -2, 4, 0, 3, -1, 13, -1, 11, 1, 14, 1, 4, 2, 10, -1, 13, 2, 3, -5, 6, 0, 4, 2, 10, -1, 13, 2, 3, -2, 5, 0, 5, 2, 10, -1, 13, 2, 3, -4, 5, 5, 6, 0, 3, -1, 13, 1, 3, -2, 4, 1, 2, 1, 13, 1, 5, 0, 4, 2, 10, -1, 13, 4, 3, -4, 4, 0, 4, 2, 10, -1, 13, 3, 2, -3, 3, 0, 4, 2, 10, 2, 12, -1, 13, -2, 11, 0, 2, 1, 10, 1, 12, 2, 3, -1, 13, 3, 2, -5, 3, 0, 3, -1, 13, 2, 3, -4, 4, 0, 4, 2, 10, -1, 13, 2, 3, -1, 5, 0, 4, 2, 10, -1, 13, 2, 3, -2, 6, 0, 3, 1, 10, 1, 12, -2, 11, 0, 3, 2, 10, 2, 12, -1, 13, 1, 3, 1, 13, 2, 2, -3, 3, 1, 3, -1, 13, 1, 11, 1, 14, 0, 2, 1, 13, -2, 11, 0, 4, 2, 10, -1, 13, 5, 2, -6, 3, 0, 3, -1, 13, 1, 2, -2, 3, 0, 3, 1, 13, 2, 3, -3, 4, 0, 3, 1, 13, 1, 2, -1, 3, 0, 4, 2, 10, -1, 13, 4, 2, -4, 3, 0, 3, 2, 10, 1, 12, -3, 13, 1, 3, 1, 13, 1, 3, -2, 5, 0, 3, 1, 13, 3, 3, -4, 4, 0, 3, 1, 13, 3, 2, -4, 3, 0, 2, 1, 10, -2, 13, 0, 4, 2, 10, -1, 13, 3, 3, -4, 5, 0, 3, 1, 13, 1, 3, -1, 5, 0, 3, 1, 13, 2, 3, -2, 4, 0, 3, 1, 13, 1, 3, -1, 6, 0, 4, 2, 10, -1, 13, 3, 3, -3, 5, 0, 4, 2, 10, -1, 13, 6, 2, -7, 3, 0, 2, 1, 12, 1, 13, 2, 4, 2, 10, -1, 13, 3, 3, -2, 5, 0, 4, 2, 10, 1, 12, -1, 13, -2, 11, 0, 2, 1, 10, 2, 12, 0, 2, 1, 10, -2, 11, 0, 3, 1, 13, 2, 2, -2, 3, 0, 3, 1, 12, -1, 13, 2, 11, 0, 4, 2, 10, -1, 13, 5, 2, -5, 3, 0, 3, 1, 13, 2, 3, -3, 5, 0, 2, 2, 10, -3, 13, 0, 3, 1, 13, 2, 3, -2, 5, 0, 3, 1, 13, 3, 2, -3, 3, 0, 3, 1, 10, -1, 12, -2, 13, 0, 4, 2, 10, -1, 13, 6, 2, -6, 3, 0, 2, 2, 12, 1, 13, 1, 3, 2, 10, -1, 13, -2, 11, 0, 3, 1, 10, -1, 12, -2, 11, 0, 3, 2, 10, 1, 13, -4, 11, 0, 3, 1, 13, 4, 2, -4, 3, 0, 4, 2, 10, -1, 13, 7, 2, -7, 3, 0, 3, 2, 10, -1, 12, -3, 13, 1, 2, 3, 12, 1, 13, 0, 4, 2, 10, -1, 12, -1, 13, -2, 11, 0, 3, 1, 13, 5, 2, -5, 3, 0, 4, 2, 10, -1, 13, 8, 2, -8, 3, 0, 3, 2, 10, -2, 12, -3, 13, 0, 4, 2, 10, -1, 13, 9, 2, -9, 3, 0, 3, 4, 10, -3, 12, -2, 13, 0, 2, 2, 10, -4, 12, 0, 3, 4, 10, -2, 12, -2, 13, 1, 2, 6, 10, -4, 13, 0, 3, 4, 10, -1, 12, -2, 11, 0, 2, 2, 10, -3, 12, 1, 3, 3, 10, -2, 12, -1, 13, 0, 3, -2, 10, 3, 3, -2, 5, 0, 3, 4, 10, -1, 12, -2, 13, 1, 3, -2, 10, 3, 3, -3, 5, 0, 2, 5, 10, -3, 13, 0, 3, -2, 10, 4, 2, -4, 3, 0, 3, -2, 10, 2, 2, -1, 3, 0, 2, 4, 10, -2, 11, 0, 2, 2, 10, -2, 12, 2, 3, -2, 10, 3, 3, -2, 4, 0, 3, -2, 10, 2, 3, -1, 5, 0, 3, 3, 10, -1, 12, -1, 13, 1, 3, -2, 10, 3, 2, -3, 3, 0, 3, -2, 10, 2, 3, -2, 5, 0, 2, 4, 10, -2, 13, 0, 3, -2, 10, 2, 3, -3, 5, 0, 2, -2, 10, 1, 2, 0, 4, 2, 10, -1, 12, 2, 13, -2, 11, 0, 3, -2, 10, 2, 2, -2, 3, 0, 3, 3, 10, 1, 13, -2, 11, 0, 3, 4, 10, 1, 12, -2, 11, 0, 4, 2, 10, -1, 12, -1, 11, 1, 14, 0, 4, -2, 10, -1, 13, 18, 2,-15, 3, 0, 4, 2, 10, 3, 3, -8, 4, 3, 5, 0, 2, 2, 10, -1, 12, 2, 4, -2, 10, 5, 3, -8, 4, 3, 5, 0, 4, 2, 10, -1, 13, 18, 2,-17, 3, 0, 3, -2, 10, 1, 3, -1, 6, 0, 3, -2, 10, 2, 3, -2, 4, 0, 3, -2, 10, 1, 3, -1, 5, 0, 2, 3, 10, -1, 13, 0, 3, -2, 10, 3, 2, -4, 3, 0, 3, -2, 10, 3, 3, -4, 4, 0, 3, -2, 10, 1, 3, -2, 5, 0, 3, 4, 10, 1, 12, -2, 13, 1, 4, 2, 10, -1, 12, -2, 13, 2, 11, 0, 3, -2, 10, 1, 2, -1, 3, 0, 3, -2, 10, 2, 3, -3, 4, 0, 3, 2, 10, 2, 13, -2, 11, 0, 3, -2, 10, 2, 2, -3, 3, 0, 2, 2, 12, -2, 13, 1, 3, 2, 10, 2, 3, -4, 4, 0, 3, 2, 10, 3, 2, -5, 3, 0, 3, 1, 10, -1, 12, 1, 13, 1, 3, -2, 13, 3, 2, -3, 3, 0, 2, -2, 10, 1, 5, 0, 3, 2, 10, 1, 3, -2, 4, 0, 3, -2, 13, 2, 3, -2, 5, 0, 3, 2, 10, -1, 11, 1, 14, 0, 4, 4, 10, -2, 13, 2, 3, -3, 5, 0, 3, -2, 10, 8, 2,-13, 3, 0, 4, -2, 10, -1, 13, 18, 2,-16, 3, 1, 4, -2, 10, 3, 2, -7, 3, 4, 4, 0, 4, 2, 10, 4, 3, -8, 4, 3, 5, 1, 1, 2, 10, 3, 4, -2, 10, 4, 3, -8, 4, 3, 5, 1, 4, 2, 10, 3, 2, -7, 3, 4, 4, 0, 4, 2, 10, -1, 13, 18, 2,-16, 3, 1, 3, 2, 10, 8, 2,-13, 3, 0, 3, -2, 10, -1, 11, 1, 14, 0, 4, 4, 10, -2, 13, 2, 3, -2, 5, 0, 3, -2, 10, 1, 3, -2, 4, 0, 2, 2, 10, 1, 5, 0, 4, 4, 10, -2, 13, 3, 2, -3, 3, 0, 3, 3, 10, 1, 12, -1, 13, 1, 3, -2, 10, 3, 2, -5, 3, 0, 3, -2, 10, 2, 3, -4, 4, 0, 3, 4, 10, 2, 12, -2, 13, 0, 3, 2, 10, 2, 2, -3, 3, 0, 3, 2, 10, -2, 13, 2, 11, 0, 3, 2, 10, 1, 2, -1, 3, 0, 4, 2, 10, 1, 12, 2, 13, -2, 11, 0, 2, 1, 12, -2, 13, 2, 3, 2, 10, 1, 3, -2, 5, 0, 3, -2, 13, 1, 3, -1, 5, 0, 3, 2, 10, 3, 2, -4, 3, 0, 2, 1, 10, 1, 13, 0, 3, 2, 10, 1, 3, -1, 5, 0, 3, 2, 10, 2, 3, -2, 4, 0, 2, 2, 10, 1, 12, 2, 2, 1, 12, -2, 11, 0, 3, -2, 13, 1, 2, -1, 3, 0, 3, 1, 10, -1, 13, 2, 11, 0, 3, 2, 10, 2, 2, -2, 3, 0, 3, 1, 10, 1, 12, -3, 13, 0, 3, 2, 13, -1, 11, 1, 14, 0, 3, 2, 10, 2, 3, -3, 5, 0, 3, 2, 10, 6, 2, -8, 3, 0, 3, -3, 13, 18, 2,-16, 3, 1, 3, 2, 13, 2, 5, -5, 6, 0, 4, 2, 13, 4, 3, -8, 4, 3, 5, 0, 1, 2, 13, 0, 4, -2, 13, 4, 3, -8, 4, 3, 5, 0, 3, -2, 13, 2, 5, -5, 6, 0, 3, 1, 13, 18, 2,-16, 3, 1, 3, -2, 13, -1, 11, 1, 14, 0, 3, 2, 10, 2, 3, -2, 5, 0, 3, 2, 10, 3, 2, -3, 3, 0, 3, 1, 10, 1, 12, 1, 13, 1, 2, 2, 10, 2, 12, 1, 2, 1, 11, 1, 14, 1, 4, -1, 13, -2, 11, 18, 2,-16, 3, 0, 1, 2, 11, 0, 4, -1, 13, 2, 11, 18, 2,-16, 3, 0, 2, -3, 11, 1, 14, 0, 3, 2, 13, 1, 2, -1, 3, 0, 3, 2, 10, 4, 2, -4, 3, 0, 3, 2, 10, 1, 12, -4, 13, 0, 2, 1, 10, -3, 13, 0, 3, 2, 13, 1, 3, -1, 5, 0, 2, 1, 12, 2, 13, 2, 3, 1, 10, 2, 12, 1, 13, 0, 3, 1, 10, -1, 13, -2, 11, 0, 2, 1, 12, 2, 11, 1, 3, 2, 10, 5, 2, -5, 3, 0, 2, 2, 10, -4, 13, 0, 3, 2, 10, 6, 2, -6, 3, 0, 2, 2, 12, 2, 13, 0, 3, 2, 10, -2, 13, -2, 11, 0, 2, 2, 12, 2, 11, 0, 2, 2, 10, -4, 11, 0, 3, 2, 10, 7, 2, -7, 3, 0, 3, 2, 10, -1, 12, -4, 13, 0, 4, 2, 10, -1, 12, -2, 13, -2, 11, 0, 3, 2, 10, 8, 2, -8, 3, 0, 3, 2, 10, 9, 2, -9, 3, 0, 3, 4, 10, -3, 12, -1, 13, 0, 3, 6, 10, -1, 12, -3, 13, 0, 3, 4, 10, -2, 12, -1, 13, 1, 3, 5, 10, -1, 12, -2, 13, 0, 2, 6, 10, -3, 13, 0, 4, 4, 10, -1, 12, 1, 13, -2, 11, 0, 3, 2, 10, -3, 12, 1, 13, 0, 2, 3, 10, -2, 12, 0, 3, 4, 10, -1, 12, -1, 13, 1, 2, 5, 10, -2, 13, 0, 3, 6, 10, 1, 12, -3, 13, 0, 3, 4, 10, 1, 13, -2, 11, 0, 3, 2, 10, -2, 12, 1, 13, 1, 2, 3, 10, -1, 12, 0, 4, -2, 10, -1, 13, 2, 3, -2, 5, 0, 2, 4, 10, -1, 13, 0, 4, 2, 10, -2, 12, -1, 13, 2, 11, 0, 3, 4, 10, -3, 13, 2, 11, 0, 4, -2, 10, -1, 13, 2, 2, -2, 3, 0, 3, 2, 10, -1, 12, 1, 13, 2, 4, -2, 10, -1, 13, 1, 3, -1, 5, 0, 1, 3, 10, 0, 3, 4, 10, 1, 12, -1, 13, 1, 4, 2, 10, -1, 12, -1, 13, 2, 11, 1, 4, -2, 10, -1, 13, 1, 2, -1, 3, 0, 3, 2, 10, 3, 13, -2, 11, 0, 2, 2, 12, -3, 13, 0, 3, 1, 10, -1, 12, 2, 13, 0, 4, 2, 10, 1, 13, -1, 11, 1, 14, 0, 4, -2, 10, -2, 13, 18, 2,-16, 3, 0, 5, 2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 0, 2, 2, 10, 1, 13, 1, 5, -2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 0, 3, 2, 10, 18, 2,-16, 3, 0, 4, -2, 10, -1, 13, -1, 11, 1, 14, 0, 4, 4, 10, -1, 13, 2, 3, -2, 5, 0, 4, 4, 10, -1, 13, 3, 2, -3, 3, 0, 2, 3, 10, 1, 12, 1, 3, 4, 10, 2, 12, -1, 13, 0, 4, 2, 10, -1, 13, 1, 11, 1, 14, 0, 3, 2, 10, -1, 13, 2, 11, 0, 2, 1, 12, -3, 13, 1, 2, 1, 10, 2, 13, 0, 3, 2, 10, 1, 12, 1, 13, 1, 3, 1, 12, -1, 13, -2, 11, 1, 2, 1, 10, 2, 11, 0, 4, 2, 10, 1, 12, -1, 13, 2, 11, 0, 1, 3, 13, 0, 4, 2, 10, 1, 13, 2, 3, -2, 5, 0, 3, 1, 10, 1, 12, 2, 13, 0, 3, 2, 10, 2, 12, 1, 13, 0, 3, 1, 13, 1, 11, 1, 14, 0, 2, 1, 13, 2, 11, 0, 3, 1, 10, 1, 12, 2, 11, 0, 4, 2, 10, 2, 12, -1, 13, 2, 11, 0, 2, 1, 13, -4, 11, 0, 2, 1, 10, -4, 13, 0, 2, 1, 12, 3, 13, 1, 3, 1, 12, 1, 13, 2, 11, 1, 2, 2, 10, -5, 13, 0, 3, 2, 10, -3, 13, -2, 11, 0, 3, 2, 10, -1, 13, -4, 11, 0, 3, 6, 10, -2, 12, -2, 13, 0, 2, 4, 10, -3, 12, 0, 3, 6, 10, -1, 12, -2, 13, 0, 2, 4, 10, -2, 12, 1, 2, 6, 10, -2, 13, 0, 2, 4, 10, -1, 12, 1, 2, 5, 10, -1, 13, 0, 3, 6, 10, 1, 12, -2, 13, 0, 4, 4, 10, -1, 12, -2, 13, 2, 11, 0, 3, 4, 10, 2, 13, -2, 11, 0, 3, 2, 10, -2, 12, 2, 13, 0, 1, 4, 10, 0, 3, 2, 10, -2, 12, 2, 11, 0, 3, 4, 10, -2, 13, 2, 11, 0, 3, 2, 10, -1, 12, 2, 13, 1, 2, 3, 10, 1, 13, 0, 2, 4, 10, 1, 12, 1, 3, 2, 10, -1, 12, 2, 11, 1, 3, 3, 10, -1, 13, 2, 11, 0, 2, 2, 10, 2, 13, 0, 3, 3, 10, 1, 12, 1, 13, 0, 3, 2, 10, 1, 11, 1, 14, 0, 2, 2, 10, 2, 11, 0, 2, 1, 12, -4, 13, 0, 2, 1, 10, 3, 13, 0, 3, 2, 10, 1, 12, 2, 13, 1, 3, 1, 12, -2, 13, -2, 11, 0, 3, 1, 10, 1, 13, 2, 11, 0, 3, 2, 10, 1, 12, 2, 11, 0, 1, 4, 13, 0, 3, 1, 10, 1, 12, 3, 13, 0, 2, 2, 13, 2, 11, 0, 4, 1, 10, 1, 12, 1, 13, 2, 11, 0, 1, 4, 11, 0, 2, 1, 12, 4, 13, 0, 3, 1, 12, 2, 13, 2, 11, 0, 3, 2, 10, -4, 13, -2, 11, 0, 3, 6, 10, -2, 12, -1, 13, 0, 2, 8, 10, -3, 13, 0, 3, 6, 10, -1, 12, -1, 13, 0, 3, 4, 10, -2, 12, 1, 13, 0, 2, 6, 10, -1, 13, 0, 3, 4, 10, -1, 12, 1, 13, 1, 3, 6, 10, 1, 12, -1, 13, 0, 4, 4, 10, -1, 12, -1, 13, 2, 11, 0, 3, 2, 10, -2, 12, 3, 13, 0, 2, 4, 10, 1, 13, 0, 3, 4, 10, -1, 13, 2, 11, 0, 3, 2, 10, -1, 12, 3, 13, 0, 3, 4, 10, 1, 12, 1, 13, 0, 4, 2, 10, -1, 12, 1, 13, 2, 11, 0, 2, 2, 10, 3, 13, 0, 3, 2, 10, 1, 13, 2, 11, 0, 3, 2, 10, -1, 13, 4, 11, 0, 3, 2, 10, 1, 12, 3, 13, 0, 3, 1, 12, -3, 13, -2, 11, 0, 3, 1, 10, 2, 13, 2, 11, 0, 4, 2, 10, 1, 12, 1, 13, 2, 11, 0, 1, 5, 13, 0, 2, 3, 13, 2, 11, 0, 2, 1, 13, 4, 11, 0, 3, 1, 12, 3, 13, 2, 11, 0, 2, 8, 10, -2, 13, 0, 2, 6, 10, -1, 12, 0, 1, 6, 10, 0, 3, 6, 10, -2, 13, 2, 11, 0, 3, 4, 10, -1, 12, 2, 13, 0, 3, 4, 10, -1, 12, 2, 11, 0, 2, 4, 10, 2, 13, 0, 2, 4, 10, 2, 11, 0, 3, 2, 10, -1, 12, 4, 13, 0, 3, 4, 10, 1, 12, 2, 13, 0, 4, 2, 10, -1, 12, 2, 13, 2, 11, 0, 2, 2, 10, 4, 13, 0, 3, 2, 10, 2, 13, 2, 11, 0, 2, 2, 10, 4, 11, 0, 1, 6, 13, 0, 2, 4, 13, 2, 11, 0, 2, 2, 13, 4, 11, 0, 3, 6, 10, -1, 12, 1, 13, 0, 2, 6, 10, 1, 13, 0, 2, 4, 10, 3, 13, 0, 3, 4, 10, 1, 13, 2, 11, 0, 2, 2, 10, 5, 13, 0, 3, 2, 10, 3, 13, 2, 11, 0, -1 }; struct plantbl moonlr = { 14, { 3, 26, 29, 23, 5, 10, 0, 0, 0, 8, 4, 4, 6, 2, 0, 0, 0, 0,}, 3, args, tabl, tabb, tabr, 2.5735686895300000e-03, 3.6525000000000000e+06, 1.0000000000000000e-04, }; astronomical-almanac-5.6/moonrise.c0000644000175000017500000001164206614662767015664 0ustar jrvjrv/* Search program to print tables of moonrise. */ #define STARTDATE 2448431.5 #define ENDDATE 2448831.5 #include "kep.h" /* Conversion factors between degrees and radians */ double DTR = 1.7453292519943295769e-2; double RTD = 5.7295779513082320877e1; double RTS = 2.0626480624709635516e5; /* arc seconds per radian */ double STR = 4.8481368110953599359e-6; /* radians per arc second */ double PI = 3.14159265358979323846; double TPI = 6.28318530717958647693; extern double PI; /* Standard epochs. Note Julian epochs (J) are measured in * years of 365.25 days. */ double J2000 = 2451545.0; /* 2000 January 1.5 */ double B1950 = 2433282.423; /* 1950 January 0.923 Besselian epoch */ double J1900 = 2415020.0; /* 1900 January 0, 12h UT */ double sqrt (), asin (), log (); /* coordinates of object */ int objnum = 0; /* I.D. number of object */ /* ecliptic polar coordinates: * longitude, latitude in radians * radius in au */ double FAR obpolar[3]; struct orbit objorb = { "Object ", 2446800.5, 0.0, 0.0, 102.884, 0.999999, 0.985611, 0.016713, 1.1791, 2446800.5, -3.86, 0.0, 0, /* &ear404, */ 0.0, 0.0, 0.0 }; double appobj[3]; /* coordinates of Earth */ /* Heliocentric rectangular equatorial position * of the earth at time TDT re equinox J2000 */ double FAR rearth[3]; double vearth[3]; /* Corresponding polar coordinates of earth: * longitude and latitude in radians, radius in au */ double FAR eapolar[3]; extern struct plantbl ear404; struct orbit earth = { "Earth ", 2446800.5, 0.0, 0.0, 102.884, 0.999999, 0.985611, 0.016713, 1.1791, 2446800.5, -3.86, 0.0, &ear404, 0.0, 0.0, 0.0 }; /* Julian date of ephemeris */ double JD; double TDT; double UT; /* flag = 0 if TDT assumed = UT, * = 1 if input time is TDT, * = 2 if input time is UT. */ int jdflag = 0; /* correction vector, saved for display */ double dp[3]; /* display formats for printf() */ extern char *intfmt, *dblfmt; /* display enable flag */ int prtflg = 0; double dradt, ddecdt; extern double FAR moonpol[]; extern double FAR moonpp[]; double zgetdate (), gethms (); double search (); static void func (); int apparent (); /* Results computed by domoon.c */ /* Transit, rise, and set times in radians (2 pi = 1 day) */ extern int f_trnsit; extern double r_trnsit; extern double r_rise; extern double r_set; double t_trnsit; double t_rise; double t_set; int main () { double u; kinit (); printf("\nTable of lunar rise, transit, and set times.\n\n"); objnum = 0; u = STARTDATE; while (u <= ENDDATE) { prtflg = 0; u = search (u); prtflg = 1; if (f_trnsit) jtocal (t_rise); else printf("\n"); jtocal (t_trnsit); if (f_trnsit) jtocal (t_set); else printf("\n"); prtflg = 0; printf ("\n"); u += 1.0; } exit (0); } /* Search for improved rise and set time estimates. */ double search (t) double t; { double JDsave, TDTsave, UTsave; double date_save, date, t0, t1; double rise1, set1, trnsit1; JDsave = JD; TDTsave = TDT; UTsave = UT; date_save = floor (t - 0.5) + 0.5; /* Find transit time. */ date = date_save; func (t); do { if (r_trnsit < 0.0) { date -= 1.0; r_trnsit += TPI; } if (r_trnsit > TPI) { date += 1.0; r_trnsit -= TPI; } t0 = date + r_trnsit / TPI; func (t0); t1 = date + r_trnsit / TPI; } while (fabs (t1 - t0) > .0001); t_trnsit = t1; trnsit1 = r_trnsit; set1 = r_set; if (f_trnsit == 0) goto sdone; /* Set current date to be that of the transit just found. */ date_save = date; do { if (r_rise < 0.0) { date -= 1.0; r_rise += TPI; } if (r_rise > TPI) { date += 1.0; r_rise -= TPI; } t0 = date + r_rise / TPI; func (t0); t1 = date + r_rise / TPI; } while (fabs (t1 - t0) > .0001); rise1 = r_rise; t_rise = t1; date = date_save; r_set = set1; do { if (r_set < 0.0) { date -= 1.0; r_set += TPI; } if (r_set > TPI) { date += 1.0; r_set -= TPI; } t0 = date + r_set / TPI; func (t0); t1 = date + r_set / TPI; } while (fabs (t1 - t0) > .0001); t_set = t1; r_trnsit = trnsit1; r_rise = rise1; /* printf("%.15e %.15e %.15e\n", rise1, trnsit1, set1); */ sdone: JD = JDsave; TDT = TDTsave; UT = UTsave; return t_trnsit; } /* Compute estimate of lunar rise and set times. */ static void func (t) double t; { int prtsave; prtsave = prtflg; prtflg = 0; objnum = 3; JD = t; update (); /* find UT */ kepler (TDT, &earth, rearth, eapolar); domoon (); prtflg = prtsave; } astronomical-almanac-5.6/msvc5.zip0000644000175000017500000004675206614664636015455 0ustar jrvjrvPK eY%>V2AA.NCB} Uŕ";pFFzc4"Qp#_o^xZLAM1ND''. cԈ̟u8Ȣf>QcY%N=[ΩsN:ufGs5.X>{ۛiK'ܖD&єK啕CƟ 0}"`‰ ~sK!;޳` ,X` ,X` ,X` ,{,X` ,X` ,X` ,X`6wh -R%;\s5> N3RwBp&p'N٩$}*qx|1d<'/dgPOxa J]~ ų"gCZP<^PB7{8q<; nU5!C :}垢kFB~eQw{`'m4?\8 m^}ca.?[8OOl<7)J.S_D1QI0Bn@|2KiS)pPr؀g.zT?D|ܯۯF-óPӇ>Ex'5f)0_LW b<+,8C?$*~a܇P?B!́e/St%+1J0Q Q~t"^ y>oJ v鼫i*7x/7?l^R]|kX܂ T Xoc/yxN >r`,o$$IRSrt([<2忐$ױ,?/(c$B˷ca;"L=˔f:9 ey=Y>0VvN/f}f|!3f~ wJ=?;8k|sCuJ\i!3?v3~i۟/L?Z4m.d~4Mu~;o l! {xR4v~k]q'Tc}T'&{B/b}Jj|jxTO ^CGo8_o:8R0e]F{y<_vY u}ƹ#se^` y676ɾ6;9@~U?R?rN<]_CAF?/$)`yckU͌~nP|@i^+ 2z=^}^X??TKX_0ZWUsq 7x,XExNwyO?':}Qx6b !狋|PCBt*ڷ`‡Kax;$bG.,:Pa#Q&~Q!_xccQb/CCòt$3r  O5 $EK+Lϟ!N@ax_{0_*?(| ]?_.→[mEVu?`{㯿|yQd;zJIyAEc~?P?d{w$x<,>ESu*ן 3)̏N t]nEqG^S Qw¿/ lzB}%q~ ${k=|,`{_Xޕpj*Ku5TAL }>g(5j|>?)Ox2Qݤ^N؂}_ ;grWB1xG/ oPSBLְ,KmFD}/]z lߙq}&'>oʬGov7Ðes mQ^j_Ʒ*]H]o?;vZe~^+"G#`y?Gߋ[,/z ćlư=pZČOx? :0VSk'M>ֻ,\$8?9ed7NƳzt?dma|D8X U$ qj<5lz;wB{#(%ͺ5充[{ 3c;2Ǖi -u/,|kFT}NdiM"%Jq%TsI0%h+Ⱥ=gxG uGǷkGmI\:*ۣ _ ލ%Z`Tf.Kk4>'=q^4oFDߛ'y)R}4cɦ ># #'YXt 'R9Ee<;x).5=Mc0, =(S_3Ӌxm0Qgѽ= "?o882lszXE?s<'Op^uH>0BUH>0:(&x b.o B/%8Cx?5Ra/AiP_ &E+?8m u`sỄr%8pUTe@pۅ^oyVԁ~)OcrgԷ%{>P΍ {1z(^[ڭ݇l_Tu=[+7h%m ߈P`DG޷ef[Ǜs^8hQ;AЭ8Aߦ`WXC4;/:;{dkqaNt9ާ)@p)?4֔"yq|d j+i=yu^lpW_Np(W~Kob833W!?Dx3NxKeP,O,yΘwdڮXCmJ cGt-wo 1W=>^/$&h+k)/?Ȗx}E?B xTFpe> &cج7Z^_vs<"xg-~ _j~#0?ETO)yFEWȒ?a}58>Z/b._o)u7~Of fY /O{A8?ηV#2v(2 N7?C<5uMY12_? =cQo/ WE"=*#A,.o @?USD@ љ\Y߂e٧ÛSM?? ԬYНςa/v6蟷R/RK-=pz`/x/z}+_^)R:f ^Q e_?PkR?<{xPtB{0^bh,\3S _@+1'<1E)b-8oqx[h}LxI } `F}<`a +㻎0'$yP%yO0E?U5Y ,|?G5xD=DEYf o?)0bt*X`xZ5_߈;d7Bgqgj_u%s<܁ϫ yx\سߍeY̋g# CQ^1mox=C!?1q =z\ ̝+zGe<.S}nG]h36Ş`‰+때a/oe~қjH7_EGS,wr0#up1(`0HE~@EX?X 7@HS|\O^:s }`jk8jc{ߩ{"g_c#PV#=Dz,XboxwBT"c㽉D@L; , yCyBZgws1~PZ 7x>gs|N;wh)1 %>[#3 [/ѽ}7`3wrW?> 0k?5,q)^:fN}^&)L7~iXF7#l}?a~7]~aOV?wLzY > ܽ ߏf:?/> {x4 h܉-؞H^Y8(Q/F~p(\Bxځj\;%;[} C/ <$oN%;^4^W^+CT1<_Yj<_Yb5T|lHkϜ K#~{Y>·$vF)W#X^h'?RR$/l6j$ x6<0c~G~=O[go)>#>Qwy}p Vc~a=VbΫѿ U"7F"xP*DMƱ0$&R/ 0 hU H?R㓐+" ,YKQ$}dQ7L|$E#1m@SCXxO9Y!Sƿy[RKxObe{/p0b hss4j]~{;C[B$?:ner? y|{4VPI[Vr"^EI^?|C=IPwD_{*ŬZy Q\zOM?qor= ,IoH=(qi~7xr/>D[ ߍJ% lwH2^(xƁ'v=<с}p _q}1{1z(^erǭ|ёhaO`4uPmP`DMD?Ob2-{_=i1vυx"K8=lpU/5.Q1o a?2`}W nQhOl_4E*.xeLO&8l t|SF"?-p+}N?'x߯LJ2_gp>Do.ۿ&b| WNv?X($ϔmlpoglcc8ߋmo N/?)]V/g<$4p?G֟?:4C.l_H/z>,dh~M맮WZ7I+zI c87~8Q.Ri?5_E<\m +}yd_< zGet "2 j k tke>->6*YSNY=/=D߁yeUREWi}}zthY1ޢe /b_- 0)MǷkW^Owy=p3>}2ӟO2(ӿ>OdMUryX<_MI>2otBo{9>^NRһ4)k k_[@J.ϐ7u 4#?8c2_ڿ@az We>5uij)E`G+3QBu|u!:vSTzJp.Gp ßv,eܦWGUo̅nK =f}l< T~ 쟄[d縚d7SY  \0G?0 WV2?1'O>e⵩iWә鿃ܫ_jSOiE %e&~lBipGA>pN[¬oQ Q~!l%\->߮2iܣa{1e-XH9ax"g/?;?CG9Çx4H+[_h=8T4t9pQ|0(S䉵X |hA!;szbU~>UXC;N:RY׸^7?r>}wa+4HMY?hq[Jz3;:x,kp&TafGeOx{~XEF(UӚkvѶX񇈌Ëq"cL1- Xzig^pp4Ob fl&H[:z/ioY lN4'K-UW8/\ܝJWt*f疹5_^ҞȘb4}Zd3N:_`"~jL[vD<|҆53$mIdҁ}>n N`fe%zi\Y )x |.6}Hv|I@W_S-8̌WOwkתjzvBмͭ*)lO-pi[2/܌@gQ,2wA%2ӏdݏd }I -}2x ".lȋ{:ZʤU{z/!' wOWOO7zR^Ks"7;G7c uޗ@Ff _m5(5}A'zu~u1TDa&ҕ&FBj{u}ZMZ!G_\~-ZRuPg&m^ҡ XomTrqak;LW2ѽǗdw׌-]EYsx;ުCk:Q;LTίкjUԹ\@!s-@ uL`ٛ[;{'a/ s[YrH> :pXL%Ә!U1gؕ 2>AldWL ܺCX8rtGw֎f̹re@yE4@R ?G"Iv^=I\]3wэ}IJdUBw, HҒ= Ѐ%yȕٗr3"B@t鬿_?zsOFt SKج):Alwg) m:c2CAKs=Ԋt[ӻwțXWե_t_̴h\f~Ã3T{O)䋙N9@W ~qm l@H!3/kՖ,YƢCr<'i ]v#/J_ ,= O;AUm,sjlF0i=9&ڡqځGXy򪉉擕d[5E^J]<hI-9gJi'iZK`/IJOQtɣ>'8hx"5Vi$XZuމϧQK;y+WF%2+EzC^XvsE;uѮ"N\8*n K+?0E%(TNѸu)^_,FT[tiN@)ҊziLp9b6yUL}QGAHc,sQЎmrkh#O`]yh'^M2u=3Iц/'3VcH);Eymwgx!۪=~}4SCx~m3Ԗ暜nLQ`e9J@\SKv}O):/=h'M,wqwɜ"*i7#.w0A;PɘOPEN3zY=(Ei3u}hՋ ě@X *1K6)>EH"QnT2ȶOѶ4@'O5(og Ub[ˀlWɟ5z z{TMؼ?yS=0Qv b?SH,AOHo|8W;s3Cww86ɀ;7Qǟ鵑(Oۋ Crm8\L\P2ǚ#bi/F☡N!o퐅\X4>_حFe}zGJ ؽ{E=}?bЗAl*/;#i c:i#<{u ^׀Snc|m~x i g։)XJs~E}?Ko},~G<A/^#E~}Q-[#KF<բ]tx$vq ϡǽx$ B86},8>vFA\Ȋɲc,E2lRB1YV7a9@)>^Ed sX` ,X8PK eY%DXbaAA.OPTsUOZr1"7u(EB  mi@6{چnw3ٍ/3`F_go>#8>~79n6f9=s~g&96ٍ?9:$VSh@Y+=MSJ[^79NpZ(U_b~NPn[mvaQE?wnI4=p' wpJ=9y"|~ڮƽU03p|~ ><v/|> Oï}p=rgsW'l<\-%qID&bj}5-{܇ė1"%1.Q c:,ȯYQ*LV#-. VtMzԛ/0Dj7{/6Z|ch]ӛt}q`H w"׫OUWrŻ4/〱t`^ 5򼯙3U*@ȼ]0CH?$!;<%z-Ϗgc|uUjW8yv'Ŗp6K׸}ʝ*|ebWŕwQ_jy3h|K[ǫSkDPy spj`7GN] >ɀ!*_7j{RS*"h ֜{E-wkZ*:%۵߰nҩ҆VYe}87l7*o[+:C2RezpF\ WU\5|T=aV`KઢS0[FVM=r1,ո,\5R;Yfat ?Ӷ̐? ^BY2"놙s_AGQEQ+H z(9H.[ڱ8Yϊ[ }đ;x b%fj;-=^O;dSE7e436SܳozA`̈DqtX R8o }6P˹TBuXjOA^|5DpԿhElq6TiI1¯T9V_NO_DF9ͻ6xReoRp&,Q zjmcnЩ<2|Cknz->cqOi`MAgS} >ՄxkW>2 t'OϋikYqsV<3'bPz={nL^Ʈ]lTxjnS<Әu|܄{מwUg+ʎ&,")WG ?^foB*y-"y s,22+K vi{cq`n_1˔w8][e"#QS_p<[Ζo=_KL9*_b{͜Ʒܻ)}j$}V>=B ܣJDfAOp3ȩBڷ$҆ާJ4U3)dbߏf3ESuD7XGJ 'n|, PKsdY%i_hAA.PLG_o6şC߁R-2(8MQ ifC!@̈́"ʟ~]IcR*=,FIR>G9YjP'ZJ!j6%hcS0:kZG66dlqK9 uPGn҉NݓajǺrF@0Khoo/M 2_zӫZHnJr|Kf$][JK$8g$sOAK`$u6:駓>{z}y],AYZS jgvѧ$/IW_7nucJ=X$g/N~pѶ+/uܮ<;#Bir6HQN 5KwPɵZaveX6Eƅzʊ2 Y`{=)uZɅ* rT.%y͊$h/̎As3?kvn5銜ߑI~v`S~Ѡ`IV.n]U~O߼zq'¥9X˒;t ,)Sk)4%.:.Jr|&38S ViLWZrjGVt~u-i:𮩇KZrnI˔bquKX0y U|Z6#۴|W{i6~cM[b ζMx;eE:1txN NUӴkwÎ%bD պl2G>;h0]wXzXzJXg^1k꧄UIu޸"}+fmE̻VzӊyˊYXޯ"V*fެ8*bީb*ާbm*KEȎ=*fM֡bTļ?ES`7M759M=¼dQLЪAOQV'zUu(4(<ȇ0F!y1 q g,F!XA4Ũ.rTVbBbRT:}ad $t%w|Pa IR|`>쇝_KCrD1ۃנi##PKdY%?^ GAA.MAKZmo6(bj/(5PǖSodِX%:Q7e7)ZEf('3y!,\;p)010qCp[)t?`z_J0w (o&F#(Ȳw\wcPMs|=v,涒ޅN?[#HCP7ϭ4wyyQsuR7s VlR̓O:5te &0u j??Y0Tee!Ƚ!Q8s0#)+4x{g߷dl yۧеapu#W|Q ˏ?$ 03"ϵeb048n2kiuV_+FFH]3dޑj5>|9v0}4tnI\|Ih%y,8u2NCl S%x*8!f},vVŇu0껟`CB]xpp"RÀ+qժ/1a T+r=qcJ]Azc >܀`y S|7 Oջ};YRS]Mig~[ BJ:)ؠ{oVoP4wFxyqgNnGgXddܴi{'AwBOVtLw0zgeC:E+3ɎNa/I MQ7c aDnxCޢ ߲7?aє%xH0clgtHDϊψ^i.:+*S9#xoF7GE캈J֌Ju*5%TRẗD\Q)Uɷ..#"*ղnTzeDUbʈdZQiQ .&#%#ʚ"*9ETZNJ^GYNd巆.AjζWWC[j*턴H+6U"TV˶sv.e۹lmH#= s=萂/\0X:pTc8nei. A䊕;z\/sT/TϛCA97GMsTߎZxyyBCG do.7DєT]mx;y;S'<8yTCaBɔ'as'4G-.B^_+ _TL\ߑlm=Mr%G߂AlXDu\T S #I bu>ʺ`Z#E;źfX/v UNCPtT@"uE0Ug2?if;3D1KRue][Kx貱-ܑ,0KzQ wd}1dNU-!GX,c3+X_aJ"%bl`ﺨ.D>wH[, dc^.K |Ss-!G(,#:s+Xظ- H.z [9}[]ngp;{xwbQ1`&JBڛnƁMaSoVSnvmܓ}n3A]X{a`Grf(fG :6%NDTRKa]D,tYO#Ž.Y"֋/uMBE޵DIb]D,>"Zf$S+"rIWSg-S*_o-1>&~M8~!1^WEs{l8o㵘{=sO)+m#=}P'r] uK!rZ+l_+-aQ2A*DGؐ@{u%G邐Ad)Oo9^ f$U#X,}EE^Msط+ݴ0ș6ed' JTzx[G݆lmCF|j&;3j%bd\1|`H-ޠKculH)ka`Gr]D젓xԠꂃNkC/OQPPK eY%>V2 AA.NCBPK eY%DXba z2AA.OPTPKZY%{ %9AA.DSWPKeY%=RKaj :AA.DSPPKsdY%i_h >AA.PLGPKdY%?^ G CAA.MAKPK8Lastronomical-almanac-5.6/msvc6.zip0000644000175000017500000004027007025775034015433 0ustar jrvjrvPK{'i*u&daa.ncbUT W8P W88W8] tEՏ'!Gu  2A޾9Ԁ:8̊k}{q8GE3; 8:{'A~tVzY.3s)WOtjYsfN3izIWLxdѨ(nQA  w@ @ @ @  m @ @ @ @ %fYUE MQHCEH[|9Rۈi'^Hwrû' AO>SnǠ+?H H> h$W>j#ߗ?NP'4c`<8N8e&<TLMxG AwijIJޙ_Mz]83LxWTj ûH&"< Hjs4nep ᧘Q&<;߄c+jGPx(Tj_)tWݕk; /O+Gd5ܯ/ĄUg5ؤ׏ӻƄGa\l _7Q 7 ȤWl LΗYIFIn˔O2Jq0࠴xCm/Z/Nw-{O< HEG>F8Q-NON5i}Ŀ\'jσ%0tHO?&vY*%Rg'H(Obgk/rt=Y$dG??)G=H?m9ȃ-C^4\BN$al&~ }RQ?QdJ d#}M}R 7:5<A4^p  W|l27'@û̳&; >tDJ|'nGzHx`ʤd:D@z*j;ݨ$#.Cd[0}XOVXwN^&& ogn>%^Rnw#9zA +_yzQ=l{1|< Uo7|NF^o,fg~]f>EoubNyݘd/wvMj/'#M6'4ل{ս*0yްVULx Ao> N϶:6\c ۬k믛Ot6d{=)$ /jl>Ck k8ks%H)uQEZ{ﻱwcG{Q{&yO>'WM>x7##\wyQ{:?"}p?E@ hy?H{z^؞W M->pcPf@(A?`z=} -]~Z7R19\?w *~$ %zrکv+J+܇ϝϭ GZo.w/w#>Y*K~YaM娷 ry&~j\kǂMJa;=LK$ ^ #aGub[Oі/yv0gi?Smv!Pv% 2oP h{J?gOϞ@|_@w.Bm7c"c|z` =~oMz NZ?L/I/ iV~* %o-`/H?U$@q=i͓m#A"k~1 ' =f{p,F}@hƷc%O)H_iA~ZE|FZGDwn5.C>h;~yB/m8 %GYE51gBaw Uf.~Uݰw3@'#LwHjS!MjxJ{L;>Zn[-48C|wbR|{}0 @ hߨu K?zaו=#v?/Wgmp?7ŊyE-@:Sȭ'Orto<[Uc[ j8g+/1=7#wvyQ`7| r-9^Amy*ǖkrx˻Z٘S_m&E[7ʖnRX-իʖŐPvnnP{?BPH:.3_Z5ߑ1?q/Kk^4g^7|x4>< ٿ2tj5,g,庽@|kDA=&&vb-&dv7u&vŦx8#}}OOx/]1֗ơ;ҡ֓ OhOX,-@4V;,p`3گ*}~a%"-HeH[M{"δ\nHW4i OZgl9p3݆υ5 2| {PƄ>2R 8`mz#~ܩ:ZpQX}=.A?7m[ @`wiswz']{}??RMP 4r?T?띁m;z߹n|APW@~?Z}/q"NwwO_ }cBw8}y ؗρ\y8Ƕ}G}g]Aw(za7@( mL 3 ?\P[s!dc%* Px^T"U"IܔJ3,(UYNoJ\sswSU:Xx/O9ǤW?Ws!qx<N;&ɡHQ+Jhel3ga{j.nhŌUAUYu:_n#3U[`0q[9FH2Մ9Y+T^K$,֯֗_ӟJbÿoRVi6O1OݺV @*<=ь|U4H3W}Fp*/QJHyNXqvb:՘4ptA!;4Θ'sk9_<݂1ُ|/Fnk2O=}zKuҫ3&߀yz[0_ Gο P2]jSJt7ܑj~4n3uSv~ 8 N֯i3&_Uܺ\֯).ìP8VjK,4$8l?c ]Ww *jT~aU.VxөUM[[=یU97Bc'Lny"Vn7W6Ӎ~P:[vX&~BhycCE8WkWuv_0_]o)_f\̬ǸN=6C[\SϿ6R"{a;X4}I xa`˞ qG.~ |Ѿ]H?-ۙn-z=Vj A~QpiO1Oo[ed[CUVjqF>:VFɼ:_ʼn&D3˨u41_V%dpӇJ &|~_U1<ϟnaFimh. Y?8)&AyMn1W]TuSiӱ.|,n`OV bPT^AhMf\A0- ILw5-İ%}^3 (Yh7h/D{h5<>?ߤMcs1OsN_A\˕m'h Om{E0C{})c 7@{0к2ZKFhϹx?vh܉֒Nu#diʋ|<x*1>̹Yܸm#S3x'_=)[>u6Z<ڃJԶlj9;MTMBqb:inMơN9^tjղ\q37~{#sA16UU~^{$6qA':!;7/^q=VԲP|t~4躮˶ c: Nx܋euXnײQk Y$a(Vb,{OuLC)%]IwR3f78<g)˞~"]צX χ{?ɣyxgnfuN3)w%:P2ϋXyzuWyX-e":\g},N1T,hǺ@織=zAgy krT5\+UX>Zo]fgDE餱nʶ;]:?Ŭu)f;@,i۽Ά kάe;P#JQFg>:Zz jP.6Fu\?C64qH0(k0 $bM ئ jc]ٽ{IHOi!UHڇ%URPF M7gz{M"%}iwg9w9gz J|q]Gۃ9+Ea柁9=wL?1h_pk_=̚sqfv~ηt=4~_~xN]E%a^+_ݩz_l9v|N1+<òNC3i=Knz]"8;# #vwܸWQN7Q%9w^HxSGChX^zm!}3GTctΟKWCxf_<5yQ1tҗ;GVu|*Π9]C%2Ӽq//Yg =Mx&5LK(nMF iր2rh9y?gwju;zM)ݲv(;wt9|cSt,QOX֮l˪uʶuj}z7Ooyz֭T lROBՓQE[AsU rż=]N _69Y[Q*|eN٦R3׵UT2`YA呂} 謔3)eZ5!E @̐v&W%VjtϘ$N% Dg\3JU5DLF޳+„{j-Q h*(ݼBJ@SK拎dN2'UEQ#j_(oiVi9X,gjף]dˮ8E e2S)gg1I4TTsCG&մk{Wٳep`d8lCj A_Wv/?S=06IUVPgb{j٢ZɳT͔%<4UU}c]lXFS縶СlzX n@.J~^];&l`r|ը|h3 ^G'QK <~wL'z}L`7STK GztL|+S72,&[W|K0k7L;ݓ; {UI|gV:<"?XSMT:\ҡ F0_=6圩2_^ֱ<ݣwp|` R|_32M bOJ1^幾=; ~xO ՝Tèɩ~h;ScF%C7^ovWb*jS~^Sy=ڣP%@u%Uo&޸lU4g1ohJ5SHc0V:mӤ+(ڧ:b{ 7UTP5ESƪcR52&TQ#<δ:o1uHu1TBۦ~nsĘP|јPl/2-GGy Gd.<ʤ*'Ϛn2F5w"ꑪGLo bYtwCgډGirV÷PuMUfe}q12ҝL-Dг)G)_J*6 Z@okLlFg΍ގu n,沈]-:w?({ So'/0ȸPhiS|**.#)22'-H&d"#CiKTdMRj2Ț<#22dDEꑑ=*t:##kd##Tdm3YGֶ𑑵|dG7>2v?2&GEQ}{tpaXʎ"CŇ>xA&k)1Ksmx]z#5poʄ\o_2Ucsռ_ >n3^)?|-d|(%?|Q[Mz|P߄3;LR156_SU:> /TtOWf wc0؊O7:Nt]dj_=}+π-r-r-r-r-r-r-r-r-_uPK{'z! aa.plgUT W8P W8W8ao6  iVn0b8H:d< D˪)R Q>IJzUoXv^9|vVo.FU9[]SV^.TR895 CƐwmVhFK|m%$5%l><>l?\m~Y.7w3=/R{DzXkLmx~s%͂|y o/.~? G7o'bޕ{`BCTu2yY6Zmxuy9zBt^ٲ2ΝVrdI0\5p1>֒U5F2)3:(;NY)A>(AvJZ3Bz^ъXr+'̜@-Nj=VEZȲTRcttgʧ.834/܏?~VT><59vPKz'}Daa.dswUT :W8P W88W8?oPwé]-1u bbÒ*-6T%ԁݵTlϽH#o-|>p%5~S r1ۦk6M);Lȶnϓ(.|HgP~A'Re S"spnl|zu1 x ij!bK }ܱ'gum}_W@^TJ7PKz'faa.dspUT 8W8P W86W8Xmo6 CRtgA[ &;: 0hlH_ߣd9v㼌> y#*oGZ5*E \A_Y8c,)BVn~Λ\#11f\Ĺwpt,p%R9?oBvgH;nzؼ:~|~{wQįG̒jwZZg ƈqi8t3n~ C8!~*t3K S^6?V\e!KpJ&cp:+a V@PlIe1 &ňOsO3ng(]CL54at^@BvOxǒT+Y;gDlF1|24S|7"Q;ݹ:*ĦsGg@1WisµYkr:O肏5ls^f̎\C}բ#-cNݐ).<=,=fy~ $)Gb %aEQNcriRD@*b7,- Ea2[x\4a.`7hUIIȏRb>{zQ~^-6Ym(/7:7Ћ2B;EجtcnlUzA5>Qs mލ)f+ʆŇ&,< T#̿'A6*Ѕ4吮k6/e_|r*xeƾ`zqZhy)ݾcN sr'>SÅoh2{K~e *Z7rz: CGwQƠcqh:MDqP}}MBAfYS4Tf t:}i}%2t }AQu7*%5}=. PJ_IN;WC=}O|QEv_@xB C(d㐐"Idssc46+ΰfn?_k1kb3RY)T&<9Řx~*Ccyr2KGsb4l%o{ݪ3֧ǰͨZ}&k_RlVGb=E&u3v(3SNuBi9ʏB+[`lztš/g.THUgL_8уg/_;2rr̭=4xJ,aߪ{&R0D[ip`[Ka:L X~ WU$ѡ Gu8RN=J zz K_-H [L?e :2};-CPO{Džf-w+/ӇqؘeҚ 3&f&bn앭ȅԽ-DSゴCy7Y,EN]֒aap TvT2D̤+djrNRmJ/dܘcus_rsWnqJkB!;Žٵ5 !?%B?G!?BȉK/[[G?!CGH몰#sѝL_dz*tƿg&vFeacn+;w7tXg˶ ?]2w&dflQQNxPCSdx[G ظ7rqsU*&oIفLԦl}m>X|m~a\/Ʀkؿp҇v6J~KSйj~㣉inq]76[v/K\wV7 Fr˯/E%a.CĠktI؃$CWVLJE {B`8,&g֎8uq1&ԙb ME.`tvj嗣n梸v#{< hS"w _m ]pA)ik\Xp!yӴ?l_\ֺ݁>-t [y|4>UA+8ncӺOf(e8 o( J0_9:-@ R]9iƧ+ZNK77X:cUA%MP77)DެUؤ4i0>7JqTp%Ri*U[ Uz-DcFRPB\P}U !APrH\9TtV *mC*JOP{ł*!A=nb*J+吠JHG9&(4Qj(G5 zJ{wrHP:9$zmMF4z~Wk-T+lVC߽˚ʤ}vʲ٨LKDi>U>>SS~ w#H`1ؗyܘ9s͓ `~neQ C Gllɶ_&,4U-nsu;(zZ{Y?ۿ9O{{Q{ĕ?n>>'{8?FM7HUA˯8̾gМqÖI{=tz`a<uY0/E^Me*J] 1*AMADJ A+ A@kIeW 2I,"LAymTT" H(PAPlCP1DB$3/dXUbK 5f2H@E!'s ë>#f ^# t4 M3?eXjU E(~GG^ + hXOxQ.ZT H@A0q{D`nB&&ĽB=!** 20fLGI` A-}"W2\‰)oA3q'Dg f$ZE3w2H0zFPK {'i*u&d aa.ncbUTW8PK {'z!   &aa.plgUTW8PK z'}D  *aa.dswUT:W8PK z'f  +aa.dspUT8W8PK {'Bb  _0aa.optUTW8PK ){' +  P6aa.depUT.W8PK ){'r?0|,  7aa.makUT.W8PK>astronomical-almanac-5.6/nep404.c0000644000175000017500000003052406253703513015023 0ustar jrvjrv /* First date in file = 625296.50 Number of records = 16731.0 Days per record = 131.0 Julian Years Lon Lat Rad -3000.0 to -2499.7: 0.44 0.30 0.50 -2499.7 to -1999.7: 0.39 0.20 0.39 -1999.7 to -1499.7: 0.31 0.15 0.31 -1499.7 to -999.8: 0.32 0.19 0.36 -999.8 to -499.8: 0.29 0.15 0.29 -499.8 to 0.2: 0.31 0.14 0.27 0.2 to 500.2: 0.28 0.14 0.27 500.2 to 1000.1: 0.34 0.15 0.39 1000.1 to 1500.1: 0.31 0.16 0.31 1500.1 to 2000.1: 0.33 0.16 0.29 2000.1 to 2500.0: 0.38 0.21 0.36 2500.0 to 3000.0: 0.43 0.25 0.46 3000.0 to 3000.4: 0.122 0.071 0.260 */ #include "plantbl.h" static double FAR tabl[] = { -1376.86480, 730.38970, 78655362.50948, 1095691.38676, -196.19023, 2086.77782, -122.04650, -276.81592, 184.56164, -148.08924, 3.39142, -14.75027, -9.22741, 0.87688, -0.13903, -0.44707, -0.17668, -0.36299, -0.12682, -0.26636, -0.51426, -0.24667, -0.04965, -0.03177, 0.05050, -0.00249, -0.80362, -0.07363, -0.15436, -0.07180, 2.45034, -3.50145, 0.86698, 0.09777, 7.72386, 7.16565, 2.10273, 8.86682, 2.44705, 77.90155, 0.28323, -11.87157, -13.64083, 252.70556, -4.94214, -6.17988, -305.60504, 51.23962, -2759.81719, 2476.20912, 12.65762, 13.31543, 0.36996, -0.19077, 0.67363, 0.36737, 0.02312, 0.02216, 0.09953, 0.04777, -0.00572, -0.02772, -0.02478, -0.21920, -0.15289, -1.50784, -0.17822, 0.34638, -0.70473, -8.61559, -2.65756, 1.25632, -0.31453, -1.40348, -4.02571, -1.50467, -69.62308, 3.21315, 0.69973, 0.08832, -0.00551, -0.04964, -0.02264, -0.34881, 0.00762, -1.85072, 0.01407, -0.30457, -0.09851, -0.02372, -0.07729, -0.11602, -0.75995, -0.71884, -0.08585, -0.30406, 0.45818, 0.14921, -0.01033, -0.11776, 0.00640, -0.57717, -0.01014, -0.01357, -0.00544, -0.02168, 0.40468, 0.28195, 0.00668, 0.14448, 0.01245, -0.08956, -0.26283, 0.01864, -0.00641, 18.55347, 0.01460, 0.08284, -0.04785, 0.11360, -0.33861, 0.01327, -0.06392, -0.18758, 0.05449, -0.05583, -0.00435, -0.09869, -0.00286, -0.04613, -0.00395, -0.14564, -0.01385, -0.01762, 0.21160, -0.61631, -0.52100, -0.04583, 0.32812, 0.32138, 0.04749, -0.05724, 0.11239, 0.13216, -0.01203, 0.40084, -0.05207, 34.07903, -0.21457, -0.34938, -0.04594, 0.11198, -0.30662, -0.20776, -0.01076, -0.10959, 0.10891, -0.10304, -0.28141, 0.25061, -0.20293, 0.79930, }; static double FAR tabb[] = { -391.05987, -243.95958, -23.83558, 58.13857, 5.04859, -3.93183, -14.21914, 7.14247, -12.09415, -9.70132, 1.04307, 0.47323, -0.07504, 0.70575, -0.05239, 0.00482, -0.02916, 0.00877, -0.00528, -0.00286, 0.00028, -0.00228, -0.00056, -0.00149, 0.00049, 0.00047, -0.18765, -0.59571, 0.03742, -0.14653, 2.30535, 0.65092, 0.42216, 0.24521, -2.86932, 2.37808, -0.58456, 0.27446, -1.12264, -2.04413, -11.71318, -1.41554, -23.30671, -24.70499, 8.82738, 85.64657, -90.02223, 22.42604, -4749.41359, -4244.46820, 25.20811, -18.51469, -1.19892, -0.61067, 0.67734, -1.08912, -0.01607, 0.00626, -0.00008, 0.00126, -0.00330, -0.00078, -0.01503, 0.00758, -0.13208, -0.00218, -0.04522, 0.20297, -0.94708, -0.77897, -2.74075, -3.01122, -1.03394, 0.00886, 1.55485, -4.68416, -0.13244, -57.26983, 0.05589, -0.55396, -0.00130, 0.00526, -0.01028, 0.02086, 0.01334, 0.00699, 0.08565, 0.02020, 0.01001, -0.08402, 0.08558, -0.04488, 0.57268, -0.59574, 0.00807, 0.00492, 0.21993, -0.18949, -0.00396, 0.00735, 0.00487, 0.00230, 0.00699, -0.00473, 0.01406, -0.00139, 0.00738, 0.00099, 0.00161, 0.00019, -0.00067, -0.00047, 0.00572, -0.00486, -0.00842, 0.00322, 0.00018, -0.00109, -0.00272, 0.00112, -0.00041, 0.00763, 0.00211, 0.00118, -0.46842, -0.17877, 0.00209, -0.00179, 0.00090, -0.00075, 0.00618, 0.00610, 0.00015, 0.00032, -0.00123, 0.00026, 0.00332, 0.00135, 0.39130, -0.34727, 0.00015, -0.00027, -0.00026, -0.00052, 0.00162, 0.00913, -0.00697, 0.00308, -0.00333, -0.00258, -0.00117, 0.00035, 0.00766, 0.00194, 0.00135, 0.00067, -0.41171, 0.24241, 0.00106, 0.00025, 0.00013, -0.00019, }; static double FAR tabr[] = { -767.68936, -460.59576, -52.41861, -273.85897, 59.52489, 1.85006, -39.64750, 23.63348, -34.60399, -23.41681, 2.74937, 1.55389, 0.20343, 2.15502, -0.12846, 0.07199, -0.07555, 0.05582, -0.04354, 0.01546, -0.03931, 0.07623, -0.00491, 0.00661, 0.00322, 0.01540, -0.06741, -0.35343, 0.00469, -0.08073, 1.94975, 0.66376, 0.06137, 0.31426, -2.93841, 4.27732, -4.00342, 1.11157, -36.87785, 1.24960, 4.69573, 2.15164, -114.24899, -6.69320, 12.99919, -9.47795, -21.82350, -156.88624, -1237.19769, -1379.88864, 6.54369, -6.20873, -0.14163, -0.32700, 0.17937, -0.34864, 0.01393, -0.01286, 0.02876, -0.05767, 0.02210, -0.00128, 0.16495, -0.01242, 1.15915, -0.10365, -0.33224, -0.10045, 6.83719, -0.27499, -0.31284, -0.94332, 1.63704, -0.33318, 1.48134, -1.32257, 0.96498, -8.31047, -0.00402, -0.09441, 0.04292, -0.00444, 0.30325, -0.02012, 1.67999, 0.00353, 0.00467, 0.03556, 0.01393, -0.01229, 0.01188, -0.01390, 0.04615, -0.03509, 0.32423, -0.12491, 0.13682, 0.15131, 0.11221, -0.01201, 0.57239, 0.00093, 0.02068, -0.01162, 0.00647, -0.00325, 0.27010, -0.42993, 0.14314, -0.01353, -0.08757, -0.00699, 0.00199, 0.31873, 18.80329, 0.01681, 0.08009, -0.00998, -0.14421, -0.15912, 0.37208, 0.49744, 0.35144, 0.06582, -0.11501, -0.14037, 0.10352, -0.00768, 0.04826, -0.00423, 0.19850, 0.00310, -0.01780, 0.01350, -0.61106, -0.20525, -0.04388, 0.52143, 0.19300, -0.21446, -0.05749, -0.04776, 0.12877, -0.10908, 0.39821, 0.00627, 34.03956, 0.04392, -0.34455, 0.22015, 0.11743, 0.04638, 0.20723, -0.30447, 0.10976, -0.01008, -0.20778, -0.21822, 0.24939, 0.27976, 0.79790, 0.20200, }; static char FAR args[] = { 0, 3, 2, 1, 7, -2, 8, 0, 3, 3, 5, -8, 6, 3, 8, 0, 2, 2, 7, -4, 8, 0, 3, 1, 5, -3, 6, 3, 8, 0, 2, 3, 7, -6, 8, 0, 2, 4, 7, -8, 8, 0, 3, 1, 6, -6, 7, 6, 8, 0, 3, 1, 6, -5, 7, 4, 8, 0, 3, 1, 6, -4, 7, 2, 8, 0, 2, 1, 6, -3, 7, 0, 3, 1, 6, -2, 7, -1, 8, 0, 2, 5, 7, -9, 8, 1, 2, 4, 7, -7, 8, 1, 2, 3, 7, -5, 8, 1, 2, 2, 7, -3, 8, 0, 2, 1, 7, -1, 8, 1, 1, 1, 8, 2, 2, 1, 7, -3, 8, 0, 2, 2, 7, -5, 8, 1, 3, 1, 6, -6, 7, 5, 8, 0, 3, 1, 6, -5, 7, 3, 8, 0, 2, 5, 7, -8, 8, 0, 2, 4, 7, -6, 8, 0, 2, 3, 7, -4, 8, 0, 2, 2, 7, -2, 8, 1, 1, 1, 7, 0, 1, 2, 8, 2, 2, 1, 7, -4, 8, 0, 2, 5, 7, -7, 8, 0, 2, 4, 7, -5, 8, 0, 2, 3, 7, -3, 8, 0, 2, 2, 7, -1, 8, 0, 2, 1, 7, 1, 8, 0, 1, 3, 8, 1, 2, 1, 6, -2, 8, 1, 2, 5, 7, -6, 8, 0, 2, 4, 7, -4, 8, 0, 1, 4, 8, 1, 3, 2, 5, -4, 6, -1, 8, 1, 3, 1, 6, 1, 7, -3, 8, 0, 2, 1, 6, -1, 8, 1, 3, 1, 6, -1, 7, 1, 8, 0, 3, 2, 5, -6, 6, 1, 8, 0, 2, 5, 7, -5, 8, 1, 1, 1, 6, 0, 2, 6, 7, -6, 8, 0, 2, 7, 7, -7, 8, 0, 2, 2, 6, -2, 8, 0, 3, 2, 5, -3, 6, -1, 8, 0, 2, 2, 6, -1, 8, 1, 2, 1, 5, -2, 8, 0, 3, 3, 5, -5, 6, -1, 8, 0, 2, 4, 7, 5, 8, 0, 2, 1, 5, -1, 8, 1, 3, 1, 5, -1, 7, 1, 8, 1, 3, 1, 5, -5, 6, 1, 8, 1, 1, 1, 5, 0, 2, 2, 5, -1, 8, 1, -1 }; /* Total terms = 59, small = 58 */ struct plantbl nep404 = { 9, { 0, 0, 0, 0, 3, 8, 7, 9, 0,}, 3, args, tabl, tabb, tabr, 3.0110386869399999e+01, 3652500.0, 1.0 }; astronomical-almanac-5.6/nutate.c0000644000175000017500000002430606427373314015317 0ustar jrvjrv /* Nutation in longitude and obliquity * computed at Julian date J. * * References: * "Summary of 1980 IAU Theory of Nutation (Final Report of the * IAU Working Group on Nutation)", P. K. Seidelmann et al., in * Transactions of the IAU Vol. XVIII A, Reports on Astronomy, * P. A. Wayman, ed.; D. Reidel Pub. Co., 1982. * * "Nutation and the Earth's Rotation", * I.A.U. Symposium No. 78, May, 1977, page 256. * I.A.U., 1980. * * Woolard, E.W., "A redevelopment of the theory of nutation", * The Astronomical Journal, 58, 1-3 (1953). * * This program implements all of the 1980 IAU nutation series. * Results checked at 100 points against the 1986 AA; all agreed. * * * - S. L. Moshier, November 1987 * October, 1992 - typo fixed in nutation matrix * October, 1995 - fixed typo in node argument, * tested against JPL DE403 ephemeris file. */ #if __STDC__ int sscc(int, double, int); extern int epsiln(double); extern int showcor(char *, double *, double *); double sin(double), cos(double), floor(double), fabs(double); int nutlo (double); #else int sscc(), epsiln(), showcor(); double sin(), cos(), floor(), fabs(); #endif #include "plantbl.h" /* The answers are posted here by nutlo(): */ double jdnut = -1.0; /* time to which the nutation applies */ double nutl; /* nutation in longitude (radians) */ double nuto; /* nutation in obliquity (radians) */ extern double eps, coseps, sineps, STR; /* Each term in the expansion has a trigonometric * argument given by * W = i*MM + j*MS + k*FF + l*DD + m*OM * where the variables are defined below. * The nutation in longitude is a sum of terms of the * form (a + bT) * sin(W). The terms for nutation in obliquity * are of the form (c + dT) * cos(W). The coefficients * are arranged in the tabulation as follows: * * Coefficient: * i j k l m a b c d * 0, 0, 0, 0, 1, -171996, -1742, 92025, 89, * The first line of the table, above, is done separately * since two of the values do not fit into 16 bit integers. * The values a and c are arc seconds times 10000. b and d * are arc seconds per Julian century times 100000. i through m * are integers. See the program for interpretation of MM, MS, * etc., which are mean orbital elements of the Sun and Moon. * * If terms with coefficient less than X are omitted, the peak * errors will be: * * omit error, omit error, * a < longitude c < obliquity * .0005" .0100" .0008" .0094" * .0046 .0492 .0095 .0481 * .0123 .0880 .0224 .0905 * .0386 .1808 .0895 .1129 */ short FAR nt[105*9] = { 0, 0, 0, 0, 2, 2062, 2,-895, 5, -2, 0, 2, 0, 1, 46, 0,-24, 0, 2, 0,-2, 0, 0, 11, 0, 0, 0, -2, 0, 2, 0, 2,-3, 0, 1, 0, 1,-1, 0,-1, 0,-3, 0, 0, 0, 0,-2, 2,-2, 1,-2, 0, 1, 0, 2, 0,-2, 0, 1, 1, 0, 0, 0, 0, 0, 2,-2, 2,-13187,-16, 5736,-31, 0, 1, 0, 0, 0, 1426,-34, 54,-1, 0, 1, 2,-2, 2,-517, 12, 224,-6, 0,-1, 2,-2, 2, 217,-5,-95, 3, 0, 0, 2,-2, 1, 129, 1,-70, 0, 2, 0, 0,-2, 0, 48, 0, 1, 0, 0, 0, 2,-2, 0,-22, 0, 0, 0, 0, 2, 0, 0, 0, 17,-1, 0, 0, 0, 1, 0, 0, 1,-15, 0, 9, 0, 0, 2, 2,-2, 2,-16, 1, 7, 0, 0,-1, 0, 0, 1,-12, 0, 6, 0, -2, 0, 0, 2, 1,-6, 0, 3, 0, 0,-1, 2,-2, 1,-5, 0, 3, 0, 2, 0, 0,-2, 1, 4, 0,-2, 0, 0, 1, 2,-2, 1, 4, 0,-2, 0, 1, 0, 0,-1, 0,-4, 0, 0, 0, 2, 1, 0,-2, 0, 1, 0, 0, 0, 0, 0,-2, 2, 1, 1, 0, 0, 0, 0, 1,-2, 2, 0,-1, 0, 0, 0, 0, 1, 0, 0, 2, 1, 0, 0, 0, -1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 2,-2, 0,-1, 0, 0, 0, 0, 0, 2, 0, 2,-2274,-2, 977,-5, 1, 0, 0, 0, 0, 712, 1,-7, 0, 0, 0, 2, 0, 1,-386,-4, 200, 0, 1, 0, 2, 0, 2,-301, 0, 129,-1, 1, 0, 0,-2, 0,-158, 0,-1, 0, -1, 0, 2, 0, 2, 123, 0,-53, 0, 0, 0, 0, 2, 0, 63, 0,-2, 0, 1, 0, 0, 0, 1, 63, 1,-33, 0, -1, 0, 0, 0, 1,-58,-1, 32, 0, -1, 0, 2, 2, 2,-59, 0, 26, 0, 1, 0, 2, 0, 1,-51, 0, 27, 0, 0, 0, 2, 2, 2,-38, 0, 16, 0, 2, 0, 0, 0, 0, 29, 0,-1, 0, 1, 0, 2,-2, 2, 29, 0,-12, 0, 2, 0, 2, 0, 2,-31, 0, 13, 0, 0, 0, 2, 0, 0, 26, 0,-1, 0, -1, 0, 2, 0, 1, 21, 0,-10, 0, -1, 0, 0, 2, 1, 16, 0,-8, 0, 1, 0, 0,-2, 1,-13, 0, 7, 0, -1, 0, 2, 2, 1,-10, 0, 5, 0, 1, 1, 0,-2, 0,-7, 0, 0, 0, 0, 1, 2, 0, 2, 7, 0,-3, 0, 0,-1, 2, 0, 2,-7, 0, 3, 0, 1, 0, 2, 2, 2,-8, 0, 3, 0, 1, 0, 0, 2, 0, 6, 0, 0, 0, 2, 0, 2,-2, 2, 6, 0,-3, 0, 0, 0, 0, 2, 1,-6, 0, 3, 0, 0, 0, 2, 2, 1,-7, 0, 3, 0, 1, 0, 2,-2, 1, 6, 0,-3, 0, 0, 0, 0,-2, 1,-5, 0, 3, 0, 1,-1, 0, 0, 0, 5, 0, 0, 0, 2, 0, 2, 0, 1,-5, 0, 3, 0, 0, 1, 0,-2, 0,-4, 0, 0, 0, 1, 0,-2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0,-4, 0, 0, 0, 1, 1, 0, 0, 0,-3, 0, 0, 0, 1, 0, 2, 0, 0, 3, 0, 0, 0, 1,-1, 2, 0, 2,-3, 0, 1, 0, -1,-1, 2, 2, 2,-3, 0, 1, 0, -2, 0, 0, 0, 1,-2, 0, 1, 0, 3, 0, 2, 0, 2,-3, 0, 1, 0, 0,-1, 2, 2, 2,-3, 0, 1, 0, 1, 1, 2, 0, 2, 2, 0,-1, 0, -1, 0, 2,-2, 1,-2, 0, 1, 0, 2, 0, 0, 0, 1, 2, 0,-1, 0, 1, 0, 0, 0, 2,-2, 0, 1, 0, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 1, 2, 2, 0,-1, 0, -1, 0, 0, 0, 2, 1, 0,-1, 0, 1, 0, 0,-4, 0,-1, 0, 0, 0, -2, 0, 2, 2, 2, 1, 0,-1, 0, -1, 0, 2, 4, 2,-2, 0, 1, 0, 2, 0, 0,-4, 0,-1, 0, 0, 0, 1, 1, 2,-2, 2, 1, 0,-1, 0, 1, 0, 2, 2, 1,-1, 0, 1, 0, -2, 0, 2, 4, 2,-1, 0, 1, 0, -1, 0, 4, 0, 2, 1, 0, 0, 0, 1,-1, 0,-2, 0, 1, 0, 0, 0, 2, 0, 2,-2, 1, 1, 0,-1, 0, 2, 0, 2, 2, 2,-1, 0, 0, 0, 1, 0, 0, 2, 1,-1, 0, 0, 0, 0, 0, 4,-2, 2, 1, 0, 0, 0, 3, 0, 2,-2, 2, 1, 0, 0, 0, 1, 0, 2,-2, 0,-1, 0, 0, 0, 0, 1, 2, 0, 1, 1, 0, 0, 0, -1,-1, 0, 2, 1, 1, 0, 0, 0, 0, 0,-2, 0, 1,-1, 0, 0, 0, 0, 0, 2,-1, 2,-1, 0, 0, 0, 0, 1, 0, 2, 0,-1, 0, 0, 0, 1, 0,-2,-2, 0,-1, 0, 0, 0, 0,-1, 2, 0, 1,-1, 0, 0, 0, 1, 1, 0,-2, 1,-1, 0, 0, 0, 1, 0,-2, 2, 0,-1, 0, 0, 0, 2, 0, 0, 2, 0, 1, 0, 0, 0, 0, 0, 2, 4, 2,-1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, }; /* arrays to hold sines and cosines of multiple angles */ double FAR ss[5][8]; double FAR cc[5][8]; #define mod3600(x) ((x) - 1296000. * floor ((x)/1296000.)) int nutlo(J) double J; { double f, g, T, T2, T10; double MM, MS, FF, DD, OM; double cu, su, cv, sv, sw; double C, D; int i, j, k, k1, m; short *p; if( jdnut == J ) return(0); jdnut = J; /* Julian centuries from 2000 January 1.5, * barycentric dynamical time */ T = (J-2451545.0)/36525.0; T2 = T * T; T10 = T / 10.0; /* Fundamental arguments in the FK5 reference system. */ /* longitude of the mean ascending node of the lunar orbit * on the ecliptic, measured from the mean equinox of date */ OM = (mod3600 (-6962890.539 * T + 450160.280) + (0.008 * T + 7.455) * T2) * STR; /* mean longitude of the Sun minus the * mean longitude of the Sun's perigee */ MS = (mod3600 (129596581.224 * T + 1287099.804) - (0.012 * T + 0.577) * T2) * STR; /* mean longitude of the Moon minus the * mean longitude of the Moon's perigee */ MM = (mod3600 (1717915922.633 * T + 485866.733) + (0.064 * T + 31.310) * T2) * STR; /* mean longitude of the Moon minus the * mean longitude of the Moon's node */ FF = (mod3600 (1739527263.137 * T + 335778.877) + (0.011 * T - 13.257) * T2) * STR; /* mean elongation of the Moon from the Sun. */ DD = (mod3600 (1602961601.328 * T + 1072261.307) + (0.019 * T - 6.891) * T2) * STR; /* Calculate sin( i*MM ), etc. for needed multiple angles */ sscc( 0, MM, 3 ); sscc( 1, MS, 2 ); sscc( 2, FF, 4 ); sscc( 3, DD, 4 ); sscc( 4, OM, 2 ); C = 0.0; D = 0.0; p = &nt[0]; /* point to start of table */ for( i=0; i<105; i++ ) { /* argument of sine and cosine */ k1 = 0; cv = 0.0; sv = 0.0; for( m=0; m<5; m++ ) { j = *p++; if( j ) { k = j; if( j < 0 ) k = -k; su = ss[m][k-1]; /* sin(k*angle) */ if( j < 0 ) su = -su; cu = cc[m][k-1]; if( k1 == 0 ) { /* set first angle */ sv = su; cv = cu; k1 = 1; } else { /* combine angles */ sw = su*cv + cu*sv; cv = cu*cv - su*sv; sv = sw; } } } /* longitude coefficient */ f = *p++; if( (k = *p++) != 0 ) f += T10 * k; /* obliquity coefficient */ g = *p++; if( (k = *p++) != 0 ) g += T10 * k; /* accumulate the terms */ C += f * sv; D += g * cv; } /* first terms, not in table: */ C += (-1742.*T10 - 171996.)*ss[4][0]; /* sin(OM) */ D += ( 89.*T10 + 92025.)*cc[4][0]; /* cos(OM) */ /* printf( "nutation: in longitude %.3f\", in obliquity %.3f\"\n", C, D ); */ /* Save answers, expressed in radians */ nutl = 0.0001 * STR * C; nuto = 0.0001 * STR * D; return(0); } /* Nutation -- AA page B20 * using nutation in longitude and obliquity from nutlo() * and obliquity of the ecliptic from epsiln() * both calculated for Julian date J. * * p[] = equatorial rectangular position vector of object for * mean ecliptic and equinox of date. */ int nutate( J, p ) double J; double p[]; { double ce, se, cl, sl, sino, f; double dp[3], p1[3]; int i; nutlo(J); /* be sure we calculated nutl and nuto */ epsiln(J); /* and also the obliquity of date */ f = eps + nuto; ce = cos( f ); se = sin( f ); sino = sin(nuto); cl = cos( nutl ); sl = sin( nutl ); /* Apply adjustment * to equatorial rectangular coordinates of object. * * This is a composite of three rotations: rotate about x axis * to ecliptic of date; rotate about new z axis by the nutation * in longitude; rotate about new x axis back to equator of date * plus nutation in obliquity. */ p1[0] = cl*p[0] - sl*coseps*p[1] - sl*sineps*p[2]; p1[1] = sl*ce*p[0] + ( cl*coseps*ce + sineps*se )*p[1] - ( sino + (1.0-cl)*sineps*ce )*p[2]; p1[2] = sl*se*p[0] + ( sino + (cl-1.0)*se*coseps )*p[1] + ( cl*sineps*se + coseps*ce )*p[2]; for( i=0; i<3; i++ ) dp[i] = p1[i] - p[i]; showcor( "nutation", p, dp ); for( i=0; i<3; i++ ) p[i] = p1[i]; return(0); } /* Prepare lookup table of sin and cos ( i*Lj ) * for required multiple angles */ int sscc( k, arg, n ) int k; double arg; int n; { double cu, su, cv, sv, s; int i; su = sin(arg); cu = cos(arg); ss[k][0] = su; /* sin(L) */ cc[k][0] = cu; /* cos(L) */ sv = 2.0*su*cu; cv = cu*cu - su*su; ss[k][1] = sv; /* sin(2L) */ cc[k][1] = cv; for( i=2; i Two ) goto laskar; Z = (( 0.017998*T + 0.30188)*T + 2306.2181)*T*STR; z = (( 0.018203*T + 1.09468)*T + 2306.2181)*T*STR; TH = ((-0.041833*T - 0.42665)*T + 2004.3109)*T*STR; sinth = SIN(TH); costh = COS(TH); sinZ = SIN(Z); cosZ = COS(Z); sinz = SIN(z); cosz = COS(z); A = cosZ*costh; B = sinZ*costh; if( direction < 0 ) { /* From J2000.0 to J */ x[0] = (A*cosz - sinZ*sinz)*R[0] - (B*cosz + cosZ*sinz)*R[1] - sinth*cosz*R[2]; x[1] = (A*sinz + sinZ*cosz)*R[0] - (B*sinz - cosZ*cosz)*R[1] - sinth*sinz*R[2]; x[2] = cosZ*sinth*R[0] - sinZ*sinth*R[1] + costh*R[2]; } else { /* From J to J2000.0 */ x[0] = (A*cosz - sinZ*sinz)*R[0] + (A*sinz + sinZ*cosz)*R[1] + cosZ*sinth*R[2]; x[1] = -(B*cosz + cosZ*sinz)*R[0] - (B*sinz - cosZ*cosz)*R[1] - sinZ*sinth*R[2]; x[2] = -sinth*cosz*R[0] - sinth*sinz*R[1] + costh*R[2]; } goto done; laskar: #endif /* IAU */ /* Implementation by elementary rotations using Laskar's expansions. * First rotate about the x axis from the initial equator * to the ecliptic. (The input is equatorial.) */ if( direction == 1 ) epsiln( J ); /* To J2000 */ else epsiln( J2000 ); /* From J2000 */ x[0] = R[0]; z = coseps*R[1] + sineps*R[2]; x[2] = -sineps*R[1] + coseps*R[2]; x[1] = z; /* Precession in longitude */ T /= 10.0; /* thousands of years */ p = pAcof; pA = *p++; for( i=0; i<9; i++ ) pA = pA * T + *p++; pA *= STR * T; /* Node of the moving ecliptic on the J2000 ecliptic. */ p = nodecof; W = *p++; for( i=0; i<10; i++ ) W = W * T + *p++; /* Rotate about z axis to the node. */ if( direction == 1 ) z = W + pA; else z = W; B = COS(z); A = SIN(z); z = B * x[0] + A * x[1]; x[1] = -A * x[0] + B * x[1]; x[0] = z; /* Rotate about new x axis by the inclination of the moving * ecliptic on the J2000 ecliptic. */ p = inclcof; z = *p++; for( i=0; i<10; i++ ) z = z * T + *p++; if( direction == 1 ) z = -z; B = COS(z); A = SIN(z); z = B * x[1] + A * x[2]; x[2] = -A * x[1] + B * x[2]; x[1] = z; /* Rotate about new z axis back from the node. */ if( direction == 1 ) z = -W; else z = -W - pA; B = COS(z); A = SIN(z); z = B * x[0] + A * x[1]; x[1] = -A * x[0] + B * x[1]; x[0] = z; /* Rotate about x axis to final equator. */ if( direction == 1 ) epsiln( J2000 ); else epsiln( J ); z = coseps * x[1] - sineps * x[2]; x[2] = sineps * x[1] + coseps * x[2]; x[1] = z; #if IAU done: #endif for( i=0; i<3; i++ ) R[i] = x[i]; return(0); } astronomical-almanac-5.6/protos.h0000644000175000017500000000651306616725104015350 0ustar jrvjrv/* * This file was automatically generated by version 1.7 of cextract. * Manual editing not recommended. * * Created: Mon Dec 18 21:38:43 1995 */ extern int altaz ( double pol[3], double J ); extern int angles ( double p[], double q[], double e[] ); extern int annuab ( double p[] ); extern double arcdot ( double p[], double q[] ); extern int domoon ( void ); extern int iter_trnsit ( int (*func)() ); extern int moonll ( double J, double moonpp[], double moonpol[] ); extern int gmoon ( double J, double rect[], double pol[] ); extern double mods3600 ( double x ); extern int moon1 ( void ); extern int moon2 ( void ); extern int moon3 ( void ); extern int moon4 ( int ltflag ); extern int chewm ( short *p, int nlines, int nangles, int typflg, double ans[] ); extern int showcname ( char *in ); extern int relativity ( double p[], double q[], double e[] ); extern double deltat ( double Y ); extern int update ( void ); extern int diurab ( double last, double *ra, double *dec ); extern int diurpx ( double last, double *ra, double *dec, double dist ); extern int showrd ( char *msg, double p[], double pol[] ); extern int showcor ( char *strng, double p[], double dp[] ); extern int dms ( double x ); extern int hms ( double x ); extern double zgetdate ( void ); extern double caltoj ( long year, int month, double day ); extern int jtocal ( double J ); extern double mod360 ( double x ); extern double modtp ( double x ); extern double gethms ( void ); extern int getnum ( char *msg, void *num, char *format ); extern int deltap ( double p0[], double p1[], double *dr, double *dd ); extern int epsiln ( double J ); extern int fk4fk5 ( double p[], double m[], struct star *el ); extern int gplan ( double J, struct plantbl *plan, double pobj[] ); extern int g3plan ( double J, struct plantbl *plan, double pobj[], int obj ); extern int kepler ( double J, struct orbit *e, double rect[], double polar[] ); extern int embofs ( double J, double emb[], double *r ); extern int kinit ( void ); extern int getorbit ( struct orbit *el ); extern int getstar ( struct star *el ); extern FILE *fincat ( char *name, int n, char *str1, char *str2 ); extern int lightt ( struct orbit *elemnt, double q[], double e[] ); extern int lonlat ( double pp[], double J, double polar[], int precess ); extern int nutlo ( double J ); extern int nutate ( double J, double p[] ); extern int sscc ( int k, double arg, int n ); extern int precess ( double R[], double J, int direction ); extern double refrac ( double alt ); extern int reduce ( struct orbit *elemnt, double q[], double e[] ); extern int doplanet (void); extern int rstar ( struct star *el ); extern int dostar (void); extern double sidrlt ( double j, double tlong ); extern int dosun ( void ); extern double tdb ( double JED ); extern int trnsit ( double J, double lha, double dec ); extern int velearth ( double J ); extern double zatan2 ( double x, double y ); extern double acos(double); extern double asin(double); extern double atan(double); extern double cos(double); extern double sin(double); extern double tan(double); extern double sqrt(double); extern double fabs(double); extern double log(double); extern double floor(double); extern double sinh(double); extern double cosh(double); extern double tanh(double); extern char *whatconstel (double *, double); astronomical-almanac-5.6/read.me0000600000175000017500000005555110210061104015057 0ustar jrvjrv AA.ARC v5.5 This program computes the orbital positions of planetary bodies and performs rigorous coordinate reductions to apparent geocentric and topocentric place (local altitude and azimuth). It also reduces star catalogue positions given in either the FK4 or FK5 system. Most of the algorithms employed are from The Astronomical Almanac (AA) published by the U.S. Government Printing Office. Source code listings in C language are supplied in the file aa.arc. The file aaexe.arc contains an IBM PC executable version. Reduction of Celestial Coordinates aa.exe follows the rigorous algorithms for reduction of celestial coordinates exactly as laid out in current editions of the Astronomical Almanac. The reduction to apparent geocentric place has been checked by a special version of the program (aa200) that takes planetary positions directly from the Jet Propulsion Laboratory DE200 numerical integration of the solar system. The results agree exactly with the Astronomical Almanac tables from 1987 onward (earlier Almanacs used slightly different reduction methods). Certain computations, such as the correction for nutation, are not given explicitly in the AA but are referenced there. In these cases the program performs the full computations that are used to construct the Almanac tables (see the references at the end of this document). Running the Program Command input to aa.exe is by single line responses to programmed prompts. The program requests date, time, and which of a menu of things to do. Menu item 0 is the Sun, 3 is the Moon. The other values 1-9 are planets; 99 opens an orbit catalogue file; 88 opens a star catalogue. Each prompt indicates the last response you entered; this will be kept if you enter just a carriage return. Input can also be redirected to come from an ASCII file. For example, invoking the program by "aa answer.txt" reads commands from the file command.txt and writes answers to answer.txt. Menu item -1 causes the program to exit gracefully, closing the output file. Entering line 0 for a star catalogue causes a jump back to the top of the program. Initialization The following items will be read in automatically from a disc file named aa.ini, if one is provided. The file contains one ASCII string number per line so is easily edited. A sample initialization file is supplied. Terrestrial longitude of observer, degrees East of Greenwich Geodetic latitude of observer (program calculates geocentric latitude) Height above sea level, meters Atmospheric temperature, degrees Centigrade Atmospheric pressure, millibars Input time type: 1 = TDT, 2 = UT, 0 = TDT set equal to UT Value to use for deltaT, seconds; if 0 then the program will compute it. Orbit Computations Several methods of calculating the positions of the planets have been provided for in the program source code. These range in accuracy from a built-in computation using perturbation formulae to a solution from precise orbital elements that you supply from an almanac. The program uses as a default a set of trigonometric expansions for the position of the Earth and planets. These have been adjusted to match the Jet Propulsion Laboratory's DE404 Long Ephemeris (1995) with a precision ranging from about 0.1" for the Earth to 1" for Pluto. The adjustment was carried out on the interval from 3000 B.C. to 3000 A.D. for the outer planets. The adjustment for the inner planets is strictly valid only from 1350 B.C. to 3000 A.D., but may be used to 3000 B.C. with some loss of precision. See "readme.404" for additional information. The true accuracy of positions calculated for prehistoric or future dates is of course unknown. The Moon's position is calculated by a modified version of the lunar theory of Chapront-Touze' and Chapront. This has a precision of 0.5 arc second relative to DE404 for all dates between 1369 B.C. and 3000 A.D. The real position of the Moon in ancient times is not actually known this accurately, due to uncertainty in the tidal acceleration of the Moon's orbit. In the absence of an interpolated polynomial ephemeris such as the DE200, the highest accuracy for current planetary positions is achieved by using the heliocentric orbital elements that are published in the Astronomical Almanac. If precise orbital elements are provided for the desired epoch then the apparent place should be found to agree very closely with Almanac tabulations. Entering 99 for the planet number generates a prompt for the name of a file containing human-readable ASCII strings specifying the elements of orbits. The items in the specification are (see also the example file orbit.cat): First line of entry: epoch of orbital elements (Julian date) inclination longitude of the ascending node argument of the perihelion mean distance (semimajor axis) in au daily motion Second line of entry: eccentricity mean anomaly epoch of equinox and ecliptic, Julian date visual magnitude B(1,0) at 1AU from earth and sun equatorial semidiameter at 1au, arc seconds name of the object, up to 15 characters Angles in the above are in degrees except as noted. Several sample orbits are supplied in the file orbit.cat. If you read in an orbit named "Earth" the program will install the Earth orbit, then loop back and ask for an orbit number again. The entry for daily motion is optional. It will be calculated by the program if it is set equal to 0.0 in your catalogue. Almanac values of daily motion recognize the nonzero mass of the orbiting planet; the program's calculation will assume the mass is zero. Mean distance, for an elliptical orbit, is the length of the semi-major axis of the ellipse. If the eccentricity is given to be 1.0, the orbit is parabolic and the "mean distance" item is taken to be the perihelion distance. Similarly a hyperbolic orbit has eccentricity > 1.0 and "mean distance" is again interpreted to mean perihelion distance. In both these cases, the "epoch" is the perihelion date, and the mean anomaly is set to 0.0 in your catalogue. Elliptical cometary orbits are usually catalogued in terms of perihelion distance also, but you must convert this to mean distance to be understood by the program. Use the formula mean distance = perihelion distance / (1 - eccentricity) to calculate the value to be entered in your catalogue for an elliptical orbit. The epoch of the orbital elements refers particularly to the date to which the given mean anomaly applies. Published data for comets often give the time of perihelion passage as a calendar date and fraction of a day in Ephemeris Time. To translate this into a Julian date for your catalogue entry, run aa.exe, type in the published date and decimal fraction of a day, and note the displayed Julian date. This is the correct Julian Ephemeris Date of the epoch for your catalogue entry. Example (Sky & Telescope, March 1991, page 297): Comet Levy 1990c had a perihelion date given as 1990 Oct 24.68664 ET. As you are prompted separately for the year, month, and day, enter 1990, 10, 24.68664 into the program. This date and fraction translates to JED 2448189.18664. For comparison purposes, note that published ephemerides for comets usually give astrometric positions, not apparent positions. Ephemeris Time and Other Time Scales Exercise care about time scales when comparing results against an almanac. The orbit program assumes input date is Ephemeris Time (ET or TDT). Topocentric altitude and azimuth are calculated from Universal Time (UT). The program converts between the two as required, but you must indicate whether your input entry is TDT or UT. This is done by the entry for input time type in aa.ini. If you are comparing positions against almanac values, you probably want TDT. If you are looking up at the sky, you probably want UT. Ephemeris transit times can be obtained by declaring TDT = UT. The adjustment for deltaT = ET minus UT is accurate for the years 1620 through 2011, as the complete tabulation from the Astronomical Almanac is included in the program. Outside this range of years, approximate formulas are used to estimate deltaT. These formulas are based on analyses of eclipse records going back to ancient times (Stephenson and Houlden, 1986; Borkowski, 1988) but they do not predict future values very accurately. For precise calculations, you should update the table in deltat.c from the current year's Almanac. Note the civil time of day is UTC, which is adjusted by integral leap seconds to be within 0.9 second of UT. Updated deltaT values and predictions can be obtained from this network archive: http://maia.usno.navy.mil . See the file deltat.c for additional information. In addition, the IAU has adopted several other definitions of time, but this program does not distinguish among them. The International Earth Rotation Service is in charge of UT. Precise data on Earth rotation and orientation are published in the IERS bulletins, available at the IERS computer site www.iers.org as well as at the usno site. Rise and Set Times Each calculation of the time of local rising, meridian transit, and setting includes a first order correction for the motion in right ascension and declination of the object between the entered input time and the time of the event. Even so, the calculation has to be iterated, or repeated with successively closer estimates of the event time. In view of the first order correction the iteration has a second-order convergence characteristic and arrives at a precise result in just two or three steps. On the other hand, the technique used is unstable for nearly-circumpolar objects, such as the Moon observed at high latitudes. Thus a failure to report rise and set times does not necessarily mean that there was no rise or set event. The program reports the transit that is nearest to the input time. Rise and set times ordinarily precede and follow the transit. Check the date displayed next to the rise, set, or transit time to be sure the results are for the desired date and not for the previous or next calendar day. For the Sun and Moon, rise and set times are for the upper limb of the disc; but the indicated topocentric altitude always refers to the center of the disc. The computed event times include the effects of diurnal aberration and parallax. Age of the Moon, in days from the nearest Quarter, also has a correction for orbital motion, but does not get the benefit of iterative improvement and may be off by 0.1 day (the stated Quarter is always correct, however). The estimated time can be made much more precise by entering the input date and time of day to be near the time of the event. In other words, the rigorous calculation requires iterating on the time; in this case the program does not do so automatically, hence if you want maximum accuracy you must do the iteration by hand. Ocean Tides The time of high tide is easy to estimate with an accuracy of a few minutes. The tide occurs slightly ahead of the local meridian transit of the Moon. The time difference between tide and transit does not vary much at a fixed location. You can calibrate this difference for your location by checking the local newspaper for tide times and subtracting off the time of the meridian transit. Then the tides on any other date bear the same time offsets to the transit on that date. Predicting the height of the tide is much more difficult. The calculations are about as complicated as planetary theory. Stars Positions and proper motions of the 57 navigational stars were taken from the Fifth Fundamental Catalogue (FK5). They are in the file star.cat. For all of these, the program's output of astrometric position agreed with the 1986 AA to the precision of the AA tabulation (an arc second). The same is true for 1950 FK4 positions taken from the SAO catalogue. The program agrees to 0.01" with worked examples presented in the AA. Spot checks against Apparent Places of Fundamental Stars confirm the mean place agreement to <0.1". The APFS uses an older nutation series, so direct comparison of apparent place is difficult. The program incorporates the complete IAU Theory of Nutation (1980). Items for the Messier catalogue, messier.cat, are from either the AA or Sky Catalogue 2000. To compute a star's apparent position, its motion since the catalogue epoch is taken into account as well as the changes due to precession of the equatorial coordinate system. Star catalogue files have the following data structure. Each star entry occupies one line of ASCII characters. Numbers can be in any usual decimal computer format and are separated from each other by one or more spaces. From the beginning of the line, the parameters are Epoch of catalogue coordinates and equinox Right ascension, hours Right ascension, minutes Right ascension, seconds Declination, degrees Declination, minutes Declination, seconds Proper motion in R.A., s/century Proper motion in Dec., "/century Radial velocity, km/s Distance, parsecs Visual magnitude Object name For example, the line 2000 02 31 48.704 89 15 50.72 19.877 -1.52 -17.0 0.0070 2.02 alUMi(Polaris) has the following interpretation: J2000.0 ;Epoch of coordinates, equator, and equinox 2h 31m 48.704s ;Right Ascension 89deg 15' 50.72" ;Declination 19.877 ;proper motion in R.A., s/century -1.52 ;proper motion in Dec., "/century -17.0 ;radial velocity, km/s 0.007 ;parallax, " 2.02 ;magnitude alUMi(Polaris) ;abbreviated name for alpha Ursae Minoris (Polaris) Standard abbreviations for 88 constellation names are expanded into spelled-out form (see constel.c). The program accepts two types of catalogue coordinates. If the epoch is given as 1950, the entire entry is interpreted as an FK4 item. The program then automatically converts the data to the FK5 system. All other epochs are interpreted as being in the FK5 system. Note that catalogue (and AA) star coordinates are referred to the center of the solar system, whereas the program displays the correct geocentric direction of the object. The maximum difference is 0.8" in the case of alpha Centauri. Corrections Not Implemented Several adjustments are not included. In general, the Sun is assumed incorrectly to be at the center of the solar system. Since the orbit parameters are heliocentric, the main discrepancy is a tiny change in the annual aberration on the order of 0.01". The difference between TDT and TDB (Terrestrial versus Solar System barycentric time) is ignored. The topocentric correction for polar motion of the Earth is also ignored. If you need these corrections, then you should probably be using the companion program AA200, which reads planetary positions directly from the JPL ephemeris tapes. Precession Since adoption of the 1976 IAU precession constant, improved techniques have revealed that a correction of about 0.3" per century is required. This program uses the value recommended by Williams (1994), in part because it is more compatible with ephemerides computed from DE403 or DE404. DE403 values are also used for the obliquity of the equator and the sidereal time. Software Notes A C macro __STDC__, if defined nonzero, will get function prototypes from the file protos.h. Some compilers demand the protoypes but do not define __STDC__. Some other compilers do not know what a prototype is. _MSC_VER is used to recognize Microsoft C and insert "far" into some declarations; perhaps other MSDOS compilers would benefit from this too. On a few systems "char" is unsigned by default; that may have a bad effect in the file gplan.c. Besides aa.c, the main programs conjunct.c and moonrise.c are provided as examples of other ways to use the collection of ephemeris subroutines. Setting the global variable "prtflg" to zero turns off the printouts; thus you can run a calculation and print out whatever you want after it is done. - Stephen L. Moshier, November, 1987 moshier@na-net.ornl.gov Version 5.4e: December, 1998 Disc Files aa.ini Initialization file - edit this to reflect your location aa.exe Executable program for IBM PC MSDOS messier.cat Star catalogue of the Messier objects orbit.cat Orbit catalogue with example comets, asteroids, etc. star.cat Star catalogue of FK5 navigational stars msvc5.zip Archive containing Microsoft Visual C v.5 makefiles msvc6.zip Archive containing Microsoft Visual C v.6 makefiles aa_msc6.mak Old Microsoft C MSDOS make file aa.rsp Auxiliary to aa_msc6.mak makefile Unix make file unix.mak aa.que Test questions (say "aa test.ans"). aa.ans Answers to test questions (not necessarily true, but what the program says) aa.c Main program, keyboard commands altaz.c Apparent geocentric to local topocentric place angles.c Angles and sides of triangle in three dimensions annuab.c Annual aberration bc4.zip Archive containing Borland C version 4 makefiles bc5.zip Archive containing Borland C version 5 makefiles aa.prj Borland Turbo C project file (Thanks to Dominic Scolaro.) bcb5.zip Borland Codebuilder files (Thanks to Luiz Borges.) constel.c Expand constellation name abbreviations deflec.c Deflection of light due to Sun's gravity deltat.c Ephemeris Time minus Universal Time diurab.c Diurnal aberration diurpx.c Diurnal parallax dms.c Time and date conversions and display epsiln.c Obliquity of the ecliptic fk4fk5.c FK4 to FK5 star catalogue conversion kepler.c Solve hyperbolic, parabolic, or elliptical Keplerian orbits kfiles.c System dependent disc file I/O to read catalogues lightt.c Correction for light time lonlat.c Convert equatorial coordinates to ecliptic polar coordinates nutate.c IAU nutation series precess.c Precession of the equinox and ecliptic refrac.c Correction for atmospheric refraction rplanet.c Main reduction subroutine for planets rstar.c Main reduction subroutine for stars sidrlt.c Sidereal time sun.c Main reduction subroutine for the position of the Sun trnsit.c Transit of the local meridian vearth.c Estimated velocity vector of the Earth zatan2.c Quadrant correct arctangent with result from 0 to 2pi kep.h Include file for orbit and other data structures planet.h Include file for planetary perturbation routines moon.c Computation of the Moon's geometric position domoon.c Reduction of the Moon's position to apparent place gplan.c Computation of planetary positions using mer404.c,...,plu404.c ear404.c Ecliptic polar coordinates of the Earth jup404.c Ecliptic polar coordinates of Jupiter mar404.c Ecliptic polar coordinates of Mars mer404.c Ecliptic polar coordinates of Mercury nep404.c Ecliptic polar coordinates of Neptune plu404.c Ecliptic polar coordinates of Pluto sat404.c Ecliptic polar coordinates of Saturn ura404.c Ecliptic polar coordinates of Uranus ven404.c Ecliptic polar coordinates of Venus vms.zip Archive containing VAX VMS makefiles descrip.mms VAX make file (MMS) aa.opt Auxiliary to descrip.mms conjunct.c This is a separate main program that can be used to search for events such as new moon dates, solstices, etc. moonrise.c Another separate main program, prints a table of lunar rise, transit, and set times. References Nautical Almanac Office, U. S. Naval Observatory, _Astronomical Almanac for the Year 1986_, U. S. Government Printing Office, 1985. Nautical Almanac Office, U. S. Naval Observatory, _Almanac for Computers, 1986_, U. S. Government Printing Office Meeus, Jean, _Astronomical Formulae for Calculators_, 3rd ed., Willmann-Bell, Inc., 1985. Moulton, F. R., _An Introduction to Celestial Mechanics_, 2nd ed., Macmillan, 1914 (Dover reprint, 1970) Taff, L. G., _Celestial Mechanics, A Computational Guide for the Practitioner_, Wiley, 1985 Newcomb, S., _Tables of the Four Inner Planets, Astronomical Papers Prepared for the Use of the American Ephemeris and Nautical Almanac_, Vol. VI. Bureau of Equipment, Navy Department, Washington, 1898 Lieske, J. H., T. Lederle, W. Fricke, and B. Morando, "Expressions for the Precession Quantities Based upon the IAU (1976) System of Astronomical Constants," Astronomy and Astrophysics 58, 1-16 (1977). Laskar, J., "Secular terms of classical planetary theories using the results of general theory," Astronomy and Astrophysics 157, 59070 (1986). Bretagnon, P. and G. Francou, "Planetary theories in rectangular and spherical variables. VSOP87 solutions," Astronomy and Astrophysics 202, 309-315 (1988). Bretagnon, P. and Simon, J.-L., _Planetary Programs and Tables from -4000 to +2800_, Willmann-Bell, 1986 Seidelmann, P. K., et al., "Summary of 1980 IAU Theory of Nutation (Final Report of the IAU Working Group on Nutation)" in Transactions of the IAU Vol. XVIII A, Reports on Astronomy, P. A. Wayman, ed.; D. Reidel Pub. Co., 1982. "Nutation and the Earth's Rotation", I.A.U. Symposium No. 78, May, 1977, page 256. I.A.U., 1980. Woolard, E.W., "A redevelopment of the theory of nutation", The Astronomical Journal, 58, 1-3 (1953). Morrison, L. V. and F. R. Stephenson, "Sun and Planetary System" vol 96,73 eds. W. Fricke, G. Teleki, Reidel, Dordrecht (1982) Stephenson, F. R., and M. A. Houlden, _Atlas of Historical Eclipse Maps_, Cambridge U. Press, 1986 Borkowski, K. M., "ELP2000-85 and the Dynamical Time - Universal Time relation," Astronomy and Astrophysics 205, L8-L10 (1988) M. Chapront-Touze' and J. Chapront, "ELP2000-85: a semi-analytical lunar ephemeris adequate for historical times," Astronomy and Astrophysics 190, 342-352 (1988). S. L. Moshier, "Comparison of a 7000-year lunar ephemeris with analytical theory," Astronomy and Astrophysics 262, 613-616 (1992) J. Chapront, "Representation of planetary ephemerides by frequency analysis. Application to the five outer planets," Astronomy and Astrophysics Suppl. Ser. 109, 181-192 (1994) J. L. Simon, P. Bretagnon, J. Chapront, M. Chapront-Touze', G. Francou, and J. Laskar, "Numerical Expressions for precession formulae and mean elements for the Moon and the planets," Astronomy and Astrophysics 282, 663-683 (1994) James G. Williams, "Contributions to the Earth's obliquity rate, precession, and nutation," Astronomical Journal 108, 711-724 (1994) astronomical-almanac-5.6/readme.4040000666000175000017500000001000410275423472015330 0ustar jrvjrv plan404 ephemerides The tables of coefficients were derived by a least squares fit of periodic terms to JPL's DE404 ephemerides. The periodic frequencies used were determined by spectral analysis and comparison with VSOP87 and other analytical planetary theories. The least squares fit to DE404 covers the interval from -3000 to +3000 for the outer planets, and -1350 to +3000 for the inner planets. The files mer404.c, ven404.c, ..., plu404.c contain numerical tables for computing the J2000 heliocentric ecliptic longitude, latitude, and distance of the indicated planet. Each file includes a table of statistics from a comparison with DE404. Maximum deviations from DE404 are shown, in arc seconds, over each interval of 500 Julian years. The figure tabulated for deviation in radial distance is scaled relative to the mean distance; to convert to astronomical units, multiply by 4.848e-6 times the mean distance in au. The lunar ephemeris files mlr404.c and mlat404.c generate positions relative to the mean equinox and ecliptic of date. They assume the DE403 precession constants used in precess.c and the obliquity in epsiln.c. These differ somewhat from DE200 or IAU constants but are thought to be more accurate. Steve Moshier moshier@world.std.com December, 1995 December, 1996 Here are some details on the data structure of the tables. Numerical tables for computing the heliocentric ecliptic longitude, latitude, and radius of the planets are given in the files mer404.c for the planet Mercury, ven404.c for Venus, etc. Each of these files contains arrays tabl[] of longitude coefficients, tabb[] of latitude coefficients, tabr[] of radius coefficients, and args[] of trigonometric argument harmonics. All the data are organized for efficient access by a computer. In the source files the data are broken up into lines of print, and the order of the lines of arguments in args[] corresponds to the order of the lines of longitude, latitude, and radius coefficients in the other arrays. In the args table, the first column is the number of items combined to form the trigonometric argument. The next pairs of columns describe the items. The first column of each pair is the harmonic, the second column is the planet number. The last column is the highest polynomial degree of time for this argument. Thus in mar404.c, the second line of the argument table args[] reads 3, 4, 3, -8, 4, 3, 5, 2, The trigonometric argument is the sum of 3 items corresponding to planets 3, 4 and 5 (Earth, Mars, and Jupiter). The harmonics are 4, -8, and 3 respectively. Hence the trigonometric argument is A = 4 Earth - 8 Mars + 3 Jupiter. For each planet, the fundamental-frequency angular argument is an initial phase angle plus a frequency multiplied by the time variable. Thus, from the arrays freqs[] and phases[] in the file gplan.c, Earth = 6890507749.3988 T + 355.43299958 * 3600.0 where T is in units of 10,000 Julian years from J2000 and the result is measured in arc seconds. Corresponding to this argument are the amplitude coefficients from the same line of the longitude, latitude, or radius table. The cosine and sine amplitude coefficients of the highest degree term appear first. For the longitude, the complete term corresponding to the second line of coefficients is, from tabl[], (317.74183 cos(A) + 730.69258 sin(A)) T^2 + (-15.26502 cos(A) + 277.56960, sin(A)) T + (-62.96711 cos(A) + 20.96285 sin(A)) arc seconds, where, as before, A = 4 Earth - 8 Mars + 3 Jupiter. The first line of args[] lists 0 periodic arguments. This is a special case denoting an expression that is just a polynomial in time. In mar404.c the first line of args[] reads 0, 4, indicating a 4th degree polynomial in T. For the longitude, the coefficients of the polynomial are given in the corresponding line (the first line) of tabl[]. Thus, the complete term is 43471.66140 T^4 + 21291.11063 T^3 + 2033.37848 + T^2 + 6890507597.78366 T + 1279543.73631 in arc seconds, where T is measured in units of 10,000 Julian years from J2000. astronomical-almanac-5.6/refrac.c0000644000175000017500000000302106427373544015255 0ustar jrvjrv/* Atmospheric refraction * Returns correction in degrees to be added to true altitude * to obtain apparent altitude. * * -- S. L. Moshier */ extern double atpress; /* millibars */ extern double attemp; /* degrees C */ extern double DTR; /* pi/180 */ #if __STDC__ double tan (double); #else double tan(); #endif double refrac(alt) double alt; /* altitude in degrees */ { double y, y0, D0, N, D, P, Q; int i; if( (alt < -2.0) || (alt >= 90.0) ) return(0.0); /* For high altitude angle, AA page B61 * Accuracy "usually about 0.1' ". */ if( alt > 15.0 ) { D = 0.00452*atpress/((273.0+attemp)*tan( DTR*alt )); return(D); } /* Formula for low altitude is from the Almanac for Computers. * It gives the correction for observed altitude, so has * to be inverted numerically to get the observed from the true. * Accuracy about 0.2' for -20C < T < +40C and 970mb < P < 1050mb. */ /* Start iteration assuming correction = 0 */ y = alt; D = 0.0; /* Invert Almanac for Computers formula numerically */ P = (atpress - 80.0)/930.0; Q = 4.8e-3 * (attemp - 10.0); y0 = y; D0 = D; for( i=0; i<4; i++ ) { N = y + (7.31/(y+4.4)); N = 1.0/tan(DTR*N); D = N*P/(60.0 + Q * (N + 39.0)); N = y - y0; y0 = D - D0 - N; /* denominator of derivative */ if( (N != 0.0) && (y0 != 0.0) ) /* Newton iteration with numerically estimated derivative */ N = y - N*(alt + D - y)/y0; else /* Can't do it on first pass */ N = alt + D; y0 = y; D0 = D; y = N; } return( D ); } astronomical-almanac-5.6/rplanet.c0000644000175000017500000000637706616724652015501 0ustar jrvjrv /* The following program reduces the heliocentric equatorial * rectangular coordinates of the earth and object that * were computed by kepler() and produces apparent geocentric * right ascension and declination. */ #include "kep.h" int reduce( elemnt, q, e ) struct orbit *elemnt; /* orbital elements of q */ double q[], e[]; /* heliocentric coordinates */ { double p[3], temp[3], polar[3]; double a, b, s; int i; double sqrt(), asin(), log(); /* Save the geometric coordinates at TDT */ for( i=0; i<3; i++ ) temp[i] = q[i]; /* Display ecliptic longitude and latitude, precessed to equinox of date. */ if( prtflg ) lonlat( q, TDT, polar, 1 ); /* Adjust for light time (planetary aberration) */ lightt( elemnt, q, e ); /* Find Euclidean vectors between earth, object, and the sun */ for( i=0; i<3; i++ ) p[i] = q[i] - e[i]; angles( p, q, e ); if( prtflg ) { a = 0.0; for( i=0; i<3; i++ ) { b = temp[i] - e[i]; a += b * b; } a = sqrt(a); printf( "true geocentric distance %.7f au ", a ); /* was EO */ printf( "equatorial diameter %.2f\"\n", 2.0*elemnt->sdiam/EO ); /* Calculate visual magnitude. * "Visual" refers to the spectrum of visible light. * Phase = 0.5(1+pq) = geometric fraction of disc illuminated. * where pq = cos( sun-object-earth angle ) * The magnitude is * V(1,0) + 2.5 log10( SE^2 SO^2 / Phase) * where V(1,0) = elemnt->mag is the magnitude at 1au from * both earth and sun and 100% illumination. */ a = 0.5 * (1.0 + pq); /* Fudge the phase for light leakage in magnitude estimation. * Note this phase term estimate does not reflect reality well. * Calculated magnitudes of Mercury and Venus are inaccurate. */ b = 0.5 * (1.01 + 0.99*pq); s = elemnt->mag + 2.1715 * log( EO*SO ) - 1.085*log(b); printf( "approx. visual magnitude %.1f, phase %.3f\n", s, a ); } /* Find unit vector from earth in direction of object */ for( i=0; i<3; i++ ) { p[i] /= EO; temp[i] = p[i]; } if( prtflg ) { /* Report astrometric position */ showrd( "Astrometric J2000.0:", p, polar ); /* Also in 1950 coordinates */ precess( temp, B1950, -1 ); showrd( "Astrometric B1950.0:", temp, polar ); } /* Correct position for light deflection */ relativity( p, q, e ); /* Correct for annual aberration */ annuab( p ); /* Precession of the equinox and ecliptic * from J2000.0 to ephemeris date */ precess( p, TDT, -1 ); /* Ajust for nutation * at current ecliptic. */ epsiln( TDT ); nutate( TDT, p ); /* Display the final apparent R.A. and Dec. * for equinox of date. */ if( prtflg ) printf ("%s.", whatconstel (p, TDT)); showrd( " Apparent:", p, polar ); /* Geocentric ecliptic longitude and latitude. */ if( prtflg ) { printf ("Apparent geocentric "); for( i=0; i<3; i++ ) p[i] *= EO; lonlat( p, TDT, temp, 0 ); } /* Go do topocentric reductions. */ polar[2] = EO; altaz( polar, UT ); return(0); } extern struct orbit *elobject; extern double robject[]; int doplanet() { /* calculate heliocentric position of the object */ kepler( TDT, elobject, robject, obpolar ); /* apply correction factors and print apparent place */ reduce( elobject, robject, rearth ); return 0; } astronomical-almanac-5.6/rstar.c0000644000175000017500000000546106616726612015156 0ustar jrvjrv/* This program reduces catalogue coordinates of a star * to apparent place. * * - S. L. Moshier, November, 1987 */ #include "kep.h" int rstar( el ) struct star *el; { double p[3], q[3], e[3], m[3], temp[3], polar[3]; double T, vpi, epoch; double cosdec, sindec, cosra, sinra; int i; double log(); /* Convert from RA and Dec to equatorial rectangular direction */ loop: cosdec = cos( el->dec ); sindec = sin( el->dec ); cosra = cos( el->ra ); sinra = sin( el->ra ); q[0] = cosra * cosdec; q[1] = sinra * cosdec; q[2] = sindec; /* space motion */ vpi = 21.094952663 * el->v * el->px; m[0] = -el->mura * cosdec * sinra - el->mudec * sindec * cosra + vpi * q[0]; m[1] = el->mura * cosdec * cosra - el->mudec * sindec * sinra + vpi * q[1]; m[2] = el->mudec * cosdec + vpi * q[2]; epoch = el->epoch; /* Convert FK4 to FK5 catalogue */ if( epoch == B1950 ) { fk4fk5( q, m, el ); goto loop; } for( i=0; i<3; i++ ) e[i] = rearth[i]; /* precess the earth to the star epoch */ precess( e, epoch, -1 ); /* Correct for proper motion and parallax */ T = (TDT - epoch)/36525.0; for( i=0; i<3; i++ ) { p[i] = q[i] + T * m[i] - el->px * e[i]; } /* precess the star to J2000 */ precess( p, epoch, 1 ); /* reset the earth to J2000 */ for( i=0; i<3; i++ ) e[i] = rearth[i]; /* Find Euclidean vectors between earth, object, and the sun * angles( p, q, e ); */ angles( p, p, e ); /* Find unit vector from earth in direction of object */ for( i=0; i<3; i++ ) { p[i] /= EO; temp[i] = p[i]; } if( prtflg ) { printf( "approx. visual magnitude %.1f\n", el->mag ); /* Report astrometric position */ showrd( "Astrometric J2000.0:", p, polar ); /* Also in 1950 coordinates */ precess( temp, B1950, -1 ); showrd( "Astrometric B1950.0:", temp, polar ); /* For equinox of date: */ for( i=0; i<3; i++ ) temp[i] = p[i]; precess( temp, TDT, -1 ); showrd( "Astrometric of date:", temp, polar ); } /* Correct position for light deflection * relativity( p, q, e ); */ relativity( p, p, e ); /* Correct for annual aberration */ annuab( p ); /* Precession of the equinox and ecliptic * from J2000.0 to ephemeris date */ precess( p, TDT, -1 ); /* Ajust for nutation * at current ecliptic. */ epsiln( TDT ); nutate( TDT, p ); /* Display the final apparent R.A. and Dec. * for equinox of date. */ showrd( " Apparent:", p, polar ); /* Go do topocentric reductions. */ dradt = 0.0; ddecdt = 0.0; polar[2] = 1.0e38; /* make it ignore diurnal parallax */ altaz( polar, UT ); return(0); } /* Compute stellar ephemeris for ELOBJECT at time TDT. */ extern struct orbit *elobject; int dostar () { rstar( (struct star *) elobject ); return 0; } astronomical-almanac-5.6/sat404.c0000644000175000017500000015357206253703444015044 0ustar jrvjrv /* First date in file = 625296.50 Number of records = 16731.0 Days per record = 131.0 Julian Years Lon Lat Rad -3000.0 to -2499.7: 0.78 0.26 0.55 -2499.7 to -1999.7: 0.66 0.19 0.57 -1999.7 to -1499.7: 0.62 0.19 0.53 -1499.7 to -999.8: 0.79 0.17 0.61 -999.8 to -499.8: 0.78 0.15 0.42 -499.8 to 0.2: 0.75 0.19 0.52 0.2 to 500.2: 0.62 0.18 0.41 500.2 to 1000.1: 0.56 0.13 0.54 1000.1 to 1500.1: 0.53 0.15 0.41 1500.1 to 2000.1: 0.51 0.15 0.49 2000.1 to 2500.0: 0.52 0.13 0.41 2500.0 to 3000.0: 0.63 0.22 0.53 3000.0 to 3000.4: 0.047 0.073 0.086 */ #include "plantbl.h" static double FAR tabl[] = { 1788381.26240, 2460423.68044, 1370113.15868, 415406.99187, 72040.39885, 12669.58806, 439960754.85333, 180256.80433, 18.71177, -40.37092, 66531.01889, -195702.70142, 57188.02694, -179110.60982, -19803.06520, -58084.15705, -9055.13344, -31146.10779, 11245.43286, -3247.59575, 459.48670, 2912.82402, -4.06749, -13.53763, -30.55598, -4.51172, 1.48832, 0.37139, 597.35433, 1193.44545, -297.50957, 976.38608, -263.26842, 34.84354, -6.77785, -29.92106, -0.16325, -0.18346, -0.15364, -0.08227, 0.20180, 0.02244, 0.04672, -0.29867, -0.04143, -0.00760, -0.17046, -0.00778, 0.04200, 0.23937, -0.00098, -0.05236, -0.02749, -0.01813, 0.00637, 0.01256, -0.04506, 0.04448, -0.00105, 0.06224, 0.01157, 0.17057, -0.03214, 0.18178, -0.22059, -0.01472, -0.24213, 0.04309, 0.03436, 0.44873, 0.01350, -0.01931, -0.80618, -0.56864, 0.29223, -0.03101, 0.04171, 0.02264, -0.01264, -0.01645, 0.01774, 0.06374, -0.01925, -0.03552, 0.10473, -0.04119, 0.08045, 0.04635, -3.01112, -9.26158, 8.13745, 1.88838, -0.15184, 0.16898, -0.22091, 0.29070, -0.03259, 0.06938, -0.08499, -0.21688, 0.01848, -0.05594, 0.50100, -0.00027, 0.13300, 0.12055, 0.03039, 0.03854, -1.55287, 2.55618, -0.45497, -0.29895, -0.93268, 0.83518, -0.32785, 7.03878, -1.66649, 2.75564, -0.29459, 0.01050, 0.08293, -0.03161, -0.12750, -0.04359, 0.04217, 0.07480, -114.43467, 49.47867, -66.52340, -26.27841, 15.48190, -13.06589, 3.28365, 5.02286, -0.17155, -0.07404, 0.00924, -0.07407, -0.02922, 0.06184, 108.04882, 86.09791, -155.12793, 208.10044, -311.72810, -268.92703, 74.57561, -420.03057, -0.07893, 0.09246, -0.66033, -0.39026, -0.13816, -0.08490, -36.79241, -78.88254, 71.88167, -68.05297, 51.71616, 65.77970, -43.59328, 23.51076, -0.02029, -0.32943, -8.82754, 1.48646, -3.12794, 2.12866, -0.06926, 0.44979, 0.00621, -0.51720, -3.82964, -1.48596, -0.11277, -3.21677, 0.81705, -0.19487, -0.06195, 0.10005, -0.02208, 0.00108, 0.00455, -0.03825, 0.01217, -0.00599, -0.17479, -0.47290, 0.85469, 1.12548, -0.80648, -0.44134, -0.01559, -0.07061, 0.01268, -0.01773, 0.01308, -0.03461, -0.71114, 1.97680, -0.78306, -0.23052, 0.94475, -0.10743, 0.18252, -8.03174, 0.00734, 0.04779, 0.12334, -0.03513, 0.01341, 0.02461, 0.02047, -0.03454, 0.02169, -0.01921, -1.12789, 0.09304, 0.14585, 0.36365, 0.03702, 0.10661, -0.00464, -1.72706, -0.00769, -0.04635, -0.01157, 0.00099, 10.92646, 1.96174, 2.91142, 4.74585, -0.29832, 0.75543, 0.05411, 1.05850, 0.38846, -0.16265, 1.52209, 0.12185, 0.18650, 0.35535, -278.33587, -82.58648, -160.00093, -225.55776, 35.17458, -77.56672, 10.61975, 3.33907, 0.06090, 2.17429, -4.32981, -5.84246, 11.43116, 20.61395, -0.65772, 1.28796, 1224.46687, -3113.15508, 3798.33409, -137.28735, -256.89302, 2227.35649, -779.78215, -260.37372, 11.73617, -13.25050, -0.75248, -2.87527, -8.38102, 17.21321, -61784.69616, 39475.02257, -54086.68308, 54550.85490, -16403.69351, 29602.70098, 14672.06363, 16234.17489, 15702.37109, -22086.30300, -22889.89844, -1245.88352, 1.48864, 19.75000, 0.78646, 3.29343, -1058.13125, 4095.02368, -2793.78506, 1381.93282, -409.19381, -772.54270, 161.67509, -34.15910, -514.27437, 27.34222, -311.04046, 48.01030, -43.36486, 16.19535, -0.73816, -0.81422, 287.32231, -110.44135, 200.43610, 37.98170, 17.73719, 34.40023, -2.46337, 1.48125, 0.09042, -0.11788, 0.37284, 0.51725, 0.00597, 0.14590, -0.01536, 0.00980, 0.00721, 0.02023, 0.00027, 0.02451, -0.72448, -0.71371, 0.29322, 0.18359, 0.72719, -0.37154, 0.14854, -0.02530, 0.23052, 0.04258, 4.82082, 0.01885, 3.11279, -0.63338, 0.10559, -0.02146, -0.01672, 0.03412, 0.00605, 0.06415, -0.89085, 1.51929, -0.36571, 0.39317, 12.05250, -3.79392, 3.96557, -3.51272, -0.17953, 12.30669, -0.05083, -0.11442, 0.02013, -0.02837, -0.02087, -0.01599, 0.49190, 0.30360, 0.01316, 0.17649, 0.21193, -0.09149, -0.07173, -0.05707, 4.24196, -1.25155, 1.81336, 0.68887, -0.01675, 0.20772, -0.04117, -0.03531, -0.02690, -0.02766, 37.54264, 10.95327, 8.05610, 30.58210, -12.68257, 1.72831, 0.13466, -3.27007, 0.01864, -0.00595, 0.03676, 0.14857, -0.07223, 0.06179, 0.44878, -1.64901, -20.06001, 0.63384, -4.97849, 4.78627, 29.87370, 7.29899, 0.00047, -0.00155, 0.00314, 0.01425, -0.17842, -0.08461, -1.61020, -8.47710, 6.85048, -4.38196, 1.05809, 2.68088, -0.01027, -0.00833, 0.06834, -0.04205, 0.03330, -0.01271, 0.01301, -0.01358, 0.03537, 0.03612, 0.02962, 0.62471, -0.30400, -0.64857, 0.01773, 0.01890, 0.01426, -0.00226, -0.50957, -0.01955, -0.09702, 1.09983, 0.64387, -0.02755, 0.26604, 0.30684, 0.06354, 0.05114, -0.00058, -0.04672, -0.00828, 0.00712, -0.00440, 0.00029, -0.01601, 0.03566, 0.13398, -0.02666, -0.06752, -0.43044, 0.07172, -0.01999, -0.01761, -0.05357, 0.06104, 0.29742, -0.08785, 0.05241, -6.57162, -4.20103, 0.03199, -6.46187, 1.32846, -0.51137, 0.06358, 0.37309, -1.46946, 2.34981, -0.18712, 0.11618, 240.62965, -107.21962, 219.81977, 84.04246, -62.22931, 68.35902, -9.48460, -32.62906, 5.57483, -1.82396, 1.00095, -0.39774, 7.87054, 11.45449, -432.67155, 55064.72398, 12444.62359, 54215.28871, 8486.03749, 12297.48243, -333.27968, 1147.93192, 1403.73797, 990.40885, -3.84938, -722.43963, 16.83276, 96.48787, 7.04834, 38.22208, 0.63843, 2.61007, 230.73221, 171.64166, 1.96751, 287.80846, -85.21762, 31.33649, -2.25739, -11.28441, 0.04699, 0.06555, -0.08887, 1.70919, 0.09477, 0.26291, -0.15490, 0.16009, 1.93274, 1.01953, 0.36380, 1.29582, -0.13911, 0.14169, -0.00491, -0.00030, -0.08908, -0.10216, -0.03265, -0.03889, 0.40413, -1.12715, -0.94687, -0.04514, 0.02487, -0.01048, 0.39729, 2.82305, -0.61100, 1.11728, -0.13083, -0.04965, -0.00602, -0.02952, -6.13507, 13.73998, -15.70559, -1.28059, 2.64422, -9.33798, 3.26470, 1.56984, -0.00572, 0.09992, -8.80458, -8.23890, -11.51628, 9.47904, 11.31646, 4.29587, -2.41367, -0.05883, -0.80022, -1.02706, 0.21461, -0.06864, 0.01882, 0.01798, 0.27614, -0.01007, 0.04362, 0.07560, 0.05519, 0.23435, -0.09389, 0.01613, 0.01298, 0.04691, -0.02665, -0.03582, 0.60080, -4.28673, 1.87316, -1.05840, 0.13248, 0.40887, -0.67657, 0.67732, 0.05522, 0.07812, -0.17707, -0.07510, 0.24885, 10.63974, -7.40226, -2.33827, 2.75463, -32.51518, 0.05140, 0.01555, 180.43808, 263.28252, 384.50646, -76.53434, -93.50706, -220.50123, -81.91610, 103.92061, 30.90305, -2.89292, -0.06634, -0.37717, -0.01945, -0.05936, 29.27877, -59.73705, 35.86569, -18.36556, 3.88812, 4.82090, -0.70903, 0.06615, 0.01558, -0.01854, 0.16209, 0.12682, 0.02508, 0.02406, -0.03078, -0.01737, -0.00033, -0.00020, 0.01023, 0.05972, -0.03373, -0.07289, -2.08162, -0.14717, -0.64233, -0.75397, 0.11752, -0.09202, 4.42981, -4.19241, 5.02542, 5.03467, -4.22983, 2.80794, 3.03016, -2.74373, -1.11490, -2.72378, -0.63131, 0.74864, -0.00759, -0.00675, 0.03615, -0.01806, -2.71920, -1.50954, 0.54479, -1.92088, 0.66427, 0.32228, -2.55188, -0.65332, -2.73798, 2.10182, 1.54407, 3.01357, 38.76777, 23.54578, 27.29884, -14.93005, -7.50931, -5.66773, 0.30142, 1.52416, 0.00634, 0.09697, -0.00748, 0.01433, 0.02936, 0.53228, -0.03603, 0.06345, 0.30816, -1.07925, 0.46709, -0.21568, 0.01663, 0.10810, -0.42511, 0.35872, -0.19662, -6.74031, 1.05776, 1.86205, 1.08919, 0.10483, -0.03368, -0.21535, 0.07556, -0.27104, 0.05142, -0.03812, 1.20189, -1.36782, 1.35764, 1.39387, -1.19124, 0.77347, -0.54760, -0.26295, -0.07473, 0.23043, 2.82621, -0.23524, 0.47352, -0.81672, -0.08515, 0.04700, 0.55355, -0.40138, 0.22255, 0.12236, -0.09110, 0.31982, 0.39404, -0.17898, -0.00056, 0.00014, -0.02012, 0.03102, 0.43236, -0.10037, -0.00961, 0.07440, -0.07076, -1.97272, 0.25555, -0.21832, -0.00837, -0.08393, 0.01531, 0.00627, 0.33193, 0.70765, -0.43556, 0.28542, -0.23190, -0.04293, -0.08062, 0.13427, 0.23763, -0.17092, 0.09259, 0.05155, 0.08065, -0.11943, -0.02174, -0.68899, -0.01875, -0.01746, 0.13604, 0.29280, -0.17871, 0.11799, 0.02003, 0.04065, 0.01343, -0.06060, -0.01290, -0.26068, -0.09033, 0.02649, -0.00092, -0.03094, -0.00770, -0.10447, -0.04113, 0.01259, -0.00469, -0.04346, -0.00010, 0.06547, }; static double FAR tabb[] = { -567865.62548, -796277.29029, -410804.00791, -91793.12562, -6268.13975, 398.64391, -710.67442, 175.29456, -0.87260, 0.18444, -1314.88121, 20709.97394, -1850.41481, 20670.34255, -896.96283, 6597.16433, -179.80702, 613.45468, 17.37823, -13.62177, -0.36348, 12.34740, 0.47532, 0.48189, 0.27162, -0.20655, -0.23268, 0.05992, 46.94511, 15.78836, 21.57439, 23.11342, -0.25862, 5.21410, -0.22612, -0.05822, -0.00439, -0.01641, -0.01108, -0.00608, 0.00957, 0.00272, -0.00217, 0.00001, -0.00534, -0.00545, 0.00277, -0.00843, 0.00167, -0.00794, 0.00032, -0.00242, -0.00002, -0.00041, -0.00025, 0.00031, 0.00062, -0.00060, 0.00083, 0.00032, 0.00527, -0.00211, 0.00054, 0.00004, -0.02769, -0.01777, 0.00247, 0.00097, 0.00020, -0.00232, 0.00044, -0.00035, -0.00072, 0.01341, 0.00325, -0.01159, 0.00079, -0.00078, -0.00009, 0.00066, 0.00222, 0.00002, 0.00013, -0.00161, 0.01374, -0.05305, 0.00478, -0.00283, 0.16033, 0.13859, 0.33288, -0.16932, -0.00316, 0.00625, -0.00309, 0.01687, 0.00001, 0.00486, 0.00401, -0.01805, -0.00048, -0.00407, -0.01329, 0.01311, -0.00591, 0.00166, 0.00830, 0.00665, -0.80207, 0.22994, -0.34687, 0.08460, -0.11499, -0.01449, -0.01574, 0.78813, -0.03063, 0.28872, -0.00337, 0.01801, -0.01703, -0.00929, -0.00738, 0.03938, 0.05616, -0.00516, -3.09497, 30.13091, -3.14968, 17.62201, -0.73728, 2.46962, -0.11233, 0.03450, -0.07837, -0.01573, -0.01595, 0.00394, 0.00174, 0.01470, 6.83560, -2.37594, 4.95125, 3.24711, 2.44781, 5.17159, 1.99820, -2.38419, 0.00840, 0.03614, -0.00209, -0.30407, -0.02681, -0.06128, 1.50134, 11.82856, 4.39644, 6.98850, -4.17679, 5.73436, -9.66087, 1.98221, -0.29755, 0.08019, -0.24766, -8.54956, -1.74494, -3.36794, -0.32661, -0.00722, 0.14141, 0.01023, -1.21541, -2.58470, 0.38983, -1.70307, 0.31209, -0.10345, 0.02593, 0.02178, 0.00289, 0.00393, -0.00236, -0.00373, -0.00270, -0.00049, -0.06282, -0.00443, -0.02439, -0.02254, -0.02220, 0.03532, -0.00072, 0.00010, -0.00049, -0.00112, 0.00086, 0.00112, 0.10135, -0.10972, 0.08357, 0.00155, 0.04363, -0.00201, -0.01996, -0.01341, -0.00039, -0.00042, -0.00294, 0.00070, 0.00005, -0.00027, 0.00070, -0.00076, 0.00234, -0.00239, -0.08365, -0.08531, -0.03531, 0.15012, -0.01995, -0.01731, -0.00370, -0.00745, -0.00315, -0.00079, -0.00120, -0.00145, -0.99404, -1.31859, 0.03584, -0.83421, 0.10720, -0.05768, 0.06664, -0.09338, -0.01814, -0.00003, -0.05371, -0.06458, -0.00100, -0.01298, -7.08710, -23.13374, 4.18669, -19.94756, 4.85584, -3.37187, 0.58851, 0.31363, 0.01994, 0.27494, -1.37112, 2.61742, 0.52477, -0.46520, -0.13183, 0.26777, 836.90400, -484.65861, 815.99098, 236.54649, -32.38814, 288.95705, -68.17178, -18.87875, -1.79782, -3.68662, -1.27310, -0.65697, -3.67530, 2.10471, -13758.97795, 4807.62301, -14582.14552, 9019.73021, -3202.60105, 4570.16895, 2078.68911, 2892.62326, -2399.35382, 3253.16198, -8182.38152, -3588.77680, -0.16505, 1.08603, 0.53388, 0.87152, 61.53677, 538.43813, -407.32927, 322.27446, -148.71585, -179.37765, 54.07268, -34.12281, -14.76569, -17.95681, -10.82061, -6.39954, -2.10954, 0.67063, 0.22607, -0.43648, 20.90476, -45.48667, 30.39436, -14.20077, 5.17385, 5.12726, -0.66319, 0.55668, 0.02269, -0.00016, 0.07811, 0.00111, 0.01603, 0.01020, -0.00107, 0.00494, -0.00077, -0.00084, -0.00196, 0.00081, -0.03776, 0.01286, -0.00652, -0.01450, 0.05942, -0.08612, 0.01093, -0.01644, 0.02147, -0.00592, 0.36350, -0.00201, 0.14419, -0.10070, -0.00491, -0.01771, -0.00053, -0.00033, 0.00146, 0.00048, 0.00582, 0.04423, -0.00549, 0.00983, 0.27355, -0.38057, 0.24001, -0.05441, -0.07706, 0.14269, -0.00059, -0.00154, -0.00013, -0.00088, -0.00046, 0.00029, -0.00276, -0.00507, 0.00075, -0.00076, 0.01806, 0.00862, -0.00510, -0.01364, -0.00029, -0.12664, 0.03899, -0.03562, 0.00318, 0.00514, 0.00057, 0.00201, 0.00028, 0.00014, -0.47022, -0.74561, 0.40155, -0.16471, -0.18445, 0.34425, -0.07464, -0.13709, -0.01018, -0.00748, -0.01210, -0.04274, -0.00579, -0.00692, -11.09188, -1.67755, -6.62063, -13.84023, 12.75563, -6.73501, 8.31662, 5.40196, 0.00052, 0.00034, 0.00128, 0.00085, -0.02202, -0.00599, -0.33458, -1.65852, 1.47003, -1.02434, 0.87885, 1.15334, -0.00241, -0.00721, 0.03154, 0.00612, 0.00318, -0.02521, 0.00042, 0.00213, -0.01094, 0.05417, -0.03989, -0.00567, 0.00123, -0.00244, 0.00108, 0.00242, -0.00138, -0.00099, 0.04967, 0.01643, -0.00133, 0.02296, 0.12207, 0.05584, 0.00437, -0.04432, -0.00176, -0.00922, -0.00252, 0.00326, -0.00020, -0.00050, -0.00263, -0.00084, -0.01971, 0.00297, 0.03076, 0.01736, -0.01331, 0.01121, -0.00675, 0.00340, -0.00256, 0.00327, -0.00946, 0.03377, -0.00770, 0.00337, 0.61383, 0.71128, -0.02018, 0.62097, -0.07247, 0.04418, -0.02886, -0.03848, -0.44062, 0.03973, -0.00999, -0.04382, 57.94459, 117.45112, -71.22893, 126.39415, -62.33152, -31.90754, 12.17738, -16.46809, -1.13298, 0.08962, -0.20532, 0.16320, -1.55110, -1.44757, -3102.08749, -7452.61957, -5009.53858, -7216.29165, -2476.87148, -1880.58197, -574.49433, 227.45615, 144.50228, 379.15791, 225.36130, -443.47371, -8.51989, -3.75208, -4.25415, -1.59741, -0.43946, -0.06595, 150.42986, 6.54937, 87.67736, 92.32332, -21.97187, 29.87097, -4.21636, -5.72955, -0.03879, -0.01071, -0.45985, 0.02679, -0.02448, 0.02397, -0.06551, -0.01154, 1.97905, -0.82292, 1.10140, 0.30924, 0.03389, 0.14230, 0.00003, 0.00119, -0.01117, 0.00665, -0.00132, -0.00576, -0.08356, 0.08556, -0.26362, -0.12450, 0.00509, 0.00165, 0.02591, 0.16200, -0.03318, 0.06463, -0.00899, -0.00462, 0.00102, 0.00004, -0.73102, 0.08299, -0.52957, -0.35744, 0.14119, -0.24903, 0.20843, 0.14143, 0.00031, -0.00234, -0.42643, -2.02084, 1.58848, -1.57963, 0.68418, 2.07749, -0.45888, 0.19859, -0.30277, -0.22591, 0.11607, -0.09705, 0.00040, 0.00431, -0.02683, 0.03158, -0.01302, -0.00541, 0.01742, -0.00006, -0.02231, -0.01128, -0.00800, 0.02055, -0.00346, 0.00151, 0.56732, -0.68995, 0.27701, -0.16748, 0.01002, 0.00043, 0.26916, -0.57751, 0.15547, -0.15825, -0.02074, -0.07722, -8.23483, -4.02022, 0.69327, -5.91543, 1.72440, 1.02090, 0.00024, -0.00053, 20.03959, 14.79136, 76.43531, -14.42019, -7.82608, -69.96121, -54.94229, 23.55140, 26.60767, 14.68275, 0.05118, -0.10401, -0.00075, -0.01942, -3.84266, -26.23442, 10.20395, -14.77139, 3.40853, 2.07297, -0.53348, 0.40635, 0.00716, -0.00189, 0.12472, -0.02903, 0.02254, -0.00183, -0.00175, -0.01522, 0.00003, -0.00339, 0.00383, -0.00168, 0.01327, -0.03657, -0.08458, -0.00115, -0.03991, -0.02629, 0.00243, -0.00505, 0.33875, -0.16744, 0.05183, 0.01744, -0.24427, 0.15271, 0.37550, -0.17378, 0.09198, -0.27966, -0.22160, 0.16426, 0.00032, -0.00310, -0.00022, -0.00144, -0.06170, -0.01195, -0.00918, 0.02538, 0.03602, 0.03414, -0.14998, -0.44351, 0.45512, -0.11766, 0.35638, 0.27539, 5.93405, 10.55777, 12.42596, -1.82530, -2.36124, -6.04176, -0.98609, 1.67652, -0.09271, 0.03448, -0.01951, 0.00108, 0.33862, 0.21461, 0.02564, 0.06924, 0.01126, -0.01168, -0.00829, -0.00740, 0.00106, -0.00854, -0.08404, 0.02508, -0.02722, -0.06537, 0.01662, 0.11454, 0.06747, 0.00742, -0.01975, -0.02597, -0.00097, -0.01154, 0.00164, -0.00274, 0.02954, -0.05161, -0.02162, -0.02069, -0.06369, 0.03846, 0.00219, -0.01634, -0.04518, 0.06696, 1.21537, 0.99500, 0.68376, -0.28709, -0.11397, -0.06468, 0.00607, -0.00744, 0.01531, 0.00975, -0.03983, 0.02405, 0.07563, 0.00356, -0.00018, -0.00009, 0.00172, -0.00331, 0.01565, -0.03466, -0.00230, 0.00142, -0.00788, -0.01019, 0.01411, -0.01456, -0.00672, -0.00543, 0.00059, -0.00011, -0.00661, -0.00496, -0.01986, 0.01271, -0.01323, -0.00764, 0.00041, 0.01145, 0.00378, -0.00137, 0.00652, 0.00412, 0.01946, -0.00573, -0.00326, -0.00257, -0.00225, 0.00090, -0.00292, -0.00317, -0.00719, 0.00468, 0.00245, 0.00189, 0.00565, -0.00330, -0.00168, -0.00047, -0.00256, 0.00220, 0.00180, -0.00162, -0.00085, -0.00003, -0.00100, 0.00098, -0.00043, 0.00007, -0.00003, -0.00013, }; static double FAR tabr[] = { -38127.94034, -48221.08524, -20986.93487, -3422.75861, -8.97362, 53.34259, -404.15708, -0.05434, 0.46327, 0.16968, -387.16771, -146.07622, 103.77956, 19.11054, -40.21762, 996.16803, -702.22737, 246.36496, -63.89626, -304.82756, 78.23653, -2.58314, -0.11368, -0.06541, -0.34321, 0.33039, 0.05652, -0.16493, 67.44536, -29.43578, 50.85074, 18.68861, 0.39742, 13.64587, -1.61284, 0.11482, 0.01668, -0.01182, -0.00386, 0.01025, 0.00234, -0.01530, -0.02569, -0.00799, -0.00429, -0.00217, -0.00672, 0.00650, 0.01154, 0.00120, -0.00515, 0.00125, 0.00236, -0.00216, -0.00098, 0.00009, -0.00460, -0.00518, 0.00600, 0.00003, 0.00834, 0.00095, 0.01967, 0.00637, -0.00558, -0.06911, -0.01344, -0.06589, -0.05425, -0.00607, -0.00247, -0.00266, 0.08790, -0.08537, -0.00647, 0.04028, -0.00325, 0.00488, 0.00111, -0.00044, -0.00731, 0.00127, -0.00417, 0.00303, 0.05261, 0.01858, -0.00807, 0.01195, 1.26352, -0.38591, -0.34825, 1.10733, -0.02815, -0.02148, -0.05083, -0.04377, -0.01206, -0.00586, 0.03158, -0.01117, 0.00643, 0.00306, -0.01186, -0.05161, 0.01136, -0.00976, -0.00536, 0.01949, -1.41680, -0.81290, -0.09254, -0.24347, -0.14831, -0.34381, -2.44464, 0.41202, -0.99240, -0.33707, -0.01930, -0.08473, 0.00830, 0.01165, -0.01604, -0.02439, 0.00227, 0.04493, -42.75310, -22.65155, -9.93679, -18.36179, 2.73773, 3.24126, -1.20698, 1.07731, 0.00434, -0.10360, -0.02359, 0.00054, -0.02664, -0.00122, -19.79520, 33.11770, -53.56452, -35.41902, 67.95039, -82.46551, 117.31843, 14.08609, 0.06447, 0.03289, 0.40365, -0.33397, 0.07079, -0.09504, -30.36873, 6.23538, -14.25988, -44.91408, 38.53146, -16.31919, 6.99584, 22.47169, -0.13313, 0.28016, 6.83715, -6.01384, 1.68531, -3.62443, -0.22469, -0.29718, 0.25169, 0.13780, -3.64824, 1.22420, -2.48963, -1.12515, -0.01510, -0.56180, -0.03306, 0.01848, -0.00103, -0.00077, -0.01681, -0.00227, -0.00402, -0.00287, 0.04965, -0.16190, -0.40025, 0.20734, 0.15819, -0.25451, 0.02467, -0.00495, 0.00597, 0.00490, -0.01085, -0.00460, -0.71564, -0.26624, 0.03797, -0.28263, 0.03510, 0.30014, 2.79810, 0.07258, -0.01618, 0.00337, 0.00876, 0.04438, 0.00742, -0.00455, -0.01163, -0.00683, 0.00950, 0.01275, -0.02124, -0.67527, -0.23635, 0.06298, -0.03844, 0.01010, 0.73588, -0.00271, 0.01742, -0.00467, 0.00017, -0.00505, -0.27482, 5.00521, -1.92099, 1.55295, -0.35919, -0.09314, -0.47002, 0.06826, 0.07924, 0.16838, -0.04221, 0.71510, -0.16482, 0.08809, 41.76829, -125.79427, 106.65271, -71.30642, 36.18112, 17.36143, -1.63846, 5.02215, -1.08404, 0.00061, 2.45567, -2.42818, -9.88756, 5.36587, -0.61253, -0.35003, 1523.54790, 602.82184, 68.66902, 1878.26100, -1098.78095, -120.72600, 127.30918, -383.96064, -7.00838, -6.09942, -1.54187, 0.34883, -9.47561, -4.35408, -21541.63676, -32542.09807, -29720.82604, -28072.21231, -15755.56255, -8084.58657, -8148.87315, 7434.89857, 11033.30133, 7827.94658, 610.18256, -11411.93624, -9.87426, 0.94865, -1.63656, 0.41275, 1996.57150, 511.48468, 669.78228, 1363.67610, -379.72037, 198.84438, -16.63126, -79.37624, -2.30776, -246.07820, -16.85846, -148.18168, -6.89632, -20.49587, 0.39892, -0.34627, -57.81309, -136.96971, 15.25671, -96.61153, 16.09785, -8.79091, 0.70515, 1.16197, 0.05647, 0.04684, 0.25032, -0.19951, 0.07282, -0.00696, 0.00493, 0.00733, -0.01085, 0.00422, -0.01309, 0.00262, 0.37616, -0.36203, -0.11154, 0.18213, 0.15691, 0.29343, 0.00485, 0.06106, -0.01492, 0.09954, 0.28486, 2.27190, 0.33102, 1.50696, -0.01926, 0.04901, 0.01827, 0.00863, -0.03315, 0.00178, -0.77600, -0.48576, -0.21111, -0.19485, 1.90295, 6.44856, 1.71638, 2.12980, -7.19585, -0.08043, 0.07004, -0.02764, 0.01604, 0.01158, 0.00936, -0.01199, 0.18396, -0.29234, 0.10422, -0.00720, 0.05196, 0.10753, 0.02859, -0.03602, 0.63828, 1.96280, -0.31919, 0.85859, -0.10218, -0.00673, 0.01748, -0.02190, 0.01266, -0.02729, -4.80220, 8.90557, -5.94059, 2.28577, -0.19687, -1.28666, 0.32398, 0.14879, -0.02619, -0.02056, -0.04872, -0.07011, -0.04082, -0.04740, 0.60167, -2.20365, -0.27919, -0.45957, -1.31664, -2.22682, 176.89871, 13.03918, 0.00568, 0.00560, 0.01093, 0.00486, -0.00948, -0.31272, -11.87638, -3.68471, -1.74977, -9.60468, 2.94988, -0.57118, 0.00307, -0.01636, 0.02624, 0.03032, -0.00464, -0.01338, 0.00935, 0.00530, -0.11822, 0.03328, -0.41854, 0.04331, 0.41340, -0.21657, -0.00865, 0.00849, -0.00374, -0.00899, 0.01227, -0.23462, -0.71894, -0.04515, 0.00047, 0.28112, -0.12788, 0.11698, -0.02030, 0.02759, 0.02967, -0.00092, 0.00454, 0.00565, -0.00026, 0.00164, -0.01405, -0.00862, 0.01088, 0.05589, 0.18248, -0.06931, -0.00011, 0.03713, 0.01932, -0.00982, -0.13861, 0.09853, -0.03441, -0.02492, 2.26163, -5.94453, 4.14361, -0.94105, 0.39561, 0.75414, -0.17642, 0.03724, -1.32978, -0.56610, -0.03259, -0.06752, 39.07495, 80.25429, -28.15558, 82.69851, -37.53894, -17.88963, 6.98299, -13.04691, -0.48675, -1.84530, -0.07985, -0.33004, -3.39292, 2.73153, -17268.46134, 1144.22336, -16658.48585, 5252.94094, -3461.47865, 2910.56452, -433.49442, -305.74268, -383.45023, 545.16136, 313.83376, 27.00533, -31.41075, 7.90570, -12.40592, 3.01833, -0.83334, 0.23404, 59.26487, -112.74279, 113.29402, -15.37579, 14.03282, 32.74482, -4.73299, 1.30224, -0.00866, 0.01232, -0.53797, 0.00238, -0.07979, 0.04443, -0.05617, -0.05396, 0.10185, -1.05476, 0.43791, -0.32302, 0.06465, 0.03815, 0.00028, -0.00446, 0.09289, -0.06389, 0.01701, -0.01409, 0.47101, 0.16158, 0.01036, -0.39836, 0.00477, 0.01101, -2.06535, 0.33197, -0.82468, -0.41414, 0.03209, -0.09348, 0.00843, -0.00030, -9.49517, -3.82206, 0.66899, -10.28786, 6.33435, 1.73684, -0.98164, 2.25164, -0.07577, -0.00277, 1.02122, 0.75747, 1.79155, -0.77789, -2.56780, -2.07807, 0.19528, 0.77118, -0.28083, 0.32130, -0.04350, -0.07428, -0.01161, 0.01387, 0.02074, 0.19802, -0.03600, 0.04922, -0.19837, 0.02572, -0.00682, -0.04277, -0.01805, 0.00299, 0.03283, -0.02099, 3.57307, 1.17468, 0.65769, 1.88181, -0.39215, 0.08415, -0.53635, -0.19087, -0.12456, 0.02176, 0.01182, -0.07941, -2.43731, 2.44464, 1.03961, -1.81936, 30.33140, 0.92645, 0.00508, -0.01771, -81.06338, 66.43957, 33.16729, 131.44697, 76.63344, -34.34324, -35.33012, -28.04413, -1.47440, 13.09015, 0.13253, -0.01629, 0.02187, -0.00963, -21.47470, -9.44332, -7.21711, -12.59472, 1.76195, -1.63911, 0.09060, 0.28656, 0.00635, 0.00536, 0.03470, -0.06493, 0.00666, -0.01084, 0.01116, -0.01612, -0.00102, 0.00208, -0.05568, 0.00628, 0.02665, -0.01032, 0.21261, -1.90651, 0.72728, -0.57788, 0.08662, 0.10918, 3.39133, 3.97302, -4.63381, 4.26670, -2.50873, -3.76064, 1.28114, 1.81919, 1.48064, -0.37578, -0.26209, -0.47187, 0.00282, -0.00499, 0.01749, 0.03222, 1.60521, -1.79705, 1.61453, 0.68886, -0.29909, 0.55025, -0.07894, 0.19880, -0.15635, 0.46159, 2.09769, 1.52742, -7.60312, 11.34886, 4.35640, 8.61048, 2.15001, -2.15303, -0.61587, -0.11950, -0.03289, -0.00520, -0.00501, -0.00445, 0.15294, -0.05277, 0.02455, 0.00408, 1.19601, 0.43479, 0.20422, 0.57125, -0.12790, 0.01318, -0.15275, -0.43856, 6.99144, -0.08794, -1.69865, 0.82589, -0.20235, 0.97040, 0.20903, 0.00675, 0.26943, 0.08281, 0.03686, 0.05311, 1.28468, 1.21735, -1.38174, 1.29570, -0.75899, -1.17168, 0.44696, -0.32341, -0.06378, -0.27573, -0.06406, 0.87186, 0.21069, 0.19724, 0.00119, -0.04147, 0.39279, 0.51437, -0.11035, 0.21450, -0.04309, 0.02359, 0.20490, 0.14210, 0.00007, -0.00017, -0.03529, -0.02644, 0.10710, 0.44476, -0.02632, -0.01817, 2.11335, -0.04432, 0.18206, 0.27335, 0.08867, 0.00313, -0.00692, 0.01595, -0.72957, 0.32080, -0.29291, -0.44764, 0.12767, -0.05778, 0.04797, -0.00223, 0.17661, 0.22427, -0.04914, 0.09114, 0.12236, 0.00708, 0.74315, -0.01346, 0.02245, -0.02555, -0.30446, 0.13947, -0.12340, -0.18498, -0.04099, 0.02103, 0.06337, -0.01224, 0.28181, -0.01019, -0.02794, -0.09412, 0.03272, -0.01095, 0.11247, -0.00650, -0.01319, -0.04296, 0.04653, -0.00423, 0.06535, 0.00014, }; static char FAR args[] = { 0, 7, 3, 2, 5, -6, 6, 3, 7, 0, 2, 2, 5, -5, 6, 5, 3, 1, 6, -4, 7, 2, 8, 0, 2, 1, 6, -3, 7, 0, 3, 1, 6, -2, 7, -2, 8, 0, 2, 4, 5,-10, 6, 3, 3, 1, 5, -1, 6, -4, 7, 0, 3, 2, 5, -4, 6, -3, 7, 0, 3, 2, 6, -8, 7, 4, 8, 0, 3, 3, 5,-10, 6, 7, 7, 0, 2, 6, 5,-15, 6, 0, 2, 2, 6, -6, 7, 0, 3, 1, 5, -4, 6, 4, 7, 1, 3, 1, 5, -2, 6, -1, 7, 0, 3, 2, 5, -5, 6, 1, 8, 0, 3, 3, 5, -8, 6, 2, 7, 0, 3, 1, 5, -3, 6, 2, 8, 0, 3, 1, 5, -3, 6, 1, 7, 1, 1, 1, 8, 0, 3, 1, 5, -3, 6, 2, 7, 1, 3, 1, 5, -2, 6, -2, 7, 0, 2, 2, 6, -5, 7, 1, 3, 2, 6, -6, 7, 2, 8, 0, 3, 2, 6, -7, 7, 4, 8, 0, 3, 2, 5, -4, 6, -2, 7, 0, 3, 1, 5, -1, 6, -5, 7, 0, 3, 2, 6, -7, 7, 5, 8, 0, 3, 1, 6, -1, 7, -2, 8, 0, 2, 1, 6, -2, 7, 1, 3, 1, 6, -3, 7, 2, 8, 0, 3, 1, 6, -4, 7, 4, 8, 1, 3, 2, 5, -5, 6, 2, 8, 1, 3, 2, 5, -6, 6, 2, 7, 1, 2, 2, 7, -2, 8, 0, 1, 1, 7, 2, 2, 5, 5,-12, 6, 2, 3, 2, 6, -5, 7, 1, 8, 0, 3, 1, 5, -1, 6, -3, 7, 0, 3, 7, 5,-18, 6, 3, 7, 0, 2, 3, 5, -7, 6, 3, 3, 1, 6, 1, 7, -5, 8, 0, 3, 1, 5, -4, 6, 3, 7, 0, 3, 5, 5,-13, 6, 3, 7, 0, 2, 1, 5, -2, 6, 3, 3, 3, 5, -9, 6, 3, 7, 0, 3, 3, 5, -8, 6, 3, 7, 1, 2, 1, 5, -3, 6, 3, 3, 5, 5,-14, 6, 3, 7, 0, 3, 1, 5, -3, 6, 3, 7, 2, 2, 3, 6, -7, 7, 0, 2, 3, 5, -8, 6, 2, 3, 2, 5, -3, 6, -4, 7, 1, 3, 2, 5, -8, 6, 7, 7, 0, 2, 5, 5,-13, 6, 0, 2, 2, 6, -4, 7, 2, 3, 2, 6, -5, 7, 2, 8, 0, 3, 2, 5, -4, 6, -1, 7, 0, 3, 2, 5, -7, 6, 4, 7, 0, 2, 1, 6, -2, 8, 2, 2, 1, 6, -1, 7, 0, 3, 1, 6, -2, 7, 2, 8, 0, 3, 2, 5, -5, 6, 2, 7, 0, 3, 2, 5, -6, 6, 2, 8, 0, 3, 2, 5, -6, 6, 1, 7, 0, 2, 3, 7, -2, 8, 0, 1, 2, 7, 1, 2, 1, 6, -1, 8, 1, 3, 1, 5, -2, 6, 1, 7, 0, 3, 1, 5, -2, 6, 2, 8, 0, 2, 3, 6, -6, 7, 2, 2, 6, 5,-14, 6, 0, 3, 3, 6, -7, 7, 2, 8, 0, 3, 2, 5, -3, 6, -3, 7, 1, 2, 4, 5, -9, 6, 3, 3, 2, 6, -2, 7, -2, 8, 0, 2, 2, 6, -3, 7, 1, 3, 2, 6, -4, 7, 2, 8, 0, 2, 2, 5, -4, 6, 3, 3, 2, 5, -7, 6, 3, 7, 1, 3, 1, 6, 1, 7, -2, 8, 0, 1, 1, 6, 5, 3, 2, 5, -5, 6, 3, 7, 1, 2, 2, 5, -6, 6, 3, 1, 3, 7, 3, 2, 4, 5,-11, 6, 3, 2, 1, 5, -4, 7, 0, 3, 2, 5, -5, 6, -3, 7, 1, 2, 6, 5,-16, 6, 0, 3, 3, 5, -7, 6, 2, 7, 0, 3, 3, 6, -4, 7, -2, 8, 0, 2, 3, 6, -5, 7, 1, 3, 3, 6, -6, 7, 2, 8, 1, 3, 3, 6, -7, 7, 4, 8, 0, 3, 2, 5, -3, 6, -2, 7, 2, 3, 2, 5, -8, 6, 5, 7, 0, 2, 2, 6, -4, 8, 0, 3, 2, 6, -1, 7, -2, 8, 1, 2, 2, 6, -2, 7, 2, 3, 2, 6, -3, 7, 2, 8, 0, 3, 2, 5, -4, 6, 1, 7, 0, 3, 2, 5, -4, 6, 2, 8, 0, 3, 2, 5, -7, 6, 2, 7, 1, 2, 1, 6, 1, 7, 1, 2, 5, 5,-11, 6, 2, 3, 1, 5, -2, 7, -2, 8, 0, 2, 1, 5, -3, 7, 0, 2, 3, 5, -6, 6, 3, 3, 2, 6, 1, 7, -5, 8, 0, 2, 2, 6, -3, 8, 1, 2, 1, 5, -1, 6, 3, 3, 2, 5, -7, 6, 3, 8, 0, 3, 3, 5, -7, 6, 3, 7, 0, 3, 2, 5, -1, 6, -7, 7, 0, 2, 1, 5, -4, 6, 2, 3, 1, 5, -2, 6, 3, 7, 0, 2, 4, 6, -7, 7, 0, 2, 3, 5, -9, 6, 0, 3, 2, 5, -2, 6, -4, 7, 0, 2, 3, 6, -4, 7, 2, 3, 2, 5, -3, 6, -1, 7, 0, 3, 2, 5, -8, 6, 4, 7, 0, 2, 2, 6, -2, 8, 1, 2, 2, 6, -1, 7, 0, 3, 2, 6, -2, 7, 2, 8, 1, 3, 2, 5, -4, 6, 2, 7, 0, 3, 2, 5, -7, 6, 2, 8, 0, 3, 2, 5, -7, 6, 1, 7, 0, 2, 1, 6, 2, 7, 0, 2, 2, 6, -1, 8, 0, 2, 4, 6, -6, 7, 1, 2, 6, 5,-13, 6, 0, 3, 2, 5, -2, 6, -3, 7, 1, 2, 4, 5, -8, 6, 2, 3, 3, 6, -2, 7, -2, 8, 0, 2, 3, 6, -3, 7, 0, 3, 3, 6, -4, 7, 2, 8, 0, 2, 2, 5, -3, 6, 3, 3, 2, 5, -8, 6, 3, 7, 1, 3, 2, 6, 1, 7, -2, 8, 0, 1, 2, 6, 5, 3, 2, 5, -4, 6, 3, 7, 2, 2, 2, 5, -7, 6, 3, 3, 1, 6, 4, 7, -2, 8, 0, 2, 1, 6, 3, 7, 1, 3, 1, 6, 2, 7, 2, 8, 0, 2, 4, 5,-12, 6, 2, 2, 5, 6, -8, 7, 0, 2, 4, 6, -5, 7, 0, 3, 2, 5, -2, 6, -2, 7, 0, 2, 3, 6, -2, 7, 1, 3, 3, 6, -3, 7, 2, 8, 0, 2, 5, 5,-10, 6, 2, 3, 1, 5, 1, 6, -3, 7, 0, 2, 3, 5, -5, 6, 3, 2, 3, 6, -3, 8, 0, 1, 1, 5, 2, 2, 1, 5, -5, 6, 2, 2, 5, 6, -7, 7, 0, 2, 4, 6, -4, 7, 2, 2, 3, 6, -2, 8, 0, 2, 3, 6, -1, 7, 0, 2, 5, 6, -6, 7, 0, 2, 4, 5, -7, 6, 2, 2, 4, 6, -3, 7, 2, 2, 2, 5, -2, 6, 2, 3, 2, 6, -9, 7, 3, 8, 0, 1, 3, 6, 4, 3, 2, 5, -3, 6, 3, 7, 1, 2, 2, 5, -8, 6, 3, 3, 2, 6, 4, 7, -2, 8, 0, 2, 4, 5,-13, 6, 1, 2, 6, 6, -8, 7, 1, 2, 5, 6, -5, 7, 0, 2, 4, 6, -2, 7, 0, 2, 5, 5, -9, 6, 2, 2, 3, 5, -4, 6, 2, 2, 1, 5, 1, 6, 2, 2, 6, 5,-11, 6, 0, 3, 6, 6, -7, 7, 2, 8, 0, 2, 4, 5, -6, 6, 2, 2, 2, 5, -1, 6, 2, 1, 4, 6, 3, 3, 2, 5, -2, 6, 3, 7, 1, 2, 2, 5, -9, 6, 1, 2, 5, 5, -8, 6, 2, 2, 3, 5, -3, 6, 1, 2, 1, 5, 2, 6, 2, 2, 6, 5,-10, 6, 1, 2, 4, 5, -5, 6, 2, 1, 2, 5, 1, 1, 5, 6, 2, 2, 5, 5, -7, 6, 1, 2, 3, 5, -2, 6, 1, 3, 1, 5, 2, 6, 3, 7, 0, 2, 6, 5, -9, 6, 0, 2, 4, 5, -4, 6, 2, 2, 2, 5, 1, 6, 1, 2, 7, 5,-11, 6, 0, 2, 5, 5, -6, 6, 1, 2, 3, 5, -1, 6, 1, 2, 6, 5, -8, 6, 1, 2, 4, 5, -3, 6, 0, 2, 5, 5, -5, 6, 0, 1, 3, 5, 0, 2, 6, 5, -7, 6, 1, 2, 7, 5, -9, 6, 0, 2, 5, 5, -4, 6, 0, 2, 6, 5, -6, 6, 0, 2, 7, 5, -8, 6, 0, 2, 6, 5, -5, 6, 0, 2, 7, 5, -7, 6, 0, 2, 8, 5, -9, 6, 0, 2, 8, 5, -8, 6, 0, 2, 1, 3, -1, 6, 0, -1 }; /* Total terms = 215, small = 211 */ struct plantbl sat404 = { 9, { 0, 0, 1, 0, 8, 18, 9, 5, 0,}, 7, args, tabl, tabb, tabr, 9.5575813548599999e+00, 3652500.0, 1.0 }; astronomical-almanac-5.6/sidrlt.c0000644000175000017500000000560006427377230015315 0ustar jrvjrv /* Local Apparent Sidereal Time with equation of the equinoxes * AA page B6 * * The siderial time coefficients are from Williams (1994), updated * to DE403. * * Caution. At epoch J2000.0, the 16 decimal precision * of IEEE double precision numbers * limits time resolution measured by Julian date * to approximately 24 microseconds. */ extern double J2000, TDT, RTD, nutl, coseps; #if __STDC__ double floor (double); int nutlo (double); int epsiln (double); #else double floor(); int nutlo(), epsiln(); #endif /* program returns sidereal seconds since sidereal midnight */ double sidrlt( j, tlong ) double j; /* Julian date and fraction */ double tlong; /* East longitude of observer, degrees */ { double jd0; /* Julian day at midnight Universal Time */ double secs; /* Time of day, UT seconds since UT midnight */ double eqeq, gmst, jd, T0, msday; /*long il;*/ /* Julian day at given UT */ jd = j; jd0 = floor(jd); secs = j - jd0; if( secs < 0.5 ) { jd0 -= 0.5; secs += 0.5; } else { jd0 += 0.5; secs -= 0.5; } secs *= 86400.0; /* Julian centuries from standard epoch J2000.0 */ /* T = (jd - J2000)/36525.0; */ /* Same but at 0h Universal Time of date */ T0 = (jd0 - J2000)/36525.0; /* The equation of the equinoxes is the nutation in longitude * times the cosine of the obliquity of the ecliptic. * We already have routines for these. */ nutlo(TDT); epsiln(TDT); /* nutl is in radians; convert to seconds of time * at 240 seconds per degree */ eqeq = 240.0 * RTD * nutl * coseps; /* Greenwich Mean Sidereal Time at 0h UT of date */ #if 1 #if 0 /* J. G. Williams, "Contributions to the Earth's obliquity rate, precession, and nutation," Astronomical Journal 108, p. 711 (1994). */ gmst = (((-2.0e-6*T0 - 3.e-7)*T0 + 9.27695e-2)*T0 + 8640184.7928613)*T0 + 24110.54841; /* UT days per sidereal day at date T0 */ msday = (((-(4. * 2.0e-6)*T0 - (3. * 3.e-7))*T0 + (2. * 9.27695e-2))*T0 + 8640184.7928613)/(86400.*36525.) + 1.0; #else /* Corrections to Williams (1994) introduced in DE403. */ gmst = (((-2.0e-6*T0 - 3.e-7)*T0 + 9.27701e-2)*T0 + 8640184.7942063)*T0 + 24110.54841; msday = (((-(4. * 2.0e-6)*T0 - (3. * 3.e-7))*T0 + (2. * 9.27701e-2))*T0 + 8640184.7942063)/(86400.*36525.) + 1.0; #endif #else /* This is the 1976 IAU formula. */ gmst = (( -6.2e-6*T0 + 9.3104e-2)*T0 + 8640184.812866)*T0 + 24110.54841; /* mean solar days per sidereal day at date T0 */ msday = 1.0 + ((-1.86e-5*T0 + 0.186208)*T0 + 8640184.812866)/(86400.*36525.); #endif /* Local apparent sidereal time at given UT */ gmst = gmst + msday*secs + eqeq + 240.0*tlong; /* Sidereal seconds modulo 1 sidereal day */ gmst = gmst - 86400.0 * floor( gmst/86400.0 ); /* * il = gmst/86400.0; * gmst = gmst - 86400.0 * il; * if( gmst < 0.0 ) * gmst += 86400.0; */ return( gmst ); } astronomical-almanac-5.6/star.cat0000644000175000017500000001340205071206202015271 0ustar jrvjrv2000 00 08 23.265 29 05 25.58 1.039 -16.33 -12.0 0.0240 2.06 alAnd(Alpheratz) 4 2000 00 26 17.030 -42 18 21.81 1.833 -39.57 75.0 0.0350 2.39 alPhe(Ankaa) 116 2000 00 40 30.450 56 32 14.46 0.636 -3.19 -4.0 0.0160 2.23 alCas(Schedar) 139 2000 00 43 35.372 -17 59 11.82 1.637 3.25 13.0 0.0570 2.04 beCet(Diphda) 115 2000 01 37 42.852 -57 14 12.18 1.173 -3.47 16.0 0.0230 0.46 alEri(Achernar) 334 2000 02 07 10.403 23 27 44.66 1.383 -14.83 -14.0 0.0430 2.00 alAri(Hamal) 306 2000 02 58 15.696 -40 18 16.97 -0.391 1.94 12.0 0.0280 3.42 th-1Eri(Acamar) 771 2000 03 02 16.773 04 05 22.93 -0.063 -7.80 -26.0 0.0090 2.53 alCet(Menkar) 419 2000 03 24 19.365 49 51 40.34 0.246 -2.46 -2.0 0.0290 1.80 alPer(Mirfak) 917 2000 04 35 55.237 16 30 33.39 0.439 -18.97 54.0 0.0480 0.85 alTau(Aldebara) 629 2000 05 14 32.268 -08 12 5.98 0.003 -0.13 21.0 0.0130 0.12 beOri(Rigel) 1063 2000 05 16 41.353 45 59 52.90 0.728 -42.47 30.0 0.0730 0.08 alAur(Capella) 1077 2000 05 25 7.857 06 20 58.74 -0.059 -1.39 18.0 0.0260 1.64 gaOri(Bellatrix) 919 2000 05 26 17.511 28 36 26.67 0.169 -17.51 9.0 0.0180 1.65 beTau(Elnath) 795 2000 05 36 12.809 -01 12 7.02 0.006 -0.24 26.0 0.0000 1.70 epOri(Alnilam) 969 2000 05 55 10.307 07 24 25.35 0.173 0.87 21.0 0.0050 0.50 alOri(Betelgeuse) 1055 2000 06 23 57.119 -52 41 44.50 0.245 2.07 21.0 0.0180 -0.72 alCar(Canopus) 914 2000 06 45 8.871 -16 42 57.99 -3.847 -120.53 -7.6 0.3751 -1.46 alCMa(Sirius) 1591 2000 06 58 37.548 -28 58 19.50 0.031 0.28 27.0 0.0000 1.50 epCMa(Adhara) 3666 2000 07 39 18.113 05 13 30.06 -4.755 -102.29 -3.0 0.2880 0.38 alCMi(Procyon) 1739 2000 07 45 18.946 28 01 34.26 -4.740 -4.59 3.0 0.0930 1.14 beGem(Pollux) 1463 2000 08 22 30.833 -59 30 34.51 -0.346 1.44 2.0 0.0000 1.86 epCar(Avior) 1032 2000 09 07 59.776 -43 25 57.38 -0.172 1.27 18.0 0.0150 2.21 laVel(Suhail) 4990 2000 09 13 11.957 -69 43 1.95 -3.108 10.78 -5.0 0.0380 1.68 beCar(Miaplacidus) 1023 2000 09 27 35.247 -08 39 31.15 -0.093 3.28 -4.0 0.0170 1.98 alHya(Alphard) 2680 2000 10 08 22.315 11 58 1.89 -1.693 0.64 6.0 0.0390 1.35 alLeo(Regulus) 2149 2000 11 03 43.666 61 45 3.22 -1.675 -6.65 -9.0 0.0310 1.79 alUMa(Dubhe) 1161 2000 11 49 3.580 14 34 19.35 -3.422 -11.41 0.0 0.0760 2.14 beLeo(Denebola) 2383 2000 12 15 48.366 -17 32 30.97 -1.124 2.33 -4.0 0.0000 2.59 gaCrv(Gienah) 3424 2000 12 26 35.871 -63 05 56.58 -0.524 -1.21 -11.0 0.0000 1.58 al-1Cru(Acrux) 2745 2000 12 31 9.929 -57 06 47.50 0.285 -26.23 21.0 0.0000 1.63 gaCru(Gacrux) 5272 2000 12 54 1.748 55 57 35.47 1.328 -0.58 -9.0 0.0090 1.77 epUMa(Alioth) 1627 2000 13 25 11.587 -11 09 40.71 -0.278 -2.83 1.0 0.0210 0.97 alVir(Spica) 3672 2000 13 47 32.434 49 18 47.95 -1.249 -1.09 -11.0 0.0350 1.86 etUMa(Alkaid) 2027 2000 14 03 49.408 -60 22 22.79 -0.426 -1.93 6.0 0.0160 0.61 beCen(Hadar) 5365 2000 14 06 40.951 -36 22 12.03 -4.293 -51.90 1.0 0.0590 2.06 thCen(Menkent) 9260 2000 14 15 39.677 19 10 56.71 -7.714 -199.84 -5.0 0.0900 -0.04 alBoo(Arcturus) 2777 2000 14 39 35.885 -60 50 7.44 -49.826 69.93 -22.2 0.7516 -0.01 alCen(Rigil) 5483 2000 14 50 52.713 -16 02 30.42 -0.734 -6.68 -10.0 0.0490 2.75 al-2Lib(Zubenelgen) 3966 2000 14 50 42.346 74 09 19.78 -0.763 1.22 17.0 0.0310 2.08 beUMi(Kochab) 595 2000 15 34 41.276 26 42 52.94 0.906 -8.86 2.0 0.0430 2.23 alCrB(Alphecca) 2512 2000 16 29 24.439 -26 25 55.15 -0.071 -2.03 -3.0 0.0190 0.96 alSco(Antares) 11359 2000 16 48 39.869 -69 01 39.82 0.260 -3.40 -3.0 0.0240 1.92 alTrA(Atria) 2822 2000 17 10 22.681 -15 43 29.71 0.260 9.50 -1.0 0.0520 2.43 etOph(Sabik) 4467 2000 17 33 36.534 -37 06 13.72 -0.011 -2.92 -3.0 0.0000 1.63 laSco(Shaula) 11673 2000 17 34 56.076 12 33 36.14 0.822 -22.64 13.0 0.0560 2.08 alOph(Rasalhague) 3252 2000 17 56 36.367 51 29 20.21 -0.081 -1.94 -28.0 0.0170 2.23 gaDra(Eltanin) 2282 2000 18 24 10.327 -34 23 4.73 -0.309 -12.41 -15.0 0.0150 1.85 epSgr(Kaus_Aust.) 12784 2000 18 36 56.332 38 47 1.17 1.726 28.61 -14.0 0.1230 0.03 alLyr(Vega) 3238 2000 18 55 15.924 -26 17 48.23 0.099 -5.42 -11.0 0.0000 2.02 siSgr(Nunki) 13595 2000 19 50 47.002 08 52 6.03 3.629 38.63 -26.3 0.1981 0.77 alAql(Altair) 4236 2000 20 25 38.852 -56 44 6.38 0.082 -8.91 2.0 0.0000 1.94 alPav(Peacock) 9674 2000 20 41 25.917 45 16 49.31 0.027 0.23 -5.0 0.0000 1.25 alCyg(Deneb) 3541 2000 21 44 11.164 09 52 29.92 0.207 -0.06 5.0 0.0060 2.39 epPeg(Enif) 4891 2000 22 08 14.000 -46 57 39.59 1.259 -15.10 12.0 0.0510 1.74 alGru(Al_na'ir) 14063 2000 22 57 39.055 -29 37 20.10 2.551 -16.47 7.0 0.1440 1.16 alPsA(Fomalhaut) 19370 2000 23 04 45.658 15 12 18.90 0.436 -4.25 -4.0 0.0300 2.49 alPeg(Markab) 4926 2000 02 31 48.704 89 15 50.72 19.877 -1.52 -17.0 0.0070 2.02 alUMi(Polaris) 8 2000 21 08 46.202 -88 57 23.38 8.490 0.47 12.0 0.0000 5.47 siOct 47 2000 02 44 11.986 49 13 42.48 3.425 -8.95 25.0 0.0770 4.12 thPer 746 1950 02 40 46.276 49 01 6.45 3.42 -8.3 0 0 0.49 thPer 2000 14 39 36.087 -60 50 7.14 -49.486 69.60 -22.2 1.3297872 0 AA_page_B40 1986.5 14 38 40.588 -60 46 48.63 -49.366 70.04 0 1.33155792 0 AA_page_B23 1950 17 55 23.000 4 33 18.00 -5.0 1031.0 -107.8 0.548 9.54 Barnard 1950 23 03 00.0 -36 8 0.0 0.0 690.0 10.0 0.279 7.36 217987 ------ astronomical-almanac-5.6/sun.c0000666000175000017500000000442707615752440014633 0ustar jrvjrv/* Calculate and display apparent coordinates of the sun at the * time given by the external variables TDT, UT. * Before calling this routine, the geometric position of the * earth must be calculated and put in rearth[]. */ #include "kep.h" extern struct orbit earth; int dosun() { double r, x, y, t; double ecr[3], rec[3], pol[3]; int i; double asin(), modtp(), sqrt(), cos(), sin(); /* Display ecliptic longitude and latitude. */ for( i=0; i<3; i++ ) ecr[i] = -rearth[i]; r = eapolar[2]; if( prtflg ) { lonlat( ecr, TDT, pol, 1 ); } /* Philosophical note: the light time correction really affects * only the Sun's barymetric position; aberration is due to * the speed of the Earth. In Newtonian terms the aberration * is the same if the Earth is standing still and the Sun moving * or vice versa. Thus the following is actually wrong, but it * differs from relativity only in about the 8th decimal. * It should be done the same way as the corresponding planetary * correction, however. */ pol[2] = r; for( i=0; i<2; i++ ) { t = pol[2]/173.1446327; /* Find the earth at time TDT - t */ kepler( TDT-t, &earth, ecr, pol ); } r = pol[2]; for( i=0; i<3; i++ ) { x = -ecr[i]; y = -rearth[i]; ecr[i] = x; /* position t days ago */ rec[i] = y; /* position now */ pol[i] = y - x; /* change in position */ } if( prtflg ) { printf( "light time %.4fm, ", 1440.0*t ); showcor( "aberration", ecr, pol ); } /* Estimate rate of change of RA and Dec * for use by altaz(). */ deltap( ecr, rec, &dradt, &ddecdt ); /* see dms.c */ dradt /= t; ddecdt /= t; /* There is no light deflection effect. * AA page B39. */ /* precess to equinox of date */ precess( ecr, TDT, -1 ); for( i=0; i<3; i++ ) rec[i] = ecr[i]; /* Nutation. */ epsiln( TDT ); nutate( TDT, ecr ); /* Display the final apparent R.A. and Dec. * for equinox of date. */ if( prtflg ) printf ("%s.", whatconstel (ecr, TDT)); showrd( " Apparent:", ecr, pol ); /* Show it in ecliptic coordinates */ if( prtflg ) { y = coseps * rec[1] + sineps * rec[2]; y = zatan2( rec[0], y ) + nutl; printf( "Apparent longitude %.3f deg\n", RTD*y ); } /* Report altitude and azimuth */ altaz( pol, UT ); return(0); } astronomical-almanac-5.6/tdb.c0000644000175000017500000000210706427377324014570 0ustar jrvjrv/* Find Barycentric Dynamical Time from Terrestrial Dynamical Time. Reference: Astronomical Almanac, page B5. */ /* radians per arc second */ #define STR 4.8481368110953599359e-6 /* 2000 January 1.5 */ #define J2000 2451545.0 #if __STDC__ double sin (double); double floor (double); #else double sin(), floor(); #endif /* Argument JED is a Julian date, in TDT. Output is the corresponding date in TDB. */ double tdb(JED) double JED; { double M, T; /* Find time T in Julian centuries from J2000. */ T = (JED - J2000)/36525.0; /* Mean anomaly of sun = l' (J. Laskar) */ M = 129596581.038354 * T + 1287104.76154; /* Reduce arc seconds mod 360 degrees. */ M = M - 1296000.0 * floor( M/1296000.0 ); M += (((((((( 1.62e-20 * T - 1.0390e-17 ) * T - 3.83508e-15 ) * T + 4.237343e-13 ) * T + 8.8555011e-11 ) * T - 4.77258489e-8 ) * T - 1.1297037031e-5 ) * T + 1.4732069041e-4 ) * T - 0.552891801772 ) * T * T; M *= STR; /* TDB - TDT, in seconds. */ T = 0.001658 * sin(M) + 0.000014 * sin(M+M); T = JED + T / 86400.0; return(T); } astronomical-almanac-5.6/trnsit.c0000666000175000017500000001474410334243355015344 0ustar jrvjrv/* Calculate time of transit * assuming RA and Dec change uniformly with time * * -- S. L. Moshier */ #include "kep.h" extern double glat; /* Earth radii per au */ #define DISFAC 2.3454780e4 /* cosine of 90 degrees 50 minutes: */ #define COSSUN -0.014543897651582657 /* cosine of 90 degrees 34 minutes: */ #define COSZEN -9.8900378587411476e-3 /* Returned transit, rise, and set times in radians (2 pi = 1 day) */ double r_trnsit; double r_rise; double r_set; int f_trnsit; int trnsit(J, lha, dec) double J; /* Julian date */ double lha; /* local hour angle, radians */ double dec; /* declination, radians */ { double x, y, z, N, D, TPI; double lhay, cosdec, sindec, coslat, sinlat; f_trnsit = 0; TPI = 2.0*PI; /* Initialize to no-event flag value. */ r_rise = -10.0; r_set = -10.0; /* observer's geodetic latitude, in radians */ x = glat * DTR; coslat = cos(x); sinlat = sin(x); cosdec = cos(dec); sindec = sin(dec); /* x = (J - floor(J-0.5) - 0.5) * TPI; */ x = floor(J) - 0.5; x = (J - x) * TPI; /* adjust local hour angle */ y = lha; /* printf ("%.7f,", lha); */ while( y < -PI ) y += TPI; while( y > PI ) y -= TPI; lhay = y; y = y/( -dradt/TPI + 1.00273790934); r_trnsit = x - y; /* printf ("rt %.7f ", r_trnsit); */ /* Ordinarily never print here. */ if( prtflg > 1 ) { printf( "approx local meridian transit" ); hms( r_trnsit ); printf( "UT (date + %.5f)\n", r_trnsit/TPI ); } if( (coslat == 0.0) || (cosdec == 0.0) ) goto norise; /* The time at which the upper limb of the body meets the * horizon depends on the body's angular diameter. */ switch( objnum ) { /* Sun */ case 0: N = COSSUN; break; /* Moon, elevation = -34' - semidiameter + parallax * semidiameter = 0.272453 * parallax + 0.0799" */ case 3: N = 1.0/(DISFAC*obpolar[2]); D = asin( N ); /* the parallax */ N = - 9.890199094634534e-3 + (1.0 - 0.2725076)*D - 3.874e-7; N = sin(N); break; /* Other object */ default: N = COSZEN; break; } y = (N - sinlat*sindec)/(coslat*cosdec); if( (y < 1.0) && (y > -1.0) ) { f_trnsit = 1; /* Derivative of y with respect to declination * times rate of change of declination: */ z = -ddecdt*(sinlat + COSZEN*sindec); z /= TPI*coslat*cosdec*cosdec; /* Derivative of acos(y): */ z /= sqrt( 1.0 - y*y); y = acos(y); D = -dradt/TPI + 1.00273790934; r_rise = x - (lhay + y)*(1.0 + z)/D; r_set = x - (lhay - y)*(1.0 - z)/D; /* Ordinarily never print here. */ if( prtflg > 1 ) { printf( "rises approx " ); hms(r_rise); printf( "UT, sets approx " ); hms(r_set); printf( "UT\n" ); } } norise: ; return(0); } extern struct orbit earth; /* Julian dates of rise, transet and set times. */ double t_rise; double t_trnsit; double t_set; /* Compute estimate of lunar rise and set times for iterative solution. */ static void iter_func(t, func) double t; int (* func)(); { int prtsave; prtsave = prtflg; prtflg = 0; JD = t; update(); /* Set UT and TDT */ kepler( TDT, &earth, rearth, eapolar ); (*func)(); prtflg = prtsave; } /* Iterative computation of rise, transit, and set times. */ int iter_trnsit( func ) int (* func)(); { double JDsave, TDTsave, UTsave; double date, date_save, date_trnsit, t0, t1; double rise1, set1, trnsit1, loopctr, retry; double TPI; int prtsave; loopctr = 0; prtsave = prtflg; TPI = PI + PI; JDsave = JD; TDTsave = TDT; UTsave = UT; date = floor(UT - 0.5) + 0.5; retry = 0; date_save = date; t1 = date_save; /* Find transit time. */ do { date = date_save; t0 = t1; iter_func(t0, func); t1 = date + r_trnsit / TPI; if (++loopctr > 10) { printf ("? Transit time did not converge.\n"); goto no_trnsit; } /* Reject transit if it is more than half a day from entered date. */ if (retry == 0) { if ((UTsave - t1) > 0.5) { date_save += 1.0; t1 = t_trnsit + 1.0; retry = 1; /* goto do_retry; */ } if ((UTsave - t1) < -0.5) { date_save -= 1.0; t1 = t_trnsit - 1.0; retry = 1; /* goto do_retry; */ } } } while (fabs(t1 - t0) > .0001); t_trnsit = t1; trnsit1 = r_trnsit; set1 = r_set; if (f_trnsit == 0) goto prtrnsit; /* Set current date to be that of the transit just found. */ date_trnsit = date; t1 = date + r_rise / TPI; /* Choose rising no later than transit. */ if (t1 >= t_trnsit) { date -= 1.0; t1 = date + r_rise / TPI; } loopctr = 0; do { t0 = t1; iter_func(t0, func); /* Skip out if no event found. Don't report rise or set. */ if ((f_trnsit == 0) || (++loopctr > 10)) { if (loopctr > 10) { printf ("? Rise time did not converge.\n"); } f_trnsit = 0; goto prtrnsit; } t1 = date + r_rise / TPI; if (t1 > t_trnsit) { date -= 1; t1 = date + r_rise / TPI; } } while (fabs(t1 - t0) > .0001); rise1 = r_rise; t_rise = t1; /* Set current date to be that of the transit. */ date = date_trnsit; r_set = set1; /* Choose setting no earlier than transit. */ t1 = date + r_set / TPI; if (t1 <= t_trnsit) { date += 1.0; t1 = date + r_set / TPI; } loopctr = 0; do { t0 = t1; iter_func(t0, func); if ((f_trnsit == 0) || (++loopctr > 10)) { if (loopctr > 10) { printf ("? Set time did not converge.\n"); } f_trnsit = 0; goto prtrnsit; } t1 = date + r_set / TPI; if (t1 < t_trnsit) { date += 1.0; t1 = date + r_set / TPI; } } while (fabs(t1 - t0) > .0001); t_set = t1; r_trnsit = trnsit1; r_rise = rise1; prtrnsit: prtflg = 1; printf( "local meridian transit " ); UT = t_trnsit; jtocal (t_trnsit); if (f_trnsit != 0) { printf( "rises " ); UT = t_rise; jtocal (t_rise); printf( "sets " ); UT = t_set; jtocal (t_set); t0 = t_set - t_rise; if ((t0 > 0.0) && (t0 < 1.0)) printf("Visible hours %.4f\n", 24.0 * t0); if ((fabs(JDsave - t_rise) > 0.5) && (fabs(JDsave - t_trnsit) > 0.5) && (fabs(JDsave - t_set) > 0.5)) printf("? wrong event date.\n"); } no_trnsit: JD = JDsave; TDT = TDTsave; UT = UTsave; /* Reset to original input date entry. */ prtflg = 0; update(); prtflg = prtsave; return 0; } astronomical-almanac-5.6/unix.mak0000666000175000017500000000334706614466677015353 0ustar jrvjrvCC= gcc CFLAGS= -O2 -Wall OBJS = altaz.o angles.o annuab.o constel.o deflec.o deltat.o diurab.o \ diurpx.o dms.o epsiln.o fk4fk5.o kepler.o kfiles.o lightt.o lonlat.o \ nutate.o precess.o refrac.o rplanet.o rstar.o sidrlt.o sun.o domoon.o \ trnsit.o vearth.o zatan2.o \ gplan.o mer404.o ven404.o ear404.o mar404.o jup404.o \ sat404.o ura404.o nep404.o plu404.o mlr404.o mlat404.o INCS = kep.h plantbl.h aa: aa.o $(OBJS) $(INCS) $(CC) -o aa aa.o $(OBJS) -lm # coff2exe aa aa.o: aa.c $(INCS) conjunct: conjunct.o $(OBJS) $(INCS) $(CC) -o conjunct conjunct.o $(OBJS) -lm # coff2exe conjunct conjunct.o: conjunct.c $(INCS) moonrise: moonrise.o $(OBJS) $(INCS) $(CC) -o moonrise moonrise.o $(OBJS) -lm moonrise.o: moonrise.c $(INCS) altaz.o: altaz.c $(INCS) angles.o: angles.c $(INCS) annuab.o: annuab.c $(INCS) constel.o: constel.c $(INCS) deflec.o: deflec.c $(INCS) deltat.o: deltat.c $(INCS) diurab.o: diurab.c $(INCS) diurpx.o: diurpx.c $(INCS) dms.o: dms.c $(INCS) epsiln.o: epsiln.c $(INCS) fk4fk5.o: fk4fk5.c $(INCS) kepler.o: kepler.c $(INCS) kfiles.o: kfiles.c $(INCS) lightt.o: lightt.c $(INCS) lonlat.o: lonlat.c $(INCS) nutate.o: nutate.c $(INCS) precess.o: precess.c $(INCS) refrac.o: refrac.c $(INCS) rplanet.o: rplanet.c $(INCS) rstar.o: rstar.c $(INCS) sidrlt.o: sidrlt.c $(INCS) sun.o: sun.c $(INCS) trnsit.o: trnsit.c $(INCS) vearth.o: vearth.c $(INCS) zatan2.o: zatan2.c $(INCS) domoon.o: domoon.c $(INCS) ear404.o: ear404.c $(INCS) jup404.o: jup404.c $(INCS) mar404.o: mar404.c $(INCS) mer404.o: mer404.c $(INCS) nep404.o: nep404.c $(INCS) sat404.o: sat404.c $(INCS) ura404.o: ura404.c $(INCS) ven404.o: ven404.c $(INCS) plu404.o: plu404.c $(INCS) mlr404.o: mlr404.c $(INCS) mlat404.o: mlat404.c $(INCS) astronomical-almanac-5.6/ura404.c0000644000175000017500000011347706253703470015043 0ustar jrvjrv/* First date in file = 625296.50 Number of records = 16731.0 Days per record = 131.0 Julian Years Lon Lat Rad -3000.0 to -2499.7: 0.35 0.06 0.42 -2499.7 to -1999.7: 0.50 0.06 0.38 -1999.7 to -1499.7: 0.39 0.07 0.34 -1499.7 to -999.8: 0.34 0.06 0.30 -999.8 to -499.8: 0.35 0.05 0.32 -499.8 to 0.2: 0.32 0.05 0.27 0.2 to 500.2: 0.26 0.04 0.25 500.2 to 1000.1: 0.28 0.04 0.25 1000.1 to 1500.1: 0.26 0.06 0.31 1500.1 to 2000.1: 0.33 0.05 0.24 2000.1 to 2500.0: 0.32 0.06 0.26 2500.0 to 3000.0: 0.34 0.06 0.32 3000.0 to 3000.4: 0.406 0.035 0.172 */ #include "plantbl.h" static double FAR tabl[] = { 21.56000, -4652.06828, 154246324.90417, 1130486.05080, 330.11531, -3020.20235, -8.03769, -122.02019, 212.45130, 254.23866, 25.39758, 60.08296, 6949.85053, 51951.42606, -1834.66531, 44481.91144, -3267.45825, 10776.65972, -628.05388, 532.83011, -16.80583, -30.05544, 1420.33767, 2007.21040, 592.32842, 1541.61732, -163.55984, 121.14134, 114.74969, -16.04944, 0.06069, 0.00725, -0.16861, 0.28785, 0.07399, -0.09680, 0.19936, -0.41620, 0.02922, 0.07398, 0.17272, 0.05602, 1.65461, -0.68278, -2.18745, -0.85327, 0.52467, -0.30863, 0.01598, 0.30017, -0.04190, -0.03288, -0.02013, 0.02257, -0.54883, -0.22701, -0.09257, -0.03921, 0.02644, 0.04667, 0.24773, -0.16562, 44242.85814, -223163.54065, 123776.84417, -206375.74884, 70472.73820, -27456.55173, 4065.74401, 13202.39154, -3260.72648, 802.50579, -153.13236, -503.81026, 30.17812, -31.91893, -65.14719, 77.78417, -37.38185, 19.13337, -3.14043, -0.21147, 0.27143, 0.17424, 0.04458, 0.10976, -0.41841, -0.21887, -0.09194, -0.02303, 0.02896, 0.10044, 0.01385, 0.01723, -0.01126, -0.09318, -57.95890, 29.69059, -46.41390, 3.07177, 0.42494, 2.33678, -3.09621, 0.05256, -0.02134, -0.35202, -0.44475, -0.83135, 1318.18265, 25605.86848, -9168.38371, 18917.31507, -5145.74480, 2130.77612, -485.25920, -438.44867, 19.97802, -33.14800, -23383.91826, -45133.19122, -18520.80729, -26549.95198, -2276.70124, -2974.01604, 603.23665, 306.87616, -87.73070, -32.49134, 549975.14525, 261920.31896, 526261.09735, 362619.26839, 150616.68873, 164643.90808, 9550.02662, 27381.83042, -1065.89047, 1024.20231, -66.63822, -44.75169, -92.10532, -20.26930, -313205.95341, 1462242.64616, 112982.53079, 1865690.41965, 308844.30901, 639864.93227, 89716.32843, 10378.80773, 4395.08428, -14565.35913, -3016.07754, -19348.64612, 3838.36899, -9813.42713, 6883.58821, -6064.92588, 2740.47455, -176.29547, 241.91895, 268.44181, -6.13397, 17.92503, -0.01377, -0.08742, 387.51915, 257.03872, 152.81792, 221.56197, -22.94836, 29.56640, -2.27801, 4.72805, -6.03420, -0.36763, 0.00667, 0.00443, -0.01405, 0.04658, -0.06533, -0.01966, 0.10738, 0.00443, 0.02889, 0.01056, 0.00900, -0.02206, 0.00013, 0.05281, 0.03035, 0.34793, 0.19460, 2.47360, 0.18189, -0.83895, 0.24983, 15.32050, 0.46010, 2.79643, -0.45793, 0.96707, -0.31226, 0.51911, 0.04071, 0.39399, 0.00038, 0.03854, 0.22446, 0.13630, -0.04357, 0.03635, 0.00202, -0.04502, -0.00458, -0.03884, 1.32597, 3.40849, -1.67839, -0.95411, -1.00116, -0.72744, -0.22484, -0.27682, -0.18069, 0.00405, -0.01000, 0.27523, -0.07038, -0.01051, -0.09064, 0.08518, 0.02083, -0.25406, 0.17745, -0.00944, 0.21326, 0.20454, 18.84894, -7.64400, 0.62670, -11.02728, 8.91329, 20.67190, 0.17757, -0.15471, -0.11385, -0.46057, 6.23014, -14.46025, 2.30012, -2.22677, 5.16823, -1.64235, -274.58413, 833.33247, -191.26241, 269.90157, -17.25965, 9.11368, -261.65136, -18274.45858, -2553.83872, -10039.10490, -508.52567, 336.18172, 14.88587, 421.35954, 162.43462, 544.92580, -0.44246, 0.23216, -0.29024, -0.13057, -1.58438, 0.34032, -0.31604, -0.01166, -0.07112, 0.05721, -0.10813, 0.01064, -0.05413, 0.06705, -0.41582, -0.47725, 0.31031, 0.08605, 0.00409, 0.02373, 0.08092, 0.06247, -0.01026, 0.05863, -0.00238, 0.02948, 0.00117, 0.02714, 0.01720, 0.18261, -0.04067, 0.88639, -0.15502, -0.96383, -0.05307, -0.17319, -0.00486, -0.02373, -0.14748, -0.11884, 0.07798, -0.00358, 0.01104, 0.00805, 0.15099, -0.03453, 0.01846, 0.03459, 0.02197, 0.07012, -0.43677, -1.87445, 1.35202, 2.28294, -0.03592, 0.07679, 0.16427, 0.03014, 0.02472, 0.05549, -0.04985, 0.05874, 0.35361, 0.01144, -0.57400, 1.34898, 0.00265, 0.01540, 0.00951, 0.08159, -0.00435, 0.34759, -0.12413, -0.49848, -0.77075, -2.73810, -31.77702, 12.16042, -14.87605, 11.98287, 12.69358, 1.31307, -8.22911, -21.47437, -0.24051, -0.38332, -0.01162, -0.03175, 0.00556, 0.02454, -0.02297, -0.01654, 0.00707, 0.04828, -0.00309, 0.17381, -0.00500, -0.07579, 0.02008, 0.05356, 0.00702, 0.01133, -0.00237, -0.00612, 0.18551, 0.22799, -0.14194, -0.08593, 0.00002, -0.01049, -0.17363, -0.13986, 0.00078, -0.06993, -0.00430, -0.07795, -0.03232, -4.13170, 0.00311, 0.05356, -0.17324, -0.15505, -0.00590, -0.06608, 0.04257, -0.04571, 0.00501, 0.02141, -0.00037, 0.07845, -0.00381, -0.03417, 0.01834, 0.03349, 0.07994, 0.15297, -0.82299, 0.24672, 0.51764, 0.96379, 0.01729, 0.02489, -0.08581, 0.13252, 0.00538, 0.01995, -0.00148, -0.02261, 0.00534, 0.01565, -0.07518, -0.28114, 0.22386, 0.39023, -0.00864, 0.00964, -0.01923, -0.02426, -0.00112, 0.00923, -0.00685, 0.02450, 0.26733, -0.99972, -0.82005, 0.13725, 0.01520, -0.00790, 0.00358, 0.00751, -0.00648, -0.00605, -0.04966, -0.04633, 0.06394, -0.01965, 0.50185, 0.40553, -0.25809, 0.28853, 0.52545, -3.41675, -0.00347, -0.11848, 0.02945, -0.01061, -0.04160, -0.03519, -0.03234, -0.81852, -0.02156, -0.00841, 0.00029, 0.00020, -0.02281, -0.00364, 0.04738, -0.04504, -0.19161, 0.37225, 0.05765, 0.11987, 0.00050, 0.02012, -0.03806, 0.39498, 0.29982, 0.00886, 0.01671, 53.04042, -0.04160, -0.38856, -0.00174, -0.01773, -0.47661, -0.32010, -0.01088, -0.16231, -0.01584, -0.00144, 0.06659, 0.12734, 0.04884, 0.02236, 0.00146, 0.06030, -0.20660, -0.03982, 0.15091, 1.24562, -0.01303, -0.22426, -0.01518, -0.03922, -0.00043, -0.00047, 0.02451, 0.04437, 0.02380, -0.00189, -0.00640, -0.07114, -0.00320, -0.02491, -0.00829, 0.07284, 0.02846, -0.28034, -0.00268, 0.00256, -0.43420, 0.39645, -0.31053, 1.25916, -0.00371, -0.00651, -0.00096, 0.02762, -0.00067, -0.02503, -0.01517, 0.03748, }; static double FAR tabb[] = { 0.00000, 107.91527, 83.39404, -124.29804, -7.73277, -3.99442, -0.08328, -1.74251, -9.05659, -22.88559, -2.30655, -4.40259, -470.94604, -3648.43408, 326.28960, -2972.91303, 337.37285, -650.33570, 57.18479, -18.29130, 1.13897, 2.70158, -13.64388, -71.88619, 7.36408, -43.79994, 6.57463, -5.81111, -0.06451, 0.73379, 0.00574, -0.01635, 0.00074, -0.01496, -0.00418, 0.00647, -0.00407, 0.00548, 0.00002, 0.00187, -0.00591, 0.00557, 0.32568, -0.01574, 0.19347, -0.01705, 0.00173, 0.02384, -0.00248, -0.00103, 0.00227, 0.00146, 0.00307, -0.00040, 0.03886, 0.01987, 0.00546, 0.00345, 0.00134, -0.00609, -0.01502, -0.01569, -10080.59325, 10806.67752, -14013.76861, 9928.38683, -6540.83480, 2084.91597, -1093.05006, -305.34266, -9.04558, -110.32310, 9.26094, -3.93195, 0.25552, 0.50327, -13.12170, -4.19317, -4.50857, -3.37626, -0.26850, -0.36028, -0.00357, 0.05862, -0.00828, 0.00926, -0.01515, -0.03687, -0.00224, -0.00802, -0.00225, -0.00158, -0.00022, -0.00044, -0.00281, 0.00371, 2.28259, -4.29888, 1.74622, -2.13604, 0.37023, -0.37022, 0.00886, 0.07081, 0.01669, 0.00056, -0.02020, 0.01586, -4255.31929, 5978.03267, -7264.48027, 1884.12585, -2353.93882, -1593.23001, 17.57205, -498.54139, 33.28704, -13.79498, -38416.64883, -13774.09664, -32822.03952, -3983.42726, -7538.09822, 1906.66915, -221.24439, 512.77046, 32.26101, 12.46483, 142710.47871, -96584.83892, 145395.05981, -86630.96423, 48202.96749, -23596.77676, 5286.16967, -1626.44031, -16.53568, 95.15428, -15.19472, 5.69207, -6.72181, 7.28683, 9515.16142, -166495.49381, 5588.84271, -146260.29445, 2023.55881, -30687.22422, 243.64741, 971.58076, 390.73247, -236.13754, -2684.56349, 739.81087, -597.39429, 474.89313, -631.69166, 213.04947, -204.89515, -33.09139, -17.78004, -22.21866, 0.61083, -1.41177, -0.00070, -0.00501, -58.24552, 25.27978, -36.39386, 0.36376, -2.21030, -6.46685, -0.58473, -0.09357, 0.12829, -0.94855, 0.00042, 0.00048, 0.00411, 0.00101, 0.00249, -0.00865, 0.00223, 0.00293, 0.00041, -0.00042, 0.00104, -0.00086, 0.00126, -0.00380, 0.00906, -0.02253, 0.05998, -0.10318, 0.00004, -0.03225, 0.14303, -0.05273, 0.32683, 0.09386, -0.17053, 0.60847, -0.06190, 0.28166, 0.06411, 0.05289, 0.01138, 0.00128, -0.00930, 0.00272, 0.00037, 0.00215, 0.00004, 0.00050, 0.00114, -0.00217, 0.05358, -0.06413, -0.00124, 0.03842, 0.01006, 0.22479, 0.00412, 0.04040, 0.01708, 0.02164, 0.02484, -0.02463, -0.00103, 0.02633, -0.01303, -0.03214, 0.03613, 0.02205, -0.02677, -0.02522, -0.00293, 0.03130, -1.87255, -2.50308, -1.53715, 0.36859, -0.17829, -1.12095, -0.05652, -0.00786, -0.06992, 0.07279, -2.95896, 0.55138, -0.61498, -0.11008, -0.87790, -0.50965, 119.73553, -35.18217, 44.78683, -4.22438, 1.95723, 0.58033, -4077.02379, -353.39110, -2781.63273, -75.23318, -312.50478, -23.86495, 24.59887, 32.56837, 120.09593, -51.00495, 0.09737, 0.09111, 0.04799, -0.05029, 0.08351, -0.33726, 0.03158, -0.06435, -0.00523, -0.01736, 0.00751, -0.01757, -0.00406, -0.01198, 0.16402, -0.10986, -0.02024, 0.07205, -0.00440, -0.00072, -0.00465, 0.00310, -0.00121, -0.00121, 0.00083, 0.00020, 0.00140, -0.00176, 0.00381, -0.00731, -0.01618, 0.01570, -0.10201, 0.05809, -0.03359, 0.01024, -0.00535, 0.00018, 0.00024, 0.00509, -0.00158, -0.00466, 0.00009, -0.00083, -0.00700, -0.00090, -0.00011, -0.00079, 0.00133, -0.00126, 0.01416, 0.05553, 0.04283, -0.06719, 0.00119, 0.00291, -0.00263, 0.01282, -0.00040, 0.00188, -0.00237, 0.00973, -0.39533, 0.18773, -0.79821, -0.40168, 0.00151, -0.00161, 0.00123, -0.00516, -0.01432, -0.00293, -0.05477, 0.04130, -0.48837, 0.18944, -0.12552, 9.37098, 1.02045, 5.11382, 0.72098, -3.70049, -5.80982, 3.30105, -0.09682, 0.09696, -0.00876, 0.00504, 0.00318, 0.00245, 0.00563, -0.00665, 0.00108, -0.00233, -0.00117, 0.00177, -0.00343, 0.00503, 0.01044, -0.00651, 0.00296, -0.00162, 0.00037, 0.00028, -0.00020, -0.00786, 0.00029, 0.00836, 0.00004, 0.00033, -0.00309, -0.00086, -0.00157, -0.00086, -0.00058, 0.00105, -0.04557, 0.01794, -0.00122, -0.00086, 0.00420, -0.00285, 0.00118, -0.00020, 0.00743, -0.01217, 0.00053, -0.00084, -0.00075, 0.00097, -0.00107, 0.00314, 0.00576, -0.00505, 0.03624, -0.02546, 0.05379, 0.30081, 0.29870, -0.22106, 0.00696, -0.00801, -0.03995, -0.01808, -0.00139, 0.00102, -0.00059, 0.00138, 0.00019, -0.00037, 0.00274, 0.00658, 0.00672, -0.01132, 0.00023, 0.00051, 0.00031, 0.00090, -0.00017, -0.00001, 0.00085, 0.00004, 0.02221, -0.01977, 0.07498, 0.03025, -0.00082, -0.00022, -0.00073, -0.00028, -0.00253, 0.00259, -0.01329, 0.01805, 0.00096, 0.00833, -0.11836, 0.04277, -0.10820, -0.03018, 0.34504, 0.09834, -0.00538, -0.00231, 0.00036, 0.00042, -0.00023, 0.00260, -0.01137, 0.00036, 0.01081, -0.03271, -0.00029, -0.00028, 0.00018, -0.00003, 0.00009, 0.00012, 0.00127, 0.00343, 0.00100, -0.00064, 0.00014, 0.00004, 0.00150, 0.00069, -0.01484, 0.00135, 0.03930, 0.01405, 0.00064, 0.00029, 0.00009, 0.00009, 0.00054, -0.00048, 0.00019, 0.00005, -0.00009, 0.00018, 0.00192, -0.00333, 0.01824, 0.01071, 0.00107, -0.00341, 0.25530, -0.18414, -0.84151, -0.31475, -0.00400, -0.00010, -0.00174, 0.00019, 0.00006, -0.00079, 0.00066, -0.00070, 0.00599, 0.00330, -0.00160, -0.00013, -0.00067, -0.00006, -0.00176, -0.00111, 0.00652, 0.00368, 0.00004, 0.00001, -0.00081, 0.00089, 0.00366, 0.00139, 0.00002, 0.00001, -0.01870, -0.00998, -0.00020, -0.00007, 0.00005, 0.00003, }; static double FAR tabr[] = { 0.00000, -53.23277, -44.70609, -62.54432, -19.15218, 0.10867, -1.91911, 1.47517, 16.51994, 5.00458, 3.88980, 1.55740, 3598.17109, 1831.07574, 2633.34851, 1775.69482, 497.10486, 488.77343, 6.03892, 31.08365, -2.06585, -1.12599, 230.37762, -113.95449, 162.40244, -46.57185, 6.70207, 17.27241, -0.66092, -14.42065, -0.01044, -0.00287, -0.03894, -0.01663, 0.01629, 0.00496, 0.08411, 0.02855, 0.01795, -0.00695, 0.02426, -0.03921, -0.24495, -0.77369, -0.31404, 0.38668, -0.05682, -0.17197, 0.06145, -0.00510, 0.00606, -0.00886, -0.00370, -0.00588, 0.02173, -0.11909, 0.00302, -0.01796, -0.01067, 0.00990, 0.05283, 0.06517, 59710.89716, -491.12783, 58672.38609, 19564.41947, 10597.99050, 14313.02561, -2585.52040, 766.78396, -138.39893, -802.43403, 131.35006, -31.97561, 7.95978, 8.16075, 28.72669, 31.72473, 6.45792, 16.50701, 0.01066, 1.29718, 0.11565, -0.13240, 0.05110, -0.01543, -0.09994, 0.18864, -0.01330, 0.04148, 0.03510, -0.00366, 0.00604, -0.00604, 0.03752, -0.00256, -7.00488, -21.63748, 1.43064, -17.10914, -0.62987, 0.48719, 0.00697, -1.22665, -0.14435, -0.00550, 0.32008, -0.19855, -13976.73731, -3559.49432, -7709.90803, -9310.80334, 749.31835, -3491.50696, 540.94979, -84.57550, 16.96663, 35.53930, 37214.64771, -36361.15845, 21093.74492, -31855.33076, 1500.84653, -7031.97901, -453.40865, -18.36692, -2.07726, -17.92336, -56348.30507, 378512.71483, -111444.43340, 370543.95160, -61893.70301, 112131.05507, -11977.44617, 9156.15245, -567.61838, -495.25760, 16.96202, -44.06279, 4.24760, -48.83674, -643705.49516, -131013.09649, -838580.02217, 67627.11556, -288441.70339, 150227.25291, -2500.57537, 42676.19888, 7084.60505, 2043.65642, 9639.56835, -1502.03390, -4126.00409, -828.73564, -2801.35204, -2293.77751, -209.23365, -1045.31476, 95.57334, -102.74623, 7.19216, 1.89593, -0.05661, 0.02166, 120.38332, -141.16507, 98.31386, -40.23448, 10.84269, 17.57713, 1.69239, 1.45065, -0.19626, 2.76108, -0.00270, 0.00360, -0.02333, -0.00710, -0.01035, 0.02950, 0.00737, -0.06311, -0.00613, 0.01407, 0.01377, 0.00879, -0.03287, 0.00012, -0.21667, 0.01793, -1.54865, 0.10953, 0.54543, 0.12102, -9.48047, 0.11477, -1.34966, 0.23199, -1.50834, 0.26567, -0.64503, 0.10742, -0.21452, 0.04428, -0.01920, -0.00906, -0.09378, 0.12773, -0.02787, -0.03090, 0.03111, 0.00140, 0.03771, -0.01269, -1.94794, 1.22823, 0.64183, -1.11467, -0.19301, -0.27357, 0.05710, -0.08115, -0.07318, 0.00806, 0.14286, 0.20297, 0.14920, -0.07897, 0.09682, 0.02379, -0.13928, 0.01679, -0.00774, 0.10060, 0.24433, 0.16760, -2.88905, -1.61439, 2.83052, -3.41031, 36.37048, 3.37867, 0.29321, 0.09687, 0.29324, -0.14651, 8.11116, 1.79211, 1.36421, 0.88111, 1.21683, 2.37950, -357.76211, -87.84636, -117.55745, -67.18338, -5.26029, -6.27559, 7509.94562, 3.68942, 4223.62097, -1041.13557, -74.64464, -251.41613, -166.22180, -1.68190, -214.55340, 62.79593, -0.08250, -0.15936, -0.03830, 0.10857, 0.21368, 0.50812, 0.00869, 0.09832, 0.02158, 0.02045, 0.01407, 0.03591, 0.03460, 0.01171, -0.16400, 0.09751, 0.03521, -0.12858, 0.00700, -0.00524, 0.01698, -0.04796, 0.04006, 0.00565, -0.02783, -0.00205, -0.02296, 0.00153, -0.16139, 0.01514, -0.78136, -0.01546, 0.40374, -0.06014, 0.06212, -0.01828, 0.00831, -0.00173, 0.06857, -0.11677, 0.00028, 0.05765, -0.00796, 0.00691, 0.03764, 0.14902, -0.02653, 0.02122, -0.05503, 0.01549, 1.56630, -0.35551, -1.87960, 1.14303, -0.06063, -0.03425, 0.03367, -0.11969, 0.04485, -0.01651, 0.04647, -0.02097, 0.22841, 0.47362, 0.99226, -0.60660, -0.01249, 0.00134, -0.07435, 0.00722, -0.31796, -0.00015, 0.20533, -0.04398, 0.93944, -0.26710, -5.60051, -9.32918, -5.13538, -4.05130, -0.56529, 4.34112, 7.18308, -2.66103, 0.13241, -0.07999, 0.01046, -0.00535, -0.04037, -0.00455, -0.00510, 0.00731, -0.04576, 0.00513, -0.15846, -0.00236, 0.04628, -0.00463, -0.01585, 0.00585, -0.00213, 0.00283, 0.00778, -0.00198, -0.17803, 0.18321, 0.07702, -0.12325, 0.01091, 0.00349, 0.14211, -0.21830, 0.07289, -0.00994, 0.07090, -0.00079, 4.18441, -0.07413, -0.06247, -0.00011, -0.15453, 0.14499, -0.06557, -0.00098, 0.00290, 0.02921, -0.01923, 0.00457, -0.07538, -0.00120, 0.02263, -0.00037, -0.01061, 0.00591, -0.04725, 0.02364, -0.07460, -0.24108, -0.28310, 0.14643, -0.00700, 0.00427, 0.22963, 0.03713, -0.02062, 0.00478, 0.01434, 0.00095, -0.01425, 0.00376, 0.29611, -0.08038, -0.37811, 0.21703, -0.00723, -0.00924, -0.02736, 0.01814, 0.00934, 0.00731, 0.00613, 0.00686, -0.91503, -0.32009, -0.15505, 0.79589, -0.00555, -0.01536, -0.00698, 0.00480, 0.00373, -0.00046, 0.00715, -0.00470, -0.01970, -0.05238, 0.60649, -0.32669, 0.17790, 0.33383, -2.74922, -0.25827, -0.07862, 0.00406, -0.00948, -0.02117, 0.03127, -0.04199, 0.89670, -0.02413, 0.01954, 0.03990, 0.00063, -0.00071, -0.00226, 0.02009, -0.04407, -0.05069, 0.38230, 0.16101, 0.11893, -0.06125, 0.02051, -0.00046, 0.39211, 0.03679, 0.01666, -0.31336, 53.28735, -0.01791, -0.39414, 0.04181, -0.01885, 0.00165, 0.31349, -0.47359, 0.16133, -0.01023, 0.00007, 0.01758, -0.13351, 0.07249, 0.00977, 0.05445, 0.11650, -0.00191, -0.09824, 0.40106, 2.41155, -0.30655, 0.24975, -0.01248, -0.03688, 0.01097, 0.00038, -0.00051, -0.04736, 0.02610, 0.00968, 0.02634, 0.07918, -0.00606, 0.02735, -0.00320, -0.07544, -0.00468, 0.19996, -0.01964, 0.00201, 0.00267, 0.39562, 0.43289, 1.24743, 0.31084, -0.00666, 0.00377, 0.05668, 0.00148, 0.03220, -0.00026, 0.03717, 0.01509, }; static char FAR args[] = { 0, 3, 2, 1, 7, -2, 8, 0, 2, 2, 7, -4, 8, 0, 2, 3, 7, -6, 8, 1, 2, 2, 5, -5, 6, 4, 2, 1, 6, -3, 7, 3, 3, 1, 6, -1, 7, -4, 8, 0, 3, 2, 5, -7, 6, 6, 7, 0, 3, 2, 6, -6, 7, 1, 8, 0, 3, 2, 6, -7, 7, 3, 8, 0, 3, 2, 6, -8, 7, 4, 8, 0, 3, 2, 6, -7, 7, 2, 8, 0, 2, 2, 6, -6, 7, 2, 3, 1, 5, -4, 6, 4, 7, 0, 3, 1, 6, -2, 7, -1, 8, 0, 3, 1, 6, -3, 7, 1, 8, 0, 3, 1, 6, -4, 7, 3, 8, 1, 2, 5, 7, -9, 8, 0, 2, 4, 7, -7, 8, 0, 2, 2, 7, -3, 8, 6, 2, 1, 7, -3, 8, 2, 2, 2, 7, -5, 8, 0, 2, 3, 7, -7, 8, 0, 3, 1, 6, -6, 7, 5, 8, 1, 3, 1, 6, -5, 7, 3, 8, 0, 3, 2, 5, -8, 6, 8, 7, 0, 3, 1, 5, -4, 6, 5, 7, 0, 2, 2, 6, -5, 7, 3, 3, 1, 6, 1, 7, -9, 8, 0, 3, 2, 5, -4, 6, -2, 7, 0, 2, 1, 6, -4, 8, 4, 2, 1, 6, -2, 7, 4, 2, 5, 7, -8, 8, 5, 2, 3, 7, -4, 8, 0, 1, 1, 7, 5, 2, 2, 7, -6, 8, 4, 3, 1, 6, -6, 7, 4, 8, 0, 2, 1, 6, -4, 7, 4, 3, 2, 6, -5, 7, 1, 8, 0, 3, 2, 6, -6, 7, 3, 8, 0, 2, 2, 6, -7, 7, 0, 3, 1, 5, -4, 6, 3, 7, 0, 3, 1, 6, -1, 7, -1, 8, 0, 2, 1, 5, -2, 6, 0, 2, 6, 7, -9, 8, 0, 2, 5, 7, -7, 8, 0, 2, 4, 7, -5, 8, 0, 2, 3, 7, -3, 8, 1, 2, 2, 7, -1, 8, 0, 2, 1, 7, 1, 8, 2, 1, 3, 8, 0, 2, 3, 6, -7, 7, 1, 3, 2, 5, -3, 6, -4, 7, 0, 3, 2, 6, -3, 7, -2, 8, 0, 2, 2, 6, -4, 7, 1, 3, 2, 6, -5, 7, 2, 8, 1, 3, 5, 5, -9, 6, -8, 7, 0, 3, 2, 5, -4, 6, -1, 7, 0, 3, 1, 6, 3, 7, -8, 8, 0, 3, 2, 6, -8, 7, 1, 8, 0, 3, 2, 5, -7, 6, 4, 7, 0, 3, 4, 5,-10, 6, 2, 7, 0, 2, 1, 6, -2, 8, 0, 2, 1, 6, -1, 7, 2, 2, 8, 7,-12, 8, 0, 2, 7, 7,-10, 8, 0, 2, 6, 7, -8, 8, 1, 2, 5, 7, -6, 8, 0, 2, 4, 7, -4, 8, 2, 1, 2, 7, 4, 1, 4, 8, 0, 2, 1, 7, -6, 8, 0, 2, 2, 7, -8, 8, 1, 2, 3, 7,-10, 8, 0, 2, 4, 7,-12, 8, 0, 3, 1, 6, -6, 7, 2, 8, 0, 2, 1, 6, -5, 7, 1, 3, 1, 6, -4, 7, -2, 8, 0, 3, 1, 5, -4, 6, 2, 7, 1, 3, 1, 5, -2, 6, 1, 7, 0, 2, 7, 7, -9, 8, 0, 2, 6, 7, -7, 8, 0, 2, 5, 7, -5, 8, 0, 2, 4, 7, -3, 8, 0, 2, 3, 7, -1, 8, 0, 2, 2, 7, 1, 8, 0, 2, 3, 6, -6, 7, 1, 3, 3, 6, -7, 7, 2, 8, 0, 3, 2, 5, -3, 6, -3, 7, 1, 3, 2, 6, -2, 7, -2, 8, 0, 2, 2, 6, -3, 7, 1, 3, 2, 6, -4, 7, 2, 8, 0, 3, 2, 5, -7, 6, 3, 7, 1, 3, 1, 6, 1, 7, -2, 8, 0, 1, 1, 6, 1, 2, 8, 7,-10, 8, 0, 2, 7, 7, -8, 8, 0, 2, 6, 7, -6, 8, 0, 2, 5, 7, -4, 8, 0, 2, 4, 7, -2, 8, 0, 1, 3, 7, 3, 2, 2, 7, 2, 8, 0, 2, 1, 7, 4, 8, 0, 2, 1, 5, -4, 7, 0, 2, 1, 6, -6, 7, 0, 2, 8, 7, -9, 8, 0, 2, 7, 7, -7, 8, 0, 2, 6, 7, -5, 8, 0, 2, 5, 7, -3, 8, 0, 2, 4, 7, -1, 8, 0, 3, 3, 6, -4, 7, -2, 8, 0, 2, 3, 6, -5, 7, 1, 3, 3, 6, -6, 7, 2, 8, 0, 3, 2, 5, -3, 6, -2, 7, 1, 3, 2, 6, -1, 7, -2, 8, 0, 2, 2, 6, -2, 7, 0, 3, 2, 6, -3, 7, 2, 8, 0, 3, 2, 5, -7, 6, 2, 7, 1, 2, 1, 6, 1, 7, 0, 2, 9, 7,-10, 8, 0, 2, 8, 7, -8, 8, 0, 2, 7, 7, -6, 8, 0, 2, 6, 7, -4, 8, 0, 2, 5, 7, -2, 8, 0, 1, 4, 7, 1, 2, 3, 7, 2, 8, 0, 2, 1, 5, -3, 7, 0, 2, 9, 7, -9, 8, 0, 2, 8, 7, -7, 8, 0, 3, 3, 6, -3, 7, -2, 8, 0, 2, 3, 6, -4, 7, 1, 3, 3, 6, -5, 7, 2, 8, 0, 3, 2, 5, -3, 6, -1, 7, 0, 3, 2, 5, -8, 6, 4, 7, 0, 2, 2, 6, -2, 8, 0, 2, 2, 6, -1, 7, 1, 3, 2, 6, -2, 7, 2, 8, 0, 3, 2, 5, -7, 6, 1, 7, 0, 2, 6, 7, -2, 8, 0, 1, 5, 7, 0, 3, 3, 6, -4, 7, 1, 8, 0, 2, 1, 5, -2, 7, 2, 3, 1, 5, -3, 7, 2, 8, 0, 3, 1, 5, -1, 6, 1, 7, 0, 2, 4, 6, -6, 7, 0, 2, 3, 6, -3, 7, 0, 1, 2, 6, 0, 3, 2, 5, -4, 6, 3, 7, 0, 3, 1, 5, 1, 6, -4, 7, 0, 3, 3, 5, -5, 6, -1, 7, 0, 1, 6, 7, 1, 3, 1, 5, 1, 7, -4, 8, 0, 2, 1, 5, -2, 8, 0, 2, 1, 5, -1, 7, 1, 3, 1, 5, -2, 7, 2, 8, 0, 3, 1, 5, -3, 7, 4, 8, 0, 3, 1, 5, -5, 6, 1, 7, 1, 3, 1, 5, -1, 6, 2, 7, 0, 2, 4, 6, -5, 7, 0, 2, 3, 6, -2, 7, 0, 3, 1, 5, 1, 7, -2, 8, 0, 1, 1, 5, 1, 2, 4, 6, -4, 7, 0, 2, 3, 6, -1, 7, 0, 3, 3, 5, -5, 6, 1, 7, 0, 2, 5, 6, -6, 7, 0, 2, 4, 6, -3, 7, 0, 2, 5, 6, -5, 7, 0, 2, 6, 6, -6, 7, 0, 2, 2, 5, -3, 7, 0, 2, 2, 5, -2, 7, 0, 2, 2, 5, -2, 8, 0, 2, 2, 5, -1, 7, 1, 3, 2, 5, -2, 7, 2, 8, 0, 1, 2, 5, 0, 2, 3, 5, -3, 7, 0, 2, 3, 5, -1, 7, 0, -1 }; /* Total terms = 177, small = 171 */ struct plantbl ura404 = { 9, { 0, 0, 0, 0, 5, 10, 9, 12, 0,}, 6, args, tabl, tabb, tabr, 1.9218446061800002e+01, 3652500.0, 1.0 }; astronomical-almanac-5.6/vax.zip0000644000175000017500000000212306614664641015172 0ustar jrvjrvPK=V!ԆB2AA.OPTU=n0 =@nѱ(ܥaQLSIIN_gM(= ೜nRi1Wn]|]cLܕ!Ϳ]3VBqEy/V䶾 JenAqtm5HAd3iv1UpDIZ^%7i> H5aͶK /=I@7bxPK2V!DXV DESCRIP.MMSn1F׹߁EBUM.Z(]$}By5V>wfo7]]-~xY?=+8*kz|~4QfzyygX~r{L$Fq۸~06YM5VcȄIϘ;.w/tm? Q8֡FFo?k-?-#3.EmlS"CΜ[;ٞȞ:-cQt@Z^;+~\_ Iu7"Ah=7'3:9uliq>p}~{