erfa_rust/
G12_safe.rs

1// G12
2//   epb.c    → eraEpb_safe
3//   epb2jd.c → eraEpb2jd_safe
4//   epj.c    → eraEpj_safe
5//   epj2jd.c → eraEpj2jd_safe
6
7use crate::H1_safe::{ERFA_DJ00, ERFA_DJM0, ERFA_DJM00, ERFA_DJY, ERFA_DTY};
8
9pub type ErfaResult<T> = Result<T, ()>;
10
11// Julian Date → Besselian Epoch (B1900-based).
12pub fn eraEpb_safe(dj1: f64, dj2: f64) -> ErfaResult<f64> {
13    const D1900: f64 = 36524.68648;
14    let epb = 1900.0 + ((dj1 - ERFA_DJ00) + (dj2 + D1900)) / ERFA_DTY;
15    Ok(epb)
16}
17
18// Besselian Epoch → two-part MJD (djm0, djm).
19pub fn eraEpb2jd_safe(epb: f64) -> ErfaResult<(f64, f64)> {
20    let djm0 = ERFA_DJM0;
21    let djm = 15_019.813_52 + (epb - 1900.0) * ERFA_DTY;
22    Ok((djm0, djm))
23}
24
25// Julian Date → Julian Epoch (J2000-based).
26pub fn eraEpj_safe(dj1: f64, dj2: f64) -> ErfaResult<f64> {
27    let epj = 2000.0 + ((dj1 - ERFA_DJ00) + dj2) / ERFA_DJY;
28    Ok(epj)
29}
30
31// Julian Epoch → two-part MJD (djm0, djm).
32pub fn eraEpj2jd_safe(epj: f64) -> ErfaResult<(f64, f64)> {
33    let djm0 = ERFA_DJM0;
34    let djm = ERFA_DJM00 + (epj - 2000.0) * ERFA_DJY;
35    Ok((djm0, djm))
36}