Enumerating eclipses
- Meeus's approximate method finds every eclipse. Chapter 52 of the 1991 Astronomical Algorithms, chapter 54 in the 1998 edition, steps through mean new moons, rejects a lunation when , then computes and from short trigonometric series. Against the NASA catalogue for 1951 to 2050 it finds all 221 eclipses, types all 221 correctly, and its times of greatest eclipse have a mean error of 0.36 min and a worst error of 1.11 min 1 2.
- A precise search is a minimum-distance search. Ephemeris-based enumerators locate each new moon, then minimise the distance from Earth's centre to the Sun-Moon line, and test that distance against the penumbral radius plus an Earth radius. Astronomy Engine and the Swiss Ephemeris both do exactly this, with different constants 3 4.
- The Five Millennium Catalogue, NASA/TP-2009-214174, used VSOP87D and a truncated ELP-2000/82. Terms below 0.0005 arcseconds and 1 m were dropped, which costs about 1/40 s in eclipse phase times. The Moon's secular acceleration was arcseconds per century squared from Chapront et al. 2002. Two lunar radii were used: for penumbral contacts and for umbral and antumbral ones 5.
- dominates the error budget. The canon states that 240 s of moves a path 1° in longitude, that the lunar ephemeris error is below map resolution even at , and that the standard error in exceeds 265 s before +0001 and after +2300 6.
- Saros numbers follow van den Bergh and can be computed from the lunation number. Kluepfel's 1985 algorithm reproduces the Saros number of all 11,898 catalogue eclipses. Odd series sit at the ascending node, even at the descending node 7 5.
- Eclipse counts. 11,898 solar eclipses in to : 4,200 partial, 3,956 annular, 3,173 total, 569 hybrid. Per century the count runs from 222 to 255 with a mean of 238.0 5.
The question. Given a start year and an end year, how does a program produce the complete, correctly typed list of solar eclipses, and how did the reference catalogue that everyone checks against do it? This note answers with the formulas and constants, the canon's own statement of its method and accuracy, and the numbering rules for SarosSarosAn eclipse cycle of 223 synodic months, about 6585.32 days or 18 years 11 days 8 hours, after which the Sun, Moon and node return to nearly the same relative geometry. Eclipses one Saros apart belong to the same Saros series. and InexInexAn eclipse cycle of 358 synodic months, about 10,571.95 days or 29 years less 20 days, equal to 388.5 draconic months, so successive Inex eclipses occur at opposite nodes. Inex series last about 225 centuries. series. Type boundaries are detailed in Types and classification and the downloadable products in Canons and data products.
Three ways to enumerate
- Meeus's approximate method uses closed-form series for the mean new moon and for two shadow quantities, and . It needs no ephemeris 1.
- An ephemeris search iterates over new moons, finds the instant of minimum distance between the geocentre and the shadow axis, and classifies from the umbral radius at the geoid. Astronomy Engine, the Swiss Ephemeris and the open Skyfield pull request all follow this shape 3 4 8.
- A full Besselian computation derives the Besselian elementsBesselian elementsThe time-dependent quantities , , , , , and the constants , that describe the Moon's shadow relative to the fundamental plane, from which any eclipse circumstance can be computed. for each candidate and reads , magnitude, path width and duration from them. This is what Espenak and Meeus did for the NASA canoncanon of eclipsesA publication listing every eclipse over a long span with elements or maps for each, such as Oppolzer 1887, Mucke and Meeus 1983 and the NASA Five Millennium Canon of 2006. and catalogue 5.
Approach 1 decides whether and which type. Approach 3 is needed for every quantity a catalogue lists.
Meeus's approximate method
The method is Chapter 52 in the 1991 first edition and Chapter 54 in the 1998 second edition of Astronomical Algorithms. The text below quotes the 1991 edition, which was read in full. The second-edition coefficients were read from a tested MIT-licensed port and from a worked example, and differ only in the polynomial constants for the mean new moon and 1 9 10.
Step 1: mean new moon and the argument of latitude
Let be an integer for a new moon, with at the new moon of 2000 January 6. An approximate for a decimal year is . With in Julian centuries from J2000.0, the second edition gives the instant of mean conjunction as
and the Moon's mean argument of latitudeargument of latitudeThe angle of the Moon along its orbit measured from the ascending node. A solar eclipse requires the new moon to occur with near 0 or 180 degrees, which Meeus tests with . as
The other angles are the Sun's mean anomaly , the Moon's mean anomaly , the longitude of the ascending node , and the eccentricity factor 9 10.
Step 2: the eclipse-possibility test
Meeus 1991 states the rule in three tiers. "If differs from the nearest multiple of 180° by less than 13°.9, then there is certainly an eclipse; if the difference is larger than 21°.0, there is no eclipse; between these two values, the eclipse is uncertain at this stage and the case must be examined further. Use can be made of the following rule: there is no eclipse if ." He adds that "after one lunation, increases by 30°.6705" and that near 0° or 360° means the ascending node, near 180° the descending node 1.
The number 0.36 is , so the single inequality carries the whole test. A program can therefore loop over , evaluate , and discard a lunation with one sine.
Step 3: time of greatest eclipse
Compute and . Then add to the mean-conjunction JDE the sum of the following terms in days 1:
For lunar eclipses the first two coefficients become and . Meeus states the accuracy: "For the 221 solar eclipses of the years A.D. 1951 to 2050, the method gives a mean error of 0.36 minute, and a greatest error of 1.1 minute in the times of maximum eclipse." He warns that "this algorithm should not be used, of course, if high accuracy is needed" 1.
Step 4: gamma and the umbral radius
Meeus defines the symbols: " represents the least distance from the axis of the Moon's shadow to the center of the Earth, in units of the equatorial radius of the Earth. The quantity is positive or negative, depending upon the axis of the shadow passing north or south of the Earth's center." And " denotes the radius of the Moon's umbral cone in the fundamental planefundamental planeThe plane through the Earth's centre perpendicular to the axis of the Moon's shadow. Its x axis lies in the equator pointing east, its y axis points north, and the shadow's cross-section on it is an exact circle., again in units of the Earth's equatorial radius." The penumbral radius in that plane is 1.
Step 5: classification
The rules, quoted from Meeus 1991 and reproduced verbatim in the Go port 1 9:
- "When is between +0.9972 and −0.9972, the solar eclipse is central: there exists a line of central eclipse on the Earth's surface."
- "If is between 0.9972 and 1.5433 + u, the eclipse is not central. In most cases, it is then a partial eclipse. However, when is between 0.9972 and 1.0260, a part of the umbral cone may touch the surface of the Earth (within the polar regions), while the axis of the cone does not touch the Earth. These non-central total or annular eclipses occur when ."
- "If , no eclipse is visible from the Earth's surface."
- For a central eclipse: "if , the eclipse is total; if , the eclipse is annular; if is between 0 and +0.0047, the eclipse is either annular or annular-total." The ambiguity is removed by : "if , the eclipse is annular-total; otherwise it is an annular one."
- For a partial eclipse the greatest magnitude on Earth is equation (52.2), .
The constant 0.9972 is the polar flattening of the Earth's cross-section seen from the shadow axis, 1.5433 is , and 0.5461 is the difference between penumbral and umbral radii in the fundamental plane for a mean lunar distance. Meeus 1991 lists the seven non-centralnon-central eclipseAn annular or total eclipse in which the shadow axis misses the Earth while one edge of the umbra or antumbra grazes the polar region, producing a track with one limit and no central line. eclipses of 1950 to 2100: 1950 Mar 18, 1957 Apr 30, 2014 Apr 29 and 2043 Oct 03 annular, 1957 Oct 23, 1967 Nov 02 and 2043 Apr 09 total. The NASA catalogue gives the same seven dates as its examples 1 5.
A check against the catalogue
The method above was implemented in about sixty lines of Python from the constants quoted here, run for from to , and matched by time against the NASA ASCII catalogue for 1951 to 2050. Result: 221 eclipses found, 221 in the catalogue, no missing and no spurious event, zero type disagreements including the six hybridshybrid eclipseAn eclipse whose central path is total along some sections and annular along others because the umbral vertex lies close to the Earth's surface. Also called annular-total. Most begin and end annular with a total middle. and the non-central cases, mean absolute time difference 0.36 min with a maximum of 1.11 min, and mean absolute difference in of 0.0006 with a maximum of 0.0026 1 2. Meeus's accuracy statement is reproduced exactly, and 0.0026 in is small against the 0.0288 gap between 0.9972 and 1.0260.
The precise method: ephemeris search
The precise method replaces the series with an ephemeris and the thresholds with geometry. The logic is the same: find the new moon, find the instant when the shadow axis is nearest the geocentre, compare that distance with the shadow radii.
Astronomy Engine
Astronomy_SearchGlobalSolarEclipse in the C source loops over at most twelve consecutive new moons from Astronomy_SearchMoonPhase(0.0, ...). It prunes with const double PruneLatitude = 1.8; /* Moon's ecliptic latitude beyond which eclipse is impossible */. For a surviving new moon PeakMoonShadow minimises the perpendicular distance shadow.r in kilometres from the Earth's centre to the Sun-Moon line, and the eclipse test is if (shadow.r < shadow.p + EARTH_MEAN_RADIUS_KM) with EARTH_MEAN_RADIUS_KM 6371.0. CalcShadow gives the umbral radius shadow.k = +SUN_RADIUS_KM - (1.0 + shadow.u)*(SUN_RADIUS_KM - body_radius_km) and the penumbral radius shadow.p = -SUN_RADIUS_KM + (1.0 + shadow.u)*(SUN_RADIUS_KM + body_radius_km), where shadow.u is the fraction of the Sun-Moon distance beyond the Moon at which the closest point lies. The Moon's radius is MOON_MEAN_RADIUS_KM 1737.4 for the search and MOON_POLAR_RADIUS_KM 1736.0 at the geoid intersection. The type is #define EclipseKindFromUmbra(k) (((k) > 0.014) ? ECLIPSE_TOTAL : ECLIPSE_ANNULAR), with the comment "HACK: I added a tiny bias (14 meters) to match Espenak test data." If the axis misses the oblate geoid the event is partial. The library claims ±1 arcmin and uses truncated VSOP87 3.
Two consequences. Astronomy Engine has no hybrid class, since the type is the umbral radius at the one point where the axis meets the geoid at greatest eclipsegreatest eclipseThe instant when the shadow axis passes closest to the Earth's centre, at which is defined and the catalogued circumstances are quoted.. And it has no non-central class, so an eclipse whose axis misses the geoid is partial even when the umbra grazes the polar cap.
Swiss Ephemeris
swe_sol_eclipse_when_glob in swecl.c begins from a lunation index K = (int)((tjd_start - J2000) / 365.2425 * 12.3685), then refines the time of maximum by bracketing the quantity dc = acos(dot(sun_unit, moon_unit)) - (rmoon + rsun) with step dt starting at 1 day (5 days outside JD 2000000 to 2500000) and dividing by 4 until dt < 0.0001 day, calling find_maximum at each level 4. Classification happens in eclipse_where. With de = 6378140.0 / AUNIT, s0 = -dot_prod(rm, e) the Moon's distance from the fundamental plane, r0 = sqrt(dm*dm - s0*s0) the distance of the shadow axis from the geocentre, d0 = (s0/dsm*(drad*2 - dmoon) - dmoon)/cosf1 the umbral diameter on the fundamental plane and D0 the penumbral diameter, the tests are:
if (de * cosf1 >= r0) retc |= SE_ECL_CENTRAL;
else if (r0 <= de * cosf1 + fabs(d0)/2) retc |= SE_ECL_NONCENTRAL;
else if (r0 <= de * cosf2 + D0/2) retc |= (SE_ECL_PARTIAL | SE_ECL_NONCENTRAL);
else /* no solar eclipse */
Hybrids are found afterwards: the umbral core diameter is evaluated at maximum and at both ends of the central line, and "if (dc[0]dc[1] < 0 || dc[0]dc[2] < 0)" the flag becomes SE_ECL_ANNULAR_TOTAL, with the comment "the maximum is always total, and there is either one or two times before and after, when the core shadow becomes zero and totality changes into annularity or vice versa." The constants are DSUN (1392000000.0 / AUNIT), DMOON (3476300.0 / AUNIT) and DEARTH (6378140.0 * 2 / AUNIT), so the Moon's radius is 1738.15 km, or in units of the 6378.14 km equatorial radius 4. The documentation lists the return bits SE_ECL_CENTRAL, SE_ECL_NONCENTRAL, SE_ECL_TOTAL, SE_ECL_ANNULAR, SE_ECL_PARTIAL, SE_ECL_ANNULAR_TOTAL and a ten-element tret[] with maximum, local noon, begin, end, totality begin and end, central-line begin and end, and two unimplemented annular-total transition slots. Times in and out are UT 11.
Skyfield
Skyfield's almanac has skyfield.eclipselib.lunar_eclipses(t0, t1, eph) and no solar equivalent, only oppositions_conjunctions plus find_discrete for new moons 12. Pull request 1076, prompted by issue 1078 of May 2025, adds a routine that "looks for minimum" of the Earth-Sun to Earth-Moon angle and tests the penumbra, umbra and antumbra against Earth. The author reports "the agreement of routine results with the official data for the last ~400 years is rather good", with misidentifications for "eclipses that last 0 seconds" and "low magnitude partial eclipses" where the choice of polar versus equatorial Earth radius decides. The pull request was still open when read 8 13.
From enumeration to Besselian elements
Once a lunation passes the test, a precise product computes the Besselian elements and takes as the minimum of over the eclipse, signed by at that instant. The catalogue defines the instant: "The instant of greatest eclipse occurs when the distance between the axis of the Moon's shadow cone and the center of Earth reaches a minimum" 5. The Swiss Ephemeris r0 and Astronomy Engine's shadow.r are that distance in kilometres. Every catalogued quantity and its derivation from the elements is in Types and classification.
How Espenak and Meeus built the Five Millennium Canon
NASA/TP-2006-214141 is the canon of maps, NASA/TP-2009-214174 is the revised catalogue of tables. Both were read from the PDFs. The catalogue's Section 1 carries the method statement and is quoted here 6 5.
Ephemerides
"The coordinates of the Sun used in these eclipse predictions have been calculated on the basis of the VSOP87 theory constructed by Bretagnon and Francou (1988) ... The complete set of periodic terms of version D of VSOP87 (this version provides the positions referred to the mean equinox of the date) were used." For the Moon, "use has been made of the theory ELP-2000/82 of Chapront-Touzé and Chapront (1983) ... The computer program used in the eclipse predictions neglects all periodic terms with coefficients smaller than 0.0005 arcsec in longitude and latitude, and smaller than 1 m in distance." The truncation error is "about 0.0006 s of time in right ascension, and about 0.006 arcsec in declination. The corresponding error in the calculated times of the phases of a solar eclipse is of the order of 1/40 s, which is considerably smaller than the uncertainties in predicted values of ΔT, and also much smaller than the error due to neglecting the irregularities (mountains and valleys) at the lunar limb" 5.
"Improved expressions for the mean arguments L, D, M, M′, and F have been taken from Chapront, Chapront-Touzé, and Francou (2002)", bringing the secular accelerationsecular acceleration of the MoonThe tidal acceleration of the Moon's mean motion, about −25.8 arcseconds per century squared. Every lunar ephemeris embeds a value of it, and ΔT values derived from historical eclipses depend on which value was assumed. of the Moon's longitude, arcseconds per century squared, "into good agreement with Lunar Laser Ranging (LLR) observations from 1972 to 2001." The almanac offices' centre-of-figure correction, "typically +0.50 arcsec in longitude and −0.25 arcsec in latitude", was not applied: "The authors have chosen to ignore this convention and have performed all calculations using the Moon's center of mass position" 5.
Lunar radius
Section 1.5 explains the two kk (lunar radius ratio)The Moon's radius divided by the Earth's equatorial radius. The IAU 1982 mean is 0.2725076; Espenak uses 0.272281 for umbral contacts because it matches the deepest limb valleys and observed totality durations, and the Five Millennium Canon used 0.2724880 for penumbral contacts. values. "From 1968 to 1980, the Nautical Almanac Office used two separate values for k in their predictions. The larger value (k=0.2724880), representing a mean over topographic features, was used for all penumbral (exterior) contacts and for annular eclipses. A smaller value (k=0.272281), representing a mean minimum radius, was reserved exclusively for umbral (interior) contact calculations of total eclipses." The IAU 1982 value "guarantees that some annular or hybrid eclipses will be misidentified as total. A case in point is the eclipse of 1986 Oct 03", listed in the Astronomical Almanac for 1986 as total for 3 s "when it was, in fact, a beaded annular eclipse." The choice: "The larger value (k=0.2724880) is utilized for all partial (penumbral) eclipses. ... the smaller value (k=0.272281) is used for all umbral and antumbral eclipses (total, annular, and hybrid)", giving shorter, narrower total paths and longer, wider annular paths than the IAU value 5.
ΔT
The ΔT models and their uncertainties are the subject of ΔT and Earth rotation. This section keeps only the choices the catalogue itself made and states. The ΔTΔTThe difference TT − UT1 between uniform Terrestrial Time, in which the elements are computed, and Universal Time, which follows the Earth's irregular rotation. About 69 s in 2024. It converts the hour angle μ to a geographic longitude, is known only by prediction for future eclipses, and is the largest error source for historical ones. model has three regimes. Before 1950, "empirical fits to historical records derived by Morrison and Stephenson (2004)", whose cubic-spline table from to is reproduced with standard errors from 430 s at down to below 1 s after 1800. From 1955 to 2005, the observed values from the Astronomical Almanac for 2006, page K9. For the future, extrapolation "weighted by the long period trend from tidal braking of the Moon", giving estimates of +67 s in 2010, +93 s in 2050, +203 s in 2100 and +442 s in 2200 5 14.
Outside the observed span the long-term parabola is s with . Section 2.7 gives twelve polynomials in the decimal year that cover to . Two examples: between and , with , , and between 2005 and 2050, with , . The full set is on NASA's polynomial page and in the catalogue 15 5.
The acceleration mismatch is corrected explicitly. "All values of ΔT, based on Morrison and Stephenson (2004), assume a value for the Moon's secular acceleration of −26 arcsec/cy². However, the ELP-2000/82 lunar ephemeris employed in the Catalog uses a slightly different value of −25.858 arcsec/cy². Thus, a small correction "c" must be added":
The correction is s at , s at 0 and s at , and is zero for 1955 to 2005 because those values are independent of any lunar ephemeris 5.
The canon's own accuracy statement
Section 1.6 of the canon: "the lunar ephemeris is accurate to better than an arcsecond within several centuries of the present. Even for eclipses occurring in the year −1999 (2000 BCE), the Moon's position is correct to within a small fraction of a degree. Such positional discrepancies correspond to errors in predicted eclipse paths that are below the resolution threshold of the maps." Then: "A far greater source of error in the geographic position of eclipse paths is due to the uncertainty in ΔT. ... Because 1° in longitude corresponds to 4 min of time, a ΔT value of 240 s would shift the eclipse path 1° east of its TD position." Maps whose standard error exceeds 265 s, which is 1.1° of longitude, carry a "reference gore" of two dashed meridians at : "The years prior to +0001 and after +2300 have uncertainties of this magnitude or greater." The worked example is the total eclipse of Oct 04 at 23:24 TD with s and s, so the map may be rotated 6.
The standard error model is Morrison and Stephenson's s with , valid to , giving 636 s at , 265 s at 0 and 31 s at . Outside that span the catalogue uses Huber's Brownian-drift model, s with years from the calibration year ( for the past, 2005 for the future), years and ms²/yr, giving 6,094 s at and 20,717 s at 5 16.
Stephenson, Morrison and Hohenkerk 2016 later revised the analysis: the length of day "increases at an average rate of +1.8 ms per century. This is significantly less than the rate predicted on the basis of tidal friction, which is +2.3 ms per century", with a long-term parabola s, "some indication of an oscillation in the lod with a period of roughly 1500 years", and the lunar acceleration implicit in JPL DE430 given as arcseconds per century squared. Their method for untimed records: "a report that an eclipse was total or near-total at a known place fixes the rotational frame of the Earth" 17. The NASA catalogue predates this and uses the 2004 splines and the parabola. A modern product should state which it adopts.
Eclipse counts
The catalogue counts 11,898 solar eclipses in to : 4,200 partial (35.3%), 3,956 annular (33.2%), 3,173 total (26.7%) and 569 hybrid (4.8%). Per century "the number of eclipses in any one century ranges from 222 to 255 with an average of 238.0", with a cycle "a little under six centuries" long, and the 20th and 21st centuries are poor with 228 and 224 eclipses. Two eclipses fall in 72.5% of calendar years, three in 17.5%, four in 9.5% and five in 0.5% 5 18. Parsing the ASCII catalogue gives, for 1901 to 2000, 78 partial, 73 annular, 71 total and 6 hybrid, and for 2001 to 2100, 77 partial, 72 annular, 68 total and 7 hybrid 2.
Saros, Inex and series numbering
The periods
The catalogue gives the 2000 CE values: synodic month 29.530589 d, anomalistic month 27.554550 d, draconic month 27.212221 d. "One Saros is equal to 223 synodic months, however, 239 anomalistic months and 242 draconic months are also equal (within a few hours) to this same period": 223 synodic months = 6585.3223 d, 239 anomalistic = 6585.5375 d, 242 draconic = 6585.3575 d. The Inex is 358 synodic months = 10,571.9509 d against 388.5 draconic months = 10,571.9479 d, so consecutive Inex eclipses fall at opposite nodes. The node shifts 0.48° per Saros and 0.04° per Inex, which is why "a Saros series lasts 12 to 15 centuries, an Inex series typically lasts 225 centuries and contains about 780 eclipses". A Saros series "may last 1,226 to 1,551 years and is composed of 69 to 87 eclipses, of which 39 to 59 are umbral/antumbral". In 2008 there were 39 active series numbered 117 to 155 5 19. Three Saros make an ExeligmosExeligmosThree Saros periods, 669 synodic months or about 54 years 33 days, after which an eclipse path returns to roughly the same longitudes because the one-third day remainder of the Saros has accumulated to a whole day. of 669 lunations, after which a path returns to nearly the same longitudes. Each eclipse seasoneclipse seasonThe roughly 34.5-day interval, twice a year, during which the Sun is within about 17 degrees of a lunar node so that any new moon produces a solar eclipse. Successive seasons are 173.3 days apart. lasts about 34.5 days and seasons recur every 173.3 days, with the Sun within 15.39° to 18.59° of a node at every solar eclipse 20.
Numbering
"The numbering system used for the Saros series was introduced by van den Bergh in his book Periodicity and Variation of Solar (and Lunar) Eclipses (1955). He assigned the number 1 to a pair of solar and lunar eclipse series that were in progress during the second millennium BCE based on an extrapolation from von Oppolzer's Canon der Finsternisse (1887)." The node rule: "The eclipses with an odd Saros number take place at the ascending node of the Moon's orbit; those with an even Saros number take place at the descending node." Gamma changes monotonically through a series, decreasing for odd and increasing for even series, with rare reversals near perihelion when Earth's eccentricity was larger, the extreme case being Saros 0 5 21.
How a catalogue assigns the Saros number
Two methods are documented. The first is incremental: given the Saros number of one eclipse, the next eclipse 1 lunation later has , 5 lunations later , and 6 lunations later . The catalogue's Table 5-10 also lists 135 lunations (Tritos) , 235 (Metonic) , 358 (Inex) and 669 (Exeligmos) , attributing the relationships to Meeus, Grosjean and Vanderleen 1966 5.
The second is closed-form. Van Gent's catalogue of eclipse cycles states: "The Saros series number SNS of a solar eclipse (introduced by George van den Bergh in the 1950's) can be derived from the lunation numberlunation numberThe count of synodic months since the new moon of 2000 January 6, negative before it. The Brown Lunation Number equals it plus 953. It indexes the mean new moon in Meeus's method and feeds the closed-form Saros number. LN with the following algorithm first given by Charles Kluepfel (1985):"
with "LN = Lunation number (0 on 6 January 2000)" and "LN = Brown Lunation Number − 953" 7. The formula was run on all 11,898 rows of the NASA ASCII catalogue using its lunation column: it reproduced the Saros column in every case modulo 223. The modulus is needed because the catalogue's Saros numbers run from to while the formula returns 1 to 223 2. Since 223 and 358 are coprime, "any integer number of lunations (k) can thus be expressed as a combination of inex and saros cycles: k = m I + n S" 7.
The Saros-Inex panorama
Van den Bergh "placed all 8,000 solar eclipses in von Oppolzer's Canon der Finsternisse (1887) into a large two-dimensional matrix. Each Saros series was arranged as a separate column containing every eclipse in chronological order. The individual Saros columns were then staggered so that the horizontal rows each corresponded to different Inex series." In this panoramaSaros-Inex panoramaVan den Bergh's two-dimensional arrangement of all eclipses with Saros series as columns and Inex series as rows, so that any interval between eclipses is an integer combination of Saros and Inex periods. one step down is one Saros, one step right is one Inex, and any interval between two solar eclipses is days with , and integers . He used it to extend Oppolzer's canon back from to by arithmetic alone 5. NASA hosts a modern panorama by Luca Quaglia and John Tilley, "a Microsoft Excel file" that "shows 61775 solar eclipses from −11000 to +15000 organised by Saros and Inex Series" in 911 Saros columns computed with the Solex integrator 22. The 5000-year catalogue contains eclipses from 204 Saros series, 121 of them complete 5.
Sources compared
| Source | Period | Ephemeris | ΔT | Lunar radius | What only it gives |
|---|---|---|---|---|---|
| Meeus AA ch. 52, 1991 edition 1 | any | none, series | none, JDE only | implicit in | Closed-form , , type, partial magnitude with 0.9972, 1.5433, 0.0047, 0.00464 |
| Espenak and Meeus canon and catalogue 5 | to | VSOP87D, ELP-2000/82 truncated, | M&S 2004 splines, polynomials, , correction | 0.2724880 and 0.272281 | Standard-error gores, statistics, Saros tables, published Besselian elements |
| Astronomy Engine 3 | any | truncated VSOP87 | internal | 1737.4 km, 1736.0 km at geoid | Total or annular by 14 m umbra bias, no hybrid or non-central class |
| Swiss Ephemeris 4 | any | DE or Moshier | internal, user-settable | 1738.15 km | Central, non-central, hybrid by sign change of core diameter, UT in and out |
| Skyfield 12 | any | any SPK | IERS tables | not applicable | Lunar eclipses only, solar routine in open PR 1076 |
| Van Gent cycles 7 | not applicable | not applicable | not applicable | not applicable | Kluepfel closed-form Saros number from lunation number |
| Stephenson et al. 2016 17 | to | DE430 | new splines, | not applicable | Current ΔT and lod trend, 1.8 versus 2.3 ms/cy |
What a developer should do
- Enumerate with Meeus's series first. Implement Steps 1 to 5 as quoted, test against the 221 eclipses of 1951 to 2050 in the NASA ASCII catalogue, and expect zero type disagreements and a maximum time error near 1.1 min 1 2.
- For each candidate, compute Besselian elements from a modern ephemeris and take from the minimum of . Keep the series value only as a sanity check within 0.003.
- State . The canon's pair, 0.2724880 penumbral and 0.272281 umbral and antumbral, is the only choice that reproduces its types and durations 5.
- Choose a model and print its standard error with every eclipse before +0001 or after +2300. Use NASA's polynomials and correction to match the catalogue, or Stephenson 2016 for the best current estimate, and say which 15 17.
- Compute Saros numbers with Kluepfel's formula from the lunation number, subtracting 223 where needed to land in the catalogue's range 7.
- Read first: catalogue Sections 1.3 to 1.5 and 2.6 to 2.8 5, canon Section 1.6 6, Meeus 1991 Chapter 52 1, and
swecl.clines 640 to 780 and 1185 to 1450 4.
What this changes
The enumeration stage is solved and cheap, so the pipeline design should not spend effort on it beyond a Meeus pre-filter feeding a Besselian stage. Two things do change. First, the choice must be fixed before the final type is assigned, because it decides the type of near-hybrid events and not just their durations. The enumeration stage itself carries only a provisional Meeus type, and the decision is made in the Besselian stage, as set out in Types and classification. Second, the accuracy statement of any product covering years before +0001 or after +2300 must be a standard error, not an ephemeris error, because the canon shows the ephemeris contribution is below map resolution and the contribution reaches tens of degrees of longitude.
Open questions
- Obtain Meeus, Elements of Solar Eclipses 1951-2200 (Willmann-Bell 1989), for the formulas Espenak and Meeus used to derive path width and central duration from the Besselian elements. Only the catalogue's definitions were read.
- Obtain the 2020 addendum to Stephenson, Morrison and Hohenkerk (Proc. R. Soc. A 477, 20200776) to see whether the 1.8 ms/cy rate and the parabola were revised.
- Obtain the source of the NASA Besselian-element generator. The CSV headers show the columns
PNS,UNS,NCN,nSer,nSeq,nJLEwhose meaning is not documented on the site 23. - Obtain Kluepfel's 1985 note, cited by van Gent, to confirm the origin of the constants 105, 136, 38 and 61 in the Saros formula 7.
- Obtain the Swiss Ephemeris
swe_deltatsource to record which model it applies by default in 2026, since the documentation read did not state it 11.
References
- 1trade Meeus J. (1991) Astronomical Algorithms, first edition, Willmann-Bell, Chapter 52 Eclipses Read from the Internet Archive OCR text (chapter 52 in the 1991 edition, chapter 54 in the 1998 edition). Source of the |sin F| > 0.36 rule, the corrections to the time of maximum, P, Q, W, gamma, u, the thresholds 0.9972, 1.0260, 1.5433, 0.0047, 0.00464, the partial-magnitude formula and the stated accuracy of 0.36 min mean and 1.1 min maximum for 1951 to 2050. Graded trade as a recognised practitioner's own algorithm text.
- 2primary NASA GSFC, Five Millennium Catalog of Solar Eclipses, ASCII table 5MKSEcatalog.txt (2008 Oct 07) Downloaded (1.38 MB, 11,908 lines) and parsed: all 11,898 rows, type counts 4200/3956/3173/569, type-code tallies, per-century counts, gamma ranges per class, and the Kluepfel Saros formula and the Meeus chapter 54 method were verified against it.
- 3company Cross D., Astronomy Engine, source file source/c/astronomy.c (MIT) Source read in full via the GitHub API (13,061 lines). Quoted functions: CalcShadow, Astronomy_SearchGlobalSolarEclipse, GeoidIntersect, EclipseKindFromUmbra with the 0.014 km bias, PruneLatitude 1.8 degrees, constants EARTH_MEAN_RADIUS_KM 6371.0, MOON_MEAN_RADIUS_KM 1737.4, MOON_POLAR_RADIUS_KM 1736.0. README read for the accuracy claim and VSOP87 statement.
- 4company Astrodienst, Swiss Ephemeris source swecl.c (AGPL or commercial) Source read via the GitHub API (6,428 lines). Quoted: constants DSUN, DMOON, DEARTH, the eclipse_where central and non-central tests, the K lunation seed, the dt bracketing search, and the annular-total detection by sign change of the core diameter.
- 5primary Espenak F., Meeus J. (2009) Five Millennium Catalog of Solar Eclipses: -1999 to +3000 (Revised), NASA/TP-2009-214174 Read in full as PDF text (20,579 lines). The main method source: column definitions (1.2), VSOP87D and truncated ELP-2000/82 (1.3), n-dot -25.858 and correction c (1.4), k = 0.2724880 and 0.272281 (1.5), Delta T polynomials (2.7), uncertainty (2.8), statistics (3), Saros and Inex (5).
- 6primary Espenak F., Meeus J. (2006) Five Millennium Canon of Solar Eclipses: -1999 to +3000, NASA/TP-2006-214141 Read in full as PDF text (2,625 lines). Sections 1.3 to 1.6 give ephemerides, secular acceleration, k values and the map-accuracy statement with the reference-gore example for -1996 Oct 04. Note the Text10 link on the NASA publication page returns 404, Text11 is the live file.
- 7trade van Gent R. H., A Catalogue of Eclipse Cycles, list of eclipse cycles Read live 2026-09-15 via curl and text extraction. Source of the Kluepfel 1985 algorithm for the Saros number from the lunation number, the lunation-number offsets (Brown -953), the odd/even node rule, series lengths 1226 to 1550 years, and the k = m I + n S statement. Verified against all 11,898 NASA rows.
- 8unsourced python-skyfield pull request 1076, Add routine and test for the solar eclipse calculation Read live 2026-09-15. Open at the time of reading. Method mirrors the lunar routine with a minimum search; author notes misidentifications for zero-duration and marginal partial eclipses.
- 9company Keys S., meeus/v3/eclipse/eclipse.go, Go implementation of Astronomical Algorithms chapter 54 (MIT) Read in full via the GitHub API. Reproduces the second-edition coefficients for F, M, M', Omega, E, the 16-term time correction, P, Q, gamma, u and the classification switch verbatim from the book; used as the source for the second-edition polynomial constants.
- 10unsourced Still J., Calculate Future Solar Eclipses (C# walkthrough of Meeus chapter 54) Read live 2026-09-15. Blog post giving the second-edition mean new moon JDE and F expressions and the classification thresholds; used only to cross-check constants also present in the Go port.
- 11company Astrodienst, Swiss Ephemeris Programming Interface, section on swe_sol_eclipse_when_glob and swe_sol_eclipse_where Read live 2026-09-15. Function signature, ifltype bits, tret[] slots, UT convention, attr[] contents; the Delta T model in use is not stated in the section read.
- 12company Rhodes B., Skyfield almanac documentation Read live 2026-09-15. Confirms lunar_eclipses is the only eclipse function and that oppositions_conjunctions plus find_discrete locate new moons.
- 13unsourced python-skyfield issue 1078, Solar Eclipse calculation routine (May 2025) Read live 2026-09-15 with a partial page load. Describes the penumbra, umbra, antumbra test and claims near-perfect agreement with published sources.
- 14peer-reviewed Morrison L. V., Stephenson F. R. (2004) Historical values of the Earth's clock error Delta T and the calculation of eclipses, J. Hist. Astron. 35, 327-336 Not read directly (ADS returned 405). Its Delta T spline table, standard errors and sigma = 0.8 t^2 rule were read as reproduced in NASA/TP-2009-214174 Sections 2.6 and 2.8 and on the NASA deltat2004 page.
- 15primary NASA GSFC, Polynomial Expressions for Delta T (2004 model used by the Five Millennium Canon) Read live 2026-09-15. Twelve polynomials from -1999 to +3000, the -26 arcsec/cy^2 assumption and the correction c = -0.000012932 (y-1955)^2.
- 16primary NASA GSFC, Uncertainty in Delta T Read live 2026-09-15. sigma = 0.8 t^2 for -1000 to +1200, Huber's formula with Q = 0.058 ms^2/yr and M = 2500 yr, tables of seconds and degrees of longitude.
- 17peer-reviewed Stephenson F. R., Morrison L. V., Hohenkerk C. Y. (2016) Measurement of the Earth's rotation: 720 BC to AD 2015, Proc. R. Soc. A 472, 20160404 Open-access copy read 2026-09-15. Quoted: +1.8 ms/cy lod trend versus +2.3 ms/cy tidal, the parabola Delta T = -320.0 + 32.5 ((year-1825)/100)^2 s, the roughly 1500-year oscillation, DE430 acceleration -25.82 arcsec/cy^2, the untimed-eclipse method and the cubic spline fit.
- 18primary NASA GSFC, Five Millennium Catalog of Solar Eclipses, web index and statistics page Read live 2026-09-15. Gives the ephemeris statement, the Delta T regimes, type statistics with percentages, central versus non-central counts and eclipses-per-year distribution.
- 19primary NASA GSFC, Eclipses and the Saros Read live 2026-09-15. Saros and Inex lengths, month values, series lifetimes, van den Bergh's matrix.
- 20primary NASA GSFC, Periodicity of Solar Eclipses Read live 2026-09-15. Ecliptic limits 15.39 to 18.59 degrees, 34.5-day eclipse season, 173.3-day node interval, t = a i + b s relation, 39 active series in 2008, 204 series in the catalog.
- 21trade van den Bergh G. (1955) Periodicity and Variation of Solar (and Lunar) Eclipses, Tjeenk Willink, Haarlem Not read. Its numbering scheme and Saros-Inex panorama are described from NASA/TP-2009-214174 Sections 5.6 to 5.8 and van Gent's catalogue.
- 22primary NASA GSFC, Saros-Inex Panorama (Luca Quaglia and John Tilley) Read live 2026-09-15. Excel panorama of 61,775 solar eclipses from -11000 to +15000, 911 Saros columns, computed with Solex.
- 23primary NASA GSFC, Besselian elements for all 11,898 eclipses of the Five Millennium Canon, CSV export Downloaded (5.95 MB, 11,899 lines). Header read: catalog columns plus t0, cubic x and y, quadratic d, mu, l1, l2, tan f1, tan f2, tmin -3 to tmax +3 h, and six undocumented trailing columns PNS, UNS, NCN, nSer, nSeq, nJLE.