Average Error: 10.4 → 10.4
Time: 28.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)\]
\[\mathsf{expm1}\left(\mathsf{log1p}\left(\sin^{-1} \left(\sqrt{\frac{1 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2 \cdot \frac{t}{\ell}, \frac{t}{\ell}, 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)
\mathsf{expm1}\left(\mathsf{log1p}\left(\sin^{-1} \left(\sqrt{\frac{1 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2 \cdot \frac{t}{\ell}, \frac{t}{\ell}, 1\right)}}\right)\right)\right)
double f(double t, double l, double Om, double Omc) {
        double r1020875 = 1.0;
        double r1020876 = Om;
        double r1020877 = Omc;
        double r1020878 = r1020876 / r1020877;
        double r1020879 = 2.0;
        double r1020880 = pow(r1020878, r1020879);
        double r1020881 = r1020875 - r1020880;
        double r1020882 = t;
        double r1020883 = l;
        double r1020884 = r1020882 / r1020883;
        double r1020885 = pow(r1020884, r1020879);
        double r1020886 = r1020879 * r1020885;
        double r1020887 = r1020875 + r1020886;
        double r1020888 = r1020881 / r1020887;
        double r1020889 = sqrt(r1020888);
        double r1020890 = asin(r1020889);
        return r1020890;
}

double f(double t, double l, double Om, double Omc) {
        double r1020891 = 1.0;
        double r1020892 = Om;
        double r1020893 = Omc;
        double r1020894 = r1020892 / r1020893;
        double r1020895 = r1020894 * r1020894;
        double r1020896 = r1020891 - r1020895;
        double r1020897 = 2.0;
        double r1020898 = t;
        double r1020899 = l;
        double r1020900 = r1020898 / r1020899;
        double r1020901 = r1020897 * r1020900;
        double r1020902 = fma(r1020901, r1020900, r1020891);
        double r1020903 = r1020896 / r1020902;
        double r1020904 = sqrt(r1020903);
        double r1020905 = asin(r1020904);
        double r1020906 = log1p(r1020905);
        double r1020907 = expm1(r1020906);
        return r1020907;
}

Error

Bits error versus t

Bits error versus l

Bits error versus Om

Bits error versus Omc

Derivation

  1. Initial program 10.4

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

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

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

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

Reproduce

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