Average Error: 10.1 → 10.1
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 - {\left(\frac{Om}{Omc}\right)}^{2}}{\mathsf{fma}\left(2, {\left(\frac{t}{\ell}\right)}^{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)
\mathsf{expm1}\left(\mathsf{log1p}\left(\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)\right)\right)
double f(double t, double l, double Om, double Omc) {
        double r48451 = 1.0;
        double r48452 = Om;
        double r48453 = Omc;
        double r48454 = r48452 / r48453;
        double r48455 = 2.0;
        double r48456 = pow(r48454, r48455);
        double r48457 = r48451 - r48456;
        double r48458 = t;
        double r48459 = l;
        double r48460 = r48458 / r48459;
        double r48461 = pow(r48460, r48455);
        double r48462 = r48455 * r48461;
        double r48463 = r48451 + r48462;
        double r48464 = r48457 / r48463;
        double r48465 = sqrt(r48464);
        double r48466 = asin(r48465);
        return r48466;
}

double f(double t, double l, double Om, double Omc) {
        double r48467 = 1.0;
        double r48468 = Om;
        double r48469 = Omc;
        double r48470 = r48468 / r48469;
        double r48471 = 2.0;
        double r48472 = pow(r48470, r48471);
        double r48473 = r48467 - r48472;
        double r48474 = t;
        double r48475 = l;
        double r48476 = r48474 / r48475;
        double r48477 = pow(r48476, r48471);
        double r48478 = fma(r48471, r48477, r48467);
        double r48479 = r48473 / r48478;
        double r48480 = sqrt(r48479);
        double r48481 = asin(r48480);
        double r48482 = log1p(r48481);
        double r48483 = expm1(r48482);
        return r48483;
}

Error

Bits error versus t

Bits error versus l

Bits error versus Om

Bits error versus Omc

Derivation

  1. Initial program 10.1

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

    \[\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 expm1-log1p-u10.1

    \[\leadsto \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\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)\right)\right)}\]
  5. Final simplification10.1

    \[\leadsto \mathsf{expm1}\left(\mathsf{log1p}\left(\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)\right)\right)\]

Reproduce

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