Average Error: 10.3 → 10.3
Time: 23.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 r63561 = 1.0;
        double r63562 = Om;
        double r63563 = Omc;
        double r63564 = r63562 / r63563;
        double r63565 = 2.0;
        double r63566 = pow(r63564, r63565);
        double r63567 = r63561 - r63566;
        double r63568 = t;
        double r63569 = l;
        double r63570 = r63568 / r63569;
        double r63571 = pow(r63570, r63565);
        double r63572 = r63565 * r63571;
        double r63573 = r63561 + r63572;
        double r63574 = r63567 / r63573;
        double r63575 = sqrt(r63574);
        double r63576 = asin(r63575);
        return r63576;
}

double f(double t, double l, double Om, double Omc) {
        double r63577 = 1.0;
        double r63578 = Om;
        double r63579 = Omc;
        double r63580 = r63578 / r63579;
        double r63581 = 2.0;
        double r63582 = pow(r63580, r63581);
        double r63583 = exp(r63582);
        double r63584 = log(r63583);
        double r63585 = r63577 - r63584;
        double r63586 = t;
        double r63587 = l;
        double r63588 = r63586 / r63587;
        double r63589 = pow(r63588, r63581);
        double r63590 = fma(r63581, r63589, r63577);
        double r63591 = r63585 / r63590;
        double r63592 = sqrt(r63591);
        double r63593 = asin(r63592);
        return r63593;
}

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(2, {\left(\frac{t}{\ell}\right)}^{2}, 1\right)}}\right)}\]
  3. Using strategy rm
  4. Applied add-log-exp10.3

    \[\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.3

    \[\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 2019209 +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)))))))