deep-time 0.1.0-alpha.9

High-precision, no-std, no-alloc date-time library, leap-seconds, time scales, relativistic time, and a powerful date & duration parser
Documentation
pub const DJ00: f64 = 2451545.0;
pub const DJC: f64 = 36525.0;
pub const DAS2R: f64 = 4.848136811095359935899141e-6;
pub const TURNAS: f64 = 1296000.0;
pub const D2PI: f64 = core::f64::consts::TAU;
pub const DPI: f64 = core::f64::consts::PI;
// pub const D2PI: f64 = 6.283185307179586476925287;
// pub const DPI: f64 = 3.141592653589793238462643;

#[derive(Clone, Copy)]
pub struct Term {
    pub nfa: [i32; 8],
    pub s: f64,
    pub c: f64,
}

impl Term {
    pub const fn new(nfa: [i32; 8], s: f64, c: f64) -> Term {
        Term { nfa, s, c }
    }
}

// Polynomial coefficients for s+XY/2
pub static SP: [f64; 6] = [
    94.00e-6,
    3808.65e-6,
    -122.68e-6,
    -72574.11e-6,
    27.98e-6,
    15.62e-6,
];

// Terms of order t^0 (33 terms as provided)
pub static S0: [Term; 33] = [
    /* 1-10 */
    Term::new([0, 0, 0, 0, 1, 0, 0, 0], -2640.73e-6, 0.39e-6),
    Term::new([0, 0, 0, 0, 2, 0, 0, 0], -63.53e-6, 0.02e-6),
    Term::new([0, 0, 2, -2, 3, 0, 0, 0], -11.75e-6, -0.01e-6),
    Term::new([0, 0, 2, -2, 1, 0, 0, 0], -11.21e-6, -0.01e-6),
    Term::new([0, 0, 2, -2, 2, 0, 0, 0], 4.57e-6, 0.00e-6),
    Term::new([0, 0, 2, 0, 3, 0, 0, 0], -2.02e-6, 0.00e-6),
    Term::new([0, 0, 2, 0, 1, 0, 0, 0], -1.98e-6, 0.00e-6),
    Term::new([0, 0, 0, 0, 3, 0, 0, 0], 1.72e-6, 0.00e-6),
    Term::new([0, 1, 0, 0, 1, 0, 0, 0], 1.41e-6, 0.01e-6),
    Term::new([0, 1, 0, 0, -1, 0, 0, 0], 1.26e-6, 0.01e-6),
    /* 11-20 */
    Term::new([1, 0, 0, 0, -1, 0, 0, 0], 0.63e-6, 0.00e-6),
    Term::new([1, 0, 0, 0, 1, 0, 0, 0], 0.63e-6, 0.00e-6),
    Term::new([0, 1, 2, -2, 3, 0, 0, 0], -0.46e-6, 0.00e-6),
    Term::new([0, 1, 2, -2, 1, 0, 0, 0], -0.45e-6, 0.00e-6),
    Term::new([0, 0, 4, -4, 4, 0, 0, 0], -0.36e-6, 0.00e-6),
    Term::new([0, 0, 1, -1, 1, -8, 12, 0], 0.24e-6, 0.12e-6),
    Term::new([0, 0, 2, 0, 0, 0, 0, 0], -0.32e-6, 0.00e-6),
    Term::new([0, 0, 2, 0, 2, 0, 0, 0], -0.28e-6, 0.00e-6),
    Term::new([1, 0, 2, 0, 3, 0, 0, 0], -0.27e-6, 0.00e-6),
    Term::new([1, 0, 2, 0, 1, 0, 0, 0], -0.26e-6, 0.00e-6),
    /* 21-30 */
    Term::new([0, 0, 2, -2, 0, 0, 0, 0], 0.21e-6, 0.00e-6),
    Term::new([0, 1, -2, 2, -3, 0, 0, 0], -0.19e-6, 0.00e-6),
    Term::new([0, 1, -2, 2, -1, 0, 0, 0], -0.18e-6, 0.00e-6),
    Term::new([0, 0, 0, 0, 0, 8, -13, -1], 0.10e-6, -0.05e-6),
    Term::new([0, 0, 0, 2, 0, 0, 0, 0], -0.15e-6, 0.00e-6),
    Term::new([2, 0, -2, 0, -1, 0, 0, 0], 0.14e-6, 0.00e-6),
    Term::new([0, 1, 2, -2, 2, 0, 0, 0], 0.14e-6, 0.00e-6),
    Term::new([1, 0, 0, -2, 1, 0, 0, 0], -0.14e-6, 0.00e-6),
    Term::new([1, 0, 0, -2, -1, 0, 0, 0], -0.14e-6, 0.00e-6),
    Term::new([0, 0, 4, -2, 4, 0, 0, 0], -0.13e-6, 0.00e-6),
    /* 31-33 */
    Term::new([0, 0, 2, -2, 4, 0, 0, 0], 0.11e-6, 0.00e-6),
    Term::new([1, 0, -2, 0, -3, 0, 0, 0], -0.11e-6, 0.00e-6),
    Term::new([1, 0, -2, 0, -1, 0, 0, 0], -0.11e-6, 0.00e-6),
];

