Average Error: 9.7 → 9.7
Time: 1.1m
Precision: 64
\[\sin^{-1} \left(\sqrt{\frac{1.0 - {\left(\frac{Om}{Omc}\right)}^{2.0}}{1.0 + 2.0 \cdot {\left(\frac{t}{\ell}\right)}^{2.0}}}\right)\]
\[\mathsf{expm1}\left(\mathsf{log1p}\left(\sin^{-1} \left(\sqrt{\frac{1.0 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2.0, {\left(\frac{t}{\ell}\right)}^{2.0}, 1.0\right)}}\right)\right)\right)\]
\sin^{-1} \left(\sqrt{\frac{1.0 - {\left(\frac{Om}{Omc}\right)}^{2.0}}{1.0 + 2.0 \cdot {\left(\frac{t}{\ell}\right)}^{2.0}}}\right)
\mathsf{expm1}\left(\mathsf{log1p}\left(\sin^{-1} \left(\sqrt{\frac{1.0 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2.0, {\left(\frac{t}{\ell}\right)}^{2.0}, 1.0\right)}}\right)\right)\right)
double f(double t, double l, double Om, double Omc) {
        double r1773711 = 1.0;
        double r1773712 = Om;
        double r1773713 = Omc;
        double r1773714 = r1773712 / r1773713;
        double r1773715 = 2.0;
        double r1773716 = pow(r1773714, r1773715);
        double r1773717 = r1773711 - r1773716;
        double r1773718 = t;
        double r1773719 = l;
        double r1773720 = r1773718 / r1773719;
        double r1773721 = pow(r1773720, r1773715);
        double r1773722 = r1773715 * r1773721;
        double r1773723 = r1773711 + r1773722;
        double r1773724 = r1773717 / r1773723;
        double r1773725 = sqrt(r1773724);
        double r1773726 = asin(r1773725);
        return r1773726;
}

double f(double t, double l, double Om, double Omc) {
        double r1773727 = 1.0;
        double r1773728 = Om;
        double r1773729 = Omc;
        double r1773730 = r1773728 / r1773729;
        double r1773731 = r1773730 * r1773730;
        double r1773732 = r1773727 - r1773731;
        double r1773733 = 2.0;
        double r1773734 = t;
        double r1773735 = l;
        double r1773736 = r1773734 / r1773735;
        double r1773737 = pow(r1773736, r1773733);
        double r1773738 = fma(r1773733, r1773737, r1773727);
        double r1773739 = r1773732 / r1773738;
        double r1773740 = sqrt(r1773739);
        double r1773741 = asin(r1773740);
        double r1773742 = log1p(r1773741);
        double r1773743 = expm1(r1773742);
        return r1773743;
}

Error

Bits error versus t

Bits error versus l

Bits error versus Om

Bits error versus Omc

Derivation

  1. Initial program 9.7

    \[\sin^{-1} \left(\sqrt{\frac{1.0 - {\left(\frac{Om}{Omc}\right)}^{2.0}}{1.0 + 2.0 \cdot {\left(\frac{t}{\ell}\right)}^{2.0}}}\right)\]
  2. Simplified9.7

    \[\leadsto \color{blue}{\sin^{-1} \left(\sqrt{\frac{1.0 - {\left(\frac{Om}{Omc}\right)}^{2.0}}{\mathsf{fma}\left({\left(\frac{t}{\ell}\right)}^{2.0}, 2.0, 1.0\right)}}\right)}\]
  3. Taylor expanded around 0 16.0

    \[\leadsto \color{blue}{\sin^{-1} \left(\sqrt{\frac{1.0 - \frac{{Om}^{2}}{{Omc}^{2}}}{\mathsf{fma}\left({\left(\frac{t}{\ell}\right)}^{2.0}, 2.0, 1.0\right)}}\right)}\]
  4. Simplified9.7

    \[\leadsto \color{blue}{\sin^{-1} \left(\sqrt{\frac{1.0 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2.0, {\left(\frac{t}{\ell}\right)}^{2.0}, 1.0\right)}}\right)}\]
  5. Using strategy rm
  6. Applied expm1-log1p-u9.7

    \[\leadsto \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\sin^{-1} \left(\sqrt{\frac{1.0 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2.0, {\left(\frac{t}{\ell}\right)}^{2.0}, 1.0\right)}}\right)\right)\right)}\]
  7. Final simplification9.7

    \[\leadsto \mathsf{expm1}\left(\mathsf{log1p}\left(\sin^{-1} \left(\sqrt{\frac{1.0 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2.0, {\left(\frac{t}{\ell}\right)}^{2.0}, 1.0\right)}}\right)\right)\right)\]

Reproduce

herbie shell --seed 2019165 +o rules:numerics
(FPCore (t l Om Omc)
  :name "Toniolo and Linder, Equation (2)"
  (asin (sqrt (/ (- 1.0 (pow (/ Om Omc) 2.0)) (+ 1.0 (* 2.0 (pow (/ t l) 2.0)))))))