Average Error: 10.2 → 10.2
Time: 15.2s
Precision: 64
\[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right)\]
\[\sin^{-1} \left(\sqrt{\frac{1 - \mathsf{log1p}\left(\mathsf{expm1}\left({\left(\frac{Om}{Omc}\right)}^{2}\right)\right)}{\mathsf{fma}\left(2, {\left(\frac{t}{\ell}\right)}^{2}, 1\right)}}\right)\]
\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right)
\sin^{-1} \left(\sqrt{\frac{1 - \mathsf{log1p}\left(\mathsf{expm1}\left({\left(\frac{Om}{Omc}\right)}^{2}\right)\right)}{\mathsf{fma}\left(2, {\left(\frac{t}{\ell}\right)}^{2}, 1\right)}}\right)
double f(double t, double l, double Om, double Omc) {
        double r61660 = 1.0;
        double r61661 = Om;
        double r61662 = Omc;
        double r61663 = r61661 / r61662;
        double r61664 = 2.0;
        double r61665 = pow(r61663, r61664);
        double r61666 = r61660 - r61665;
        double r61667 = t;
        double r61668 = l;
        double r61669 = r61667 / r61668;
        double r61670 = pow(r61669, r61664);
        double r61671 = r61664 * r61670;
        double r61672 = r61660 + r61671;
        double r61673 = r61666 / r61672;
        double r61674 = sqrt(r61673);
        double r61675 = asin(r61674);
        return r61675;
}

double f(double t, double l, double Om, double Omc) {
        double r61676 = 1.0;
        double r61677 = Om;
        double r61678 = Omc;
        double r61679 = r61677 / r61678;
        double r61680 = 2.0;
        double r61681 = pow(r61679, r61680);
        double r61682 = expm1(r61681);
        double r61683 = log1p(r61682);
        double r61684 = r61676 - r61683;
        double r61685 = t;
        double r61686 = l;
        double r61687 = r61685 / r61686;
        double r61688 = pow(r61687, r61680);
        double r61689 = fma(r61680, r61688, r61676);
        double r61690 = r61684 / r61689;
        double r61691 = sqrt(r61690);
        double r61692 = asin(r61691);
        return r61692;
}

Error

Bits error versus t

Bits error versus l

Bits error versus Om

Bits error versus Omc

Derivation

  1. Initial program 10.2

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

    \[\leadsto \color{blue}{\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{\mathsf{fma}\left(2, {\left(\frac{t}{\ell}\right)}^{2}, 1\right)}}\right)}\]
  3. Using strategy rm
  4. Applied log1p-expm1-u10.2

    \[\leadsto \sin^{-1} \left(\sqrt{\frac{1 - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left({\left(\frac{Om}{Omc}\right)}^{2}\right)\right)}}{\mathsf{fma}\left(2, {\left(\frac{t}{\ell}\right)}^{2}, 1\right)}}\right)\]
  5. Final simplification10.2

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

Reproduce

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