16c62a97d5
- 新增时标、ΔT 模型、质心时间与 UT1 支持 - 改进日月食、月掩、行星事件及路径边界计算 - 完善恒星三维自行与动态距离传播 - 扩展 SVG、GeoJSON、KML 输出与底层距离换算工具 - 整理中英文手册、示例资源及回归测试
6.6 KiB
6.6 KiB
精度与性能
下表说明内置模型及已有样本的对照结果。样本最大误差不代表所有日期、地点的误差上限。与外部星历比较时,需要先统一时标、参考系、观测点高度和折射模型。
UTC、UT1 与 TT 的换算见时标。
目录
太阳与行星
太阳和行星使用内置 VSOP87 解析项,当前表项覆盖 J2000 前后约 4000 年。下表列出相对完整 VSOP87 的截断误差量级:
| 目标 | 黄经/黄纬 | 距离 |
|---|---|---|
| 太阳/地球 | 约 0.1" |
约 0.1 × 10^-6 AU |
| 水星、金星 | 约 0.2" |
约 0.2 × 10^-6 AU |
| 火星 | 约 0.5" |
约 1 × 10^-6 AU |
| 木星 | 约 0.5" |
约 3 × 10^-6 AU |
| 土星 | 约 0.5" |
约 5 × 10^-6 AU |
| 天王星 | 约 1" |
约 20 × 10^-6 AU |
| 海王星 | 约 1" |
约 40 × 10^-6 AU |
这类精度适合常规天文历法、观测辅助、科普展示和个人研究;航天导航、精确掩星预报和严格动力学积分不在该范围内,这类用途通常需要 JPL DE 等专业星历。
月球
月球使用内置的 ELP2000/82 风格截断解析级数,库体积轻,不需要外部星历文件。它适合农历定朔、月相、升落、月食、业余月掩预报和常规位置计算;极高精度月球测距、长期物理天平动和专业掩星超出该范围,这类用途以 JPL 星历或专门月球星历为准。
Lite 轻量链路
lite/sun 和 lite/moon 是独立于 sun / moon 的近似实现。不依赖 VSOP87 或主链的 ELP2000/82 级数,适合 CPU / 内存受限环境。
lite/sun:简化太阳真黄经 / 视黄经公式 + 轻量赤道坐标转换lite/moon:Schlyter 风格月球近似(约 15 个摄动项)+ 轻量站心修正- 升落搜索:固定步长扫描 + 二分,不走主链的高精度章动迭代
- 计算链路零堆分配(0 allocs/op);相对主链,位置与月相等纯求值接口约快
7.5–27.1x,升落接口约0.9–3.5x
能力边界:
| 包 | 位置模型 | 升落搜索 | 主要用途 |
|---|---|---|---|
lite/sun |
简化太阳真/视黄经 + 轻量赤道坐标转换 | 30 分钟步长扫描 + 二分 |
日出日落、太阳高度角、表盘/前端周期刷新 |
lite/moon |
Schlyter / vFPS 月球近似 + 轻量站心修正 | 15 分钟步长扫描 + 二分 |
月出月落、月相、月龄、轻量月球观测辅助 |
与 sun / moon 包的误差(2026 全年,8 个站点;升落每 7 或 15 天取样,月相月龄每 6 小时):
| 能力 | 平均绝对误差 | P95 | 最大绝对误差 | 备注 |
|---|---|---|---|---|
lite/sun 日出 |
0.02 min |
0.04 min |
0.31 min |
样本中无事件存在性分歧 |
lite/sun 日落 |
0.02 min |
0.06 min |
0.35 min |
2 个高纬样本在跨午夜日期归属上有语义差异 |
lite/moon 月出 |
0.28 min |
0.57 min |
1.44 min |
样本中无事件存在性分歧 |
lite/moon 月落 |
0.36 min |
0.86 min |
1.24 min |
1 个高纬样本在“当天是否有月落”上与主链判断不同 |
lite/moon Phase() |
0.00089 |
0.00185 |
0.00243 |
与 moon.Phase 对比的结果 |
lite/moon PhaseAge() |
0.003 d |
0.010 d |
0.014 d |
约平均 4.3 分钟、P95 14.4 分钟、最大 20.2 分钟 |
lite/moon 地心黄经 |
2.41' |
6.82' |
9.91' |
相对主链月球位置 |
lite/moon 地心黄纬 |
0.87' |
1.83' |
2.92' |
相对主链月球位置 |
Go testing.Benchmark 参考值(单机测量,仅供比较;绝对值因机器而异):
| 接口 | 主链 | lite |
加速倍数 | 主链分配 | lite 分配 |
|---|---|---|---|---|---|
Sun ApparentRaDec |
6.031 µs/op |
222.4 ns/op |
27.1x |
0 B/op, 0 allocs/op |
0 B/op, 0 allocs/op |
Sun Altitude |
6.127 µs/op |
672.3 ns/op |
9.1x |
0 B/op, 0 allocs/op |
0 B/op, 0 allocs/op |
Sun RiseTime |
101.874 µs/op |
29.168 µs/op |
3.5x |
0 B/op, 0 allocs/op |
0 B/op, 0 allocs/op |
Moon ApparentRaDec |
16.897 µs/op |
1.070 µs/op |
15.8x |
0 B/op, 0 allocs/op |
0 B/op, 0 allocs/op |
Moon Phase |
15.441 µs/op |
935.6 ns/op |
16.5x |
0 B/op, 0 allocs/op |
0 B/op, 0 allocs/op |
Moon Altitude |
9.714 µs/op |
1.294 µs/op |
7.5x |
0 B/op, 0 allocs/op |
0 B/op, 0 allocs/op |
Moon RiseTime |
121.772 µs/op |
132.312 µs/op |
0.9x |
0 B/op, 0 allocs/op |
0 B/op, 0 allocs/op |
主链与 lite 的差距随场景变化:位置、月相等纯求值接口约 7.5–27.1x;升落接口两边都要做时间搜索,差距缩小到 0.9–3.5x,其中 Moon RiseTime 接近持平。
日月食、物理天平动或高纬边界判定使用主链 sun / moon。
精度校验参考
下面这些函数曾与 JPL Horizons、NASA GSFC 等资料对照,可作为使用时判断结果量级的参考:
- 太阳/行星/月亮视直径:各天体与外部基线的最大差异从
0.000002"到0.194598"不等,月亮因视差和距离变化更敏感 - 太阳物理星历
P/B0/L0:最大差异约0.003349° / 0.003986° / 0.047394° - 行星升/中天/落:已用 JPL Horizons 升中落事件做对比校验;该基线按 1 分钟步长生成,当前结果与 Horizons 事件时间在分钟级上对齐
- 月出/月落:
aero=true按动态标准折射和实时月球视半径计算上缘过地平线。7 个地点、14 个海平面事件相对 JPL Horizons DE441 的平均/最大差异约0.30s / 0.75s - 月出/月落的其他口径:相对固定
-0.8333°的 MET Norway(Skyfield 1.53 + DE440s)约38.77s / 76.22s;相对未公开地平线口径的 IMCCE Miriade 平均约2m13.46s,61°N低仰角样本最大约6m41.82s - 地球近日点/远日点:时刻最大差异约
1m28.84s,距离最大差异约0.000000039837 AU - 月球主链位置:当前算法为 ELP2000/82 风格截断解析级数;在
-2000年四个 JPL/HorizonsJDTT样本上,相对 JPL/Horizons 的最大差异约为黄经219.6"、黄纬25.8"、距离34.3 km - 月球近地点/远地点:时刻最大差异约
15m53.45s,距离最大差异约39.758 km - 月球最大赤纬:时刻最大差异约
2.43s,赤纬最大差异约0.00006431°