Average Error: 10.1 → 10.1
Time: 31.2s
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 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2, \frac{t}{\ell} \cdot \frac{t}{\ell}, 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 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2, \frac{t}{\ell} \cdot \frac{t}{\ell}, 1\right)}}\right)\right)\right)
double f(double t, double l, double Om, double Omc) {
        double r1954569 = 1.0;
        double r1954570 = Om;
        double r1954571 = Omc;
        double r1954572 = r1954570 / r1954571;
        double r1954573 = 2.0;
        double r1954574 = pow(r1954572, r1954573);
        double r1954575 = r1954569 - r1954574;
        double r1954576 = t;
        double r1954577 = l;
        double r1954578 = r1954576 / r1954577;
        double r1954579 = pow(r1954578, r1954573);
        double r1954580 = r1954573 * r1954579;
        double r1954581 = r1954569 + r1954580;
        double r1954582 = r1954575 / r1954581;
        double r1954583 = sqrt(r1954582);
        double r1954584 = asin(r1954583);
        return r1954584;
}

double f(double t, double l, double Om, double Omc) {
        double r1954585 = 1.0;
        double r1954586 = Om;
        double r1954587 = Omc;
        double r1954588 = r1954586 / r1954587;
        double r1954589 = r1954588 * r1954588;
        double r1954590 = r1954585 - r1954589;
        double r1954591 = 2.0;
        double r1954592 = t;
        double r1954593 = l;
        double r1954594 = r1954592 / r1954593;
        double r1954595 = r1954594 * r1954594;
        double r1954596 = fma(r1954591, r1954595, r1954585);
        double r1954597 = r1954590 / r1954596;
        double r1954598 = sqrt(r1954597);
        double r1954599 = asin(r1954598);
        double r1954600 = log1p(r1954599);
        double r1954601 = expm1(r1954600);
        return r1954601;
}

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 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2, \frac{t}{\ell} \cdot \frac{t}{\ell}, 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 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(2, \frac{t}{\ell} \cdot \frac{t}{\ell}, 1\right)}}\right)\right)\right)}\]
  5. Final simplification10.1

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

Reproduce

herbie shell --seed 2019158 +o rules:numerics
(FPCore (t l Om Omc)
  :name "Toniolo and Linder, Equation (2)"
  (asin (sqrt (/ (- 1 (pow (/ Om Omc) 2)) (+ 1 (* 2 (pow (/ t l) 2)))))))