// Terms of order t^1 (3 terms)
pub static S1: [Term; 3] = [
    /* 1 - 3 */
    Term::new([0, 0, 0, 0, 2, 0, 0, 0], -0.07e-6, 3.57e-6),
    Term::new([0, 0, 0, 0, 1, 0, 0, 0], 1.73e-6, -0.03e-6),
    Term::new([0, 0, 2, -2, 3, 0, 0, 0], 0.00e-6, 0.48e-6),
];

// Terms of order t^2 (25 terms)
pub static S2: [Term; 25] = [
    /* 1-10 */
    Term::new([0, 0, 0, 0, 1, 0, 0, 0], 743.52e-6, -0.17e-6),
    Term::new([0, 0, 2, -2, 2, 0, 0, 0], 56.91e-6, 0.06e-6),
    Term::new([0, 0, 2, 0, 2, 0, 0, 0], 9.84e-6, -0.01e-6),
    Term::new([0, 0, 0, 0, 2, 0, 0, 0], -8.85e-6, 0.01e-6),
    Term::new([0, 1, 0, 0, 0, 0, 0, 0], -6.38e-6, -0.05e-6),
    Term::new([1, 0, 0, 0, 0, 0, 0, 0], -3.07e-6, 0.00e-6),
    Term::new([0, 1, 2, -2, 2, 0, 0, 0], 2.23e-6, 0.00e-6),
    Term::new([0, 0, 2, 0, 1, 0, 0, 0], 1.67e-6, 0.00e-6),
    Term::new([1, 0, 2, 0, 2, 0, 0, 0], 1.30e-6, 0.00e-6),
    Term::new([0, 1, -2, 2, -2, 0, 0, 0], 0.93e-6, 0.00e-6),
    /* 11-20 */
    Term::new([1, 0, 0, -2, 0, 0, 0, 0], 0.68e-6, 0.00e-6),
    Term::new([0, 0, 2, -2, 1, 0, 0, 0], -0.55e-6, 0.00e-6),
    Term::new([1, 0, -2, 0, -2, 0, 0, 0], 0.53e-6, 0.00e-6),
    Term::new([0, 0, 0, 2, 0, 0, 0, 0], -0.27e-6, 0.00e-6),
    Term::new([1, 0, 0, 0, 1, 0, 0, 0], -0.27e-6, 0.00e-6),
    Term::new([1, 0, -2, -2, -2, 0, 0, 0], -0.26e-6, 0.00e-6),
    Term::new([1, 0, 0, 0, -1, 0, 0, 0], -0.25e-6, 0.00e-6),
    Term::new([1, 0, 2, 0, 1, 0, 0, 0], 0.22e-6, 0.00e-6),
    Term::new([2, 0, 0, -2, 0, 0, 0, 0], -0.21e-6, 0.00e-6),
    Term::new([2, 0, -2, 0, -1, 0, 0, 0], 0.20e-6, 0.00e-6),
    /* 21-25 */
    Term::new([0, 0, 2, 2, 2, 0, 0, 0], 0.17e-6, 0.00e-6),
    Term::new([2, 0, 2, 0, 2, 0, 0, 0], 0.13e-6, 0.00e-6),
    Term::new([2, 0, 0, 0, 0, 0, 0, 0], -0.13e-6, 0.00e-6),
    Term::new([1, 0, 2, -2, 2, 0, 0, 0], -0.12e-6, 0.00e-6),
    Term::new([0, 0, 2, 0, 0, 0, 0, 0], -0.11e-6, 0.00e-6),
];

// Terms of order t^3 (4 terms)
pub static S3: [Term; 4] = [
    /* 1-4 */
    Term::new([0, 0, 0, 0, 1, 0, 0, 0], 0.30e-6, -23.42e-6),
    Term::new([0, 0, 2, -2, 2, 0, 0, 0], -0.03e-6, -1.46e-6),
    Term::new([0, 0, 2, 0, 2, 0, 0, 0], -0.01e-6, -0.25e-6),
    Term::new([0, 0, 0, 0, 2, 0, 0, 0], 0.00e-6, 0.23e-6),
];

// Terms of order t^4 (1 term)
pub static S4: [Term; 1] = [
    /* 1-1 */
    Term::new([0, 0, 0, 0, 1, 0, 0, 0], -0.26e-6, -0.01e-6),
];