方法

星盘算得有多准

COSINE 余弦的星盘由程序按天文星历计算,AI 只负责解读算好的结果。这一页公开这套程序算得有多准:55 张测试星盘,和专业占星软件普遍使用的瑞士星历表(Swiss Ephemeris)逐项比对。下面的数字在每次更新网站时重新计算。

测试星盘
55 张,其中 52 张有出生时间
出生年份
1900 – 2050 年
出生地分布
南纬 77.8° 到北纬 78.2°,31 个时区
行星最大偏差
20.2″(上限 1′ = 60″)

比对结果

下表是每一项与瑞士星历表的黄经之差。1° 等于 60 角分(′),1 角分等于 60 角秒(″)。我们给自己定的上限是 1′,表里最大的一项是 36.3″。

项目比对次数最大偏差平均偏差
太阳551.8″0.5″
月亮559.6″1.3″
水星556.7″1.9″
金星5520.2″1.6″
火星5511.2″1.5″
木星559.9″2.6″
土星5510.9″3.0″
天王星5511.2″4.4″
海王星5518.4″9.0″
冥王星555.0″1.7″
北交点(平均)550.2″0.1″
北交点(真)5536.3″11.2″
上升点5211.9″2.4″
天顶5211.2″2.4″
Placidus 宫头56412.7″2.3″

行星和交点每张星盘比一次;上升点和天顶只比有出生时间的星盘;宫头是 Placidus 有解的每张星盘各 12 个。平均交点和真交点是两种算法,星图的「查看全部数据」里两种都有。

这些差别都小于星图上显示的最小单位 1′。只有当一颗行星或宫头恰好落在星座、宫位交界的几角秒以内时,它才可能改变判断。逆行与否,440/440 次判断与瑞士星历表一致。

比对怎么做

参考值来自瑞士星历表 2.10.03(Moshier 模式),由一个独立的 Python 程序生成。它用 Python 自带的时区数据把当地时间换算成世界时,和网站使用的时区数据是两套,所以时区换算也一并得到核对。

测试星盘覆盖 1900 到 2050 年,包括南半球、西经、赤道附近、极圈以内,UTC+5:30、+5:45 这类非整点时区,历史上的夏令时,以及出生时间未知的情况。

这组比对是自动化测试的一部分:每次修改计算代码都要重新跑一遍,任何一项超过 1′,测试就不通过。瑞士星历表只用来生成参考数字,网站本身不包含它的代码。

哪些由程序计算

行星位置、逆行、上升点、天顶、宫头和相位,全部由程序计算。行星位置用开源天文计算库 astronomy-engine:求出天体在出生那一刻相对地球的视位置,再换算到当时的黄道坐标。

你向 AI 提问时,服务器先算好星盘,再把结果整理成文字交给 AI。AI 不计算、也不修改任何位置,只解读它拿到的数据。

时区与夏令时

你填写的是当地的钟表时间。程序按 IANA 时区数据库里各地的历史规则换算成世界时,包括历史上的夏令时。换算错一小时,上升点会移动约 15°,往往换一个星座。

测试星盘里有 27 张出生时正值夏令时,例如中国 1986–1991 年的夏令时、1941 年重庆的夏令时、台湾 1955、1974 和 1979 年的夏令时、香港 1965 年、韩国 1988 年,以及英国 1944 年的双重夏令时(UTC+2)。55/55 张星盘换算出的世界时与参考值一致,精确到秒。

宫位与高纬度

宫位用 Placidus 制。在南北纬约 66° 以上,有些时刻 Placidus 在数学上没有解,这时改用整宫制:上升所在的星座整个作为第一宫,星图页面会注明。

测试里有 5 张出生在极圈以内的星盘,最北到北纬 78.2°,最南到南纬 77.8°。Placidus 无解、改用整宫制的有 5 张,瑞士星历表在这几张上同样算不出 Placidus。要不要改用整宫制,52/52 张与瑞士星历表的判断一致。

比计算误差大得多的:出生时间

上升点平均每 4 分钟移动约 1°,也就是每秒约 15″。按这个速度,上表里上升点的最大偏差 11.9″,相当于出生时间差 0.8 秒。

而出生时间往往只记到整点、半点或一刻钟。差 4 分钟,上升点就移动约 1°;差 15 分钟,约 4°,可能换一个星座,宫头也跟着移动。所以上升或宫头落在交界附近时,先核对出生时间,比比较不同软件之间的几角秒有用得多。

出生地也一样:我们用城市或区县中心的坐标。在同一座城市里相差十公里左右,上升点大约差几角分,比计算误差大,但远小于出生时间不准的影响。

其他局限

这一页只比对行星、交点、上升点、天顶和宫头。凯龙星、四颗小行星和莉莉丝等点另有测试;其中真莉莉丝(月球的密切远地点)会放大月球轨道的细小误差,与瑞士星历表最多相差约 12′。

2050 年以后,地球自转会快慢多少没人能准确预测,各家软件的估计不同,到 2100 年月亮的位置会因此相差约 1′。日期离现在越远,软件之间的差别越大。

回归黄道还是恒星黄道、Placidus 还是别的宫位制,会让结果相差很多,但那是流派的选择,不是计算误差。我们用回归黄道和 Placidus。

对照:让语言模型直接给出星盘

有些应用把出生信息直接交给大语言模型,让它「算」出星盘。2026 年 10 月 13 日,我们做过一次测试:把 10 个人的出生日期、时间和城市分别交给三个常用模型(DeepSeek V4.1 Flash、GPT-4o mini、Gemini 2.5 Flash),不给任何星盘数据,请它们写出太阳到土星、上升和天顶九个位置的星座和度数,共 25 份有效回答。

项目语言模型答对
太阳星座25/25
月亮星座1/25
上升星座15/25(60%)
九个位置合计124/225(55%)
太阳以外,误差在 1° 以内17/200

太阳星座的日期每年差不多,到处都写着,模型凭记忆就能答对。月亮每两天半换一个星座,必须按确切的时刻计算,模型的月亮平均错了 79°,将近三个星座。而程序计算的位置,在上面的比对里与瑞士星历表相差不到 20.2″。

测试是通过 API 直接调用模型,没有联网搜索,也没有代码工具,所以不等于 ChatGPT 应用本身的表现。但它说明了一件事:语言模型擅长写字,不擅长算天体位置。这就是 COSINE 余弦让程序算盘、让 AI 只做解读的原因。 测试全文(英文)

常见问题

为什么别的软件算出的度数和这里差一两分?

常见的原因是出生地坐标不同、交点用的是平均还是真交点、时区或夏令时处理不同。软件之间纯计算上的差别通常只有几角秒。

几角秒的误差会影响解读吗?

几乎不会。1 角秒是 1° 的三千六百分之一,只有行星恰好落在星座或宫位交界处时才可能有影响。相比之下,出生时间差 4 分钟,上升点就移动约 1°。

上限为什么定在 1′?

星图上的度数显示到 1′,所以 1′ 以内的差别在页面上看不出来。实际误差比这个上限小得多,见上表。

计算的每一步写在「我们怎么算的」。