Files
astro/doc/manual/accuracy.md
T
b612 16c62a97d5 feat: 完善时标与天象几何计算并扩展输出接口
- 新增时标、ΔT 模型、质心时间与 UT1 支持
- 改进日月食、月掩、行星事件及路径边界计算
- 完善恒星三维自行与动态距离传播
- 扩展 SVG、GeoJSON、KML 输出与底层距离换算工具
- 整理中英文手册、示例资源及回归测试
2026-09-23 18:55:12 +08:00

6.6 KiB
Raw Blame History

精度与性能

English | README

下表说明内置模型及已有样本的对照结果。样本最大误差不代表所有日期、地点的误差上限。与外部星历比较时,需要先统一时标、参考系、观测点高度和折射模型。

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/Horizons JDTT 样本上,相对 JPL/Horizons 的最大差异约为黄经 219.6"、黄纬 25.8"、距离 34.3 km
  • 月球近地点/远地点:时刻最大差异约 15m53.45s,距离最大差异约 39.758 km
  • 月球最大赤纬:时刻最大差异约 2.43s,赤纬最大差异约 0.00006431°