How Accurate Our Charts Are
Cosine Astro's charts are calculated by a program from an astronomical ephemeris; the AI only interprets the result. This page shows how accurate that program is: 55 test charts, compared position by position with the Swiss Ephemeris, the calculation engine behind most professional astrology software. The figures below are recalculated every time the site is built.
- Test charts
- 55, 52 with a birth time
- Birth years
- 1900 – 2050
- Birthplaces
- 77.8° S to 78.2° N, 31 time zones
- Largest planet difference
- 20.2″ (limit 1′ = 60″)
Results
The table shows how far each position is from the Swiss Ephemeris in ecliptic longitude. One degree is 60 arcminutes (′), and one arcminute is 60 arcseconds (″). The limit we set ourselves is 1′; the largest figure in the table is 36.3″.
| Position | Compared | Largest difference | Mean difference |
|---|---|---|---|
| Sun | 55 | 1.8″ | 0.5″ |
| Moon | 55 | 9.6″ | 1.3″ |
| Mercury | 55 | 6.7″ | 1.9″ |
| Venus | 55 | 20.2″ | 1.6″ |
| Mars | 55 | 11.2″ | 1.5″ |
| Jupiter | 55 | 9.9″ | 2.6″ |
| Saturn | 55 | 10.9″ | 3.0″ |
| Uranus | 55 | 11.2″ | 4.4″ |
| Neptune | 55 | 18.4″ | 9.0″ |
| Pluto | 55 | 5.0″ | 1.7″ |
| North Node (mean) | 55 | 0.2″ | 0.1″ |
| North Node (true) | 55 | 36.3″ | 11.2″ |
| Ascendant | 52 | 11.9″ | 2.4″ |
| Midheaven | 52 | 11.2″ | 2.4″ |
| Placidus cusps | 564 | 12.7″ | 2.3″ |
Planets and nodes are compared once per chart; the Ascendant and Midheaven only for charts with a birth time; the cusps are all 12 of every chart where Placidus has a solution. The mean and true nodes are two different calculations; “See all the data” on the chart page shows both.
All of these are smaller than the smallest unit the chart shows, 1′. Only when a planet or cusp sits within a few arcseconds of a sign or house boundary could one change a reading. On whether a planet is retrograde, 440 of 440 calls match the Swiss Ephemeris.
How the Comparison Works
The reference values come from Swiss Ephemeris 2.10.03 (Moshier mode), produced by a separate Python script. It converts local time to Universal Time with Python's own time zone library, a separate copy of the time zone data from the one the site uses, so the time zone conversion is checked too.
The test charts run from 1900 to 2050 and include the Southern Hemisphere, western longitudes, places near the equator and inside the polar circles, offsets such as UTC+5:30 and +5:45, historical daylight saving time, and births with no known time.
The comparison is part of the automated tests: it runs again whenever the calculation code changes, and any position more than 1′ off fails the tests. The Swiss Ephemeris is used only to produce the reference numbers; the site contains none of its code.
What the program calculates
Planet positions, retrograde motion, the Ascendant, the Midheaven, house cusps and aspects are all calculated by the program. Planet positions come from the open-source astronomy library astronomy-engine: it finds each body's apparent position as seen from the Earth at the moment of birth, then converts it to ecliptic coordinates of that date.
When you ask the AI a question, our server calculates the chart first and writes the result out as text for the AI. The AI doesn't calculate or change any position; it only interprets the data it is given.
Time Zones and Daylight Saving
You enter the local clock time. The program converts it to Universal Time with each place's historical rules from the IANA time zone database, daylight saving time included. Get the conversion wrong by an hour and the Ascendant moves about 15°, often into another sign.
27 of the test charts fall in daylight saving time, among them China's summer time of 1986–1991, Chongqing in 1941, Taiwan in 1955, 1974 and 1979, Hong Kong in 1965, South Korea in 1988 and Britain's double summer time (UTC+2) in 1944. For 55 of 55 charts, the Universal Time matches the reference to the second.
Houses at high latitudes
Houses use the Placidus system. Above about 66° north or south, Placidus has no mathematical solution at some times of day. The chart then uses whole-sign houses, where the Ascendant's whole sign is the first house, and the chart page says so.
5 of the test charts are inside the polar circles, as far as 78.2° N and 77.8° S. Placidus had no solution for 5 of them, and the Swiss Ephemeris could not compute Placidus for those either. On whether to switch to whole signs, 52 of 52 charts agree with the Swiss Ephemeris.
Much Bigger Than the Calculation Error: Your Birth Time
The Ascendant moves about 1° every 4 minutes on average, or about 15″ a second. At that rate, the largest Ascendant difference in the table, 11.9″, is the same as a birth time 0.8 seconds off.
Yet birth times are often recorded only to the hour, half hour or quarter hour. Four minutes moves the Ascendant about 1°; fifteen minutes about 4°, which can change its sign and moves the house cusps with it. So if your Ascendant or a cusp sits near a boundary, checking the birth time does far more than comparing a few arcseconds between programs.
The same goes for the birthplace. We use the coordinates of the city or district centre; ten kilometres or so within a city shifts the Ascendant by a few arcminutes. That is more than the calculation error, but far less than an inexact birth time.
Other limits
This page compares the planets, nodes, Ascendant, Midheaven and house cusps. Chiron, the four asteroids, Lilith and the other points have tests of their own. True Lilith (the Moon's osculating apogee) magnifies tiny errors in the lunar orbit and can be up to about 12′ from the Swiss Ephemeris.
After 2050, nobody can predict exactly how much the Earth's rotation will speed up or slow down. Programs make different estimates, and by 2100 that alone moves the Moon by about 1′. The further a date is from today, the more programs differ.
Tropical or sidereal zodiac, Placidus or another house system: these choices change the result a great deal, but they are choices between traditions, not calculation errors. We use the tropical zodiac and Placidus.
For Contrast: Asking a Language Model for the Chart
Some apps hand your birth details straight to a large language model and let it “calculate” the chart. On 13 October 2026 we tested this: we gave the birth date, time and city of 10 people to three widely used models (DeepSeek V4.1 Flash, GPT-4o mini, Gemini 2.5 Flash), with no chart data, and asked for the sign and degree of nine placements, the Sun to Saturn plus the Ascendant and Midheaven. That gave 25 scored answers.
| Position | Language models right |
|---|---|
| Sun sign | 25/25 |
| Moon Signs | 1/25 |
| Rising Signs | 15/25 (60%) |
| All nine placements | 124/225 (55%) |
| Within 1°, Sun excluded | 17/200 |
Sun sign dates are nearly the same every year and printed everywhere, so a model can get them right from memory. The Moon changes sign every two and a half days and has to be calculated from the exact moment; the models' Moons were off by 79° on average, nearly three signs. The program's positions, in the comparison above, are within 20.2″ of the Swiss Ephemeris.
The models were called directly through an API, with no web search and no code tool, so this is not the same as the ChatGPT app. But it shows one thing: language models are good at writing, not at working out where the planets are. That is why Cosine Astro has a program calculate the chart and the AI only interpret it. Read the full test
FAQ
Why do other programs give degrees a minute or two different?
Usually the birthplace coordinates differ, one program uses the mean node and the other the true node, or they handle time zones or daylight saving differently. The pure calculation difference between programs is usually a few arcseconds.
Does an error of a few arcseconds change the reading?
Hardly ever. An arcsecond is 1/3600 of a degree, so it can only matter when a planet sits right on the edge of a sign or house. By comparison, 4 minutes of birth time moves the Ascendant about 1°.
Why is the limit 1′?
The chart shows degrees to the arcminute, so a difference under 1′ can't be seen on the page. The actual errors are much smaller than that limit, as the table shows.
Each step of the calculation is described in How We Calculate.