Average Error: 10.3 → 10.3
Time: 29.1s
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 - {\left(\frac{Om}{Omc}\right)}^{2}}{\mathsf{fma}\left({\left(\frac{t}{\ell}\right)}^{2}, 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 - {\left(\frac{Om}{Omc}\right)}^{2}}{\mathsf{fma}\left({\left(\frac{t}{\ell}\right)}^{2}, 2, 1\right)}}\right)
double f(double t, double l, double Om, double Omc) {
        double r2310387 = 1.0;
        double r2310388 = Om;
        double r2310389 = Omc;
        double r2310390 = r2310388 / r2310389;
        double r2310391 = 2.0;
        double r2310392 = pow(r2310390, r2310391);
        double r2310393 = r2310387 - r2310392;
        double r2310394 = t;
        double r2310395 = l;
        double r2310396 = r2310394 / r2310395;
        double r2310397 = pow(r2310396, r2310391);
        double r2310398 = r2310391 * r2310397;
        double r2310399 = r2310387 + r2310398;
        double r2310400 = r2310393 / r2310399;
        double r2310401 = sqrt(r2310400);
        double r2310402 = asin(r2310401);
        return r2310402;
}

double f(double t, double l, double Om, double Omc) {
        double r2310403 = 1.0;
        double r2310404 = Om;
        double r2310405 = Omc;
        double r2310406 = r2310404 / r2310405;
        double r2310407 = 2.0;
        double r2310408 = pow(r2310406, r2310407);
        double r2310409 = r2310403 - r2310408;
        double r2310410 = t;
        double r2310411 = l;
        double r2310412 = r2310410 / r2310411;
        double r2310413 = pow(r2310412, r2310407);
        double r2310414 = fma(r2310413, r2310407, r2310403);
        double r2310415 = r2310409 / r2310414;
        double r2310416 = sqrt(r2310415);
        double r2310417 = asin(r2310416);
        return r2310417;
}

Error

Bits error versus t

Bits error versus l

Bits error versus Om

Bits error versus Omc

Derivation

  1. Initial program 10.3

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

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

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

Reproduce

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