Average Error: 10.5 → 10.5
Time: 24.3s
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 - \log \left(e^{{\left(\frac{Om}{Omc}\right)}^{2}}\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 - \log \left(e^{{\left(\frac{Om}{Omc}\right)}^{2}}\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 r50046 = 1.0;
        double r50047 = Om;
        double r50048 = Omc;
        double r50049 = r50047 / r50048;
        double r50050 = 2.0;
        double r50051 = pow(r50049, r50050);
        double r50052 = r50046 - r50051;
        double r50053 = t;
        double r50054 = l;
        double r50055 = r50053 / r50054;
        double r50056 = pow(r50055, r50050);
        double r50057 = r50050 * r50056;
        double r50058 = r50046 + r50057;
        double r50059 = r50052 / r50058;
        double r50060 = sqrt(r50059);
        double r50061 = asin(r50060);
        return r50061;
}

double f(double t, double l, double Om, double Omc) {
        double r50062 = 1.0;
        double r50063 = Om;
        double r50064 = Omc;
        double r50065 = r50063 / r50064;
        double r50066 = 2.0;
        double r50067 = pow(r50065, r50066);
        double r50068 = exp(r50067);
        double r50069 = log(r50068);
        double r50070 = r50062 - r50069;
        double r50071 = t;
        double r50072 = l;
        double r50073 = r50071 / r50072;
        double r50074 = pow(r50073, r50066);
        double r50075 = fma(r50066, r50074, r50062);
        double r50076 = r50070 / r50075;
        double r50077 = sqrt(r50076);
        double r50078 = asin(r50077);
        return r50078;
}

Error

Bits error versus t

Bits error versus l

Bits error versus Om

Bits error versus Omc

Derivation

  1. Initial program 10.5

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

    \[\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 add-log-exp10.5

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

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

Reproduce

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