Average Error: 10.1 → 10.1
Time: 26.0s
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{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{\mathsf{fma}\left({\left(\frac{t}{\ell}\right)}^{2}, 2, 1\right)}\right)\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{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{\mathsf{fma}\left({\left(\frac{t}{\ell}\right)}^{2}, 2, 1\right)}\right)\right)}\right)
double f(double t, double l, double Om, double Omc) {
        double r46902 = 1.0;
        double r46903 = Om;
        double r46904 = Omc;
        double r46905 = r46903 / r46904;
        double r46906 = 2.0;
        double r46907 = pow(r46905, r46906);
        double r46908 = r46902 - r46907;
        double r46909 = t;
        double r46910 = l;
        double r46911 = r46909 / r46910;
        double r46912 = pow(r46911, r46906);
        double r46913 = r46906 * r46912;
        double r46914 = r46902 + r46913;
        double r46915 = r46908 / r46914;
        double r46916 = sqrt(r46915);
        double r46917 = asin(r46916);
        return r46917;
}

double f(double t, double l, double Om, double Omc) {
        double r46918 = 1.0;
        double r46919 = Om;
        double r46920 = Omc;
        double r46921 = r46919 / r46920;
        double r46922 = 2.0;
        double r46923 = pow(r46921, r46922);
        double r46924 = r46918 - r46923;
        double r46925 = t;
        double r46926 = l;
        double r46927 = r46925 / r46926;
        double r46928 = pow(r46927, r46922);
        double r46929 = fma(r46928, r46922, r46918);
        double r46930 = r46924 / r46929;
        double r46931 = log1p(r46930);
        double r46932 = expm1(r46931);
        double r46933 = sqrt(r46932);
        double r46934 = asin(r46933);
        return r46934;
}

Error

Bits error versus t

Bits error versus l

Bits error versus Om

Bits error versus Omc

Derivation

  1. Initial program 10.1

    \[\sin^{-1} \left(\sqrt{\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}}\right)\]
  2. Using strategy rm
  3. Applied expm1-log1p-u10.1

    \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{1 - {\left(\frac{Om}{Omc}\right)}^{2}}{1 + 2 \cdot {\left(\frac{t}{\ell}\right)}^{2}}\right)\right)}}\right)\]
  4. Simplified10.1

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

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

Reproduce

herbie shell --seed 2019196 +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)))))))