Average Error: 10.3 → 10.4
Time: 27.5s
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 r53542 = 1.0;
        double r53543 = Om;
        double r53544 = Omc;
        double r53545 = r53543 / r53544;
        double r53546 = 2.0;
        double r53547 = pow(r53545, r53546);
        double r53548 = r53542 - r53547;
        double r53549 = t;
        double r53550 = l;
        double r53551 = r53549 / r53550;
        double r53552 = pow(r53551, r53546);
        double r53553 = r53546 * r53552;
        double r53554 = r53542 + r53553;
        double r53555 = r53548 / r53554;
        double r53556 = sqrt(r53555);
        double r53557 = asin(r53556);
        return r53557;
}

double f(double t, double l, double Om, double Omc) {
        double r53558 = 1.0;
        double r53559 = Om;
        double r53560 = Omc;
        double r53561 = r53559 / r53560;
        double r53562 = 2.0;
        double r53563 = pow(r53561, r53562);
        double r53564 = r53558 - r53563;
        double r53565 = t;
        double r53566 = l;
        double r53567 = r53565 / r53566;
        double r53568 = pow(r53567, r53562);
        double r53569 = fma(r53568, r53562, r53558);
        double r53570 = r53564 / r53569;
        double r53571 = log1p(r53570);
        double r53572 = expm1(r53571);
        double r53573 = sqrt(r53572);
        double r53574 = asin(r53573);
        return r53574;
}

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. Using strategy rm
  3. Applied expm1-log1p-u10.4

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

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

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