Average Error: 10.4 → 10.4
Time: 18.6s
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 \cdot \frac{t}{\ell}, \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 \cdot \frac{t}{\ell}, \frac{t}{\ell}, 1\right)}}\right)\right)\right)
double f(double t, double l, double Om, double Omc) {
        double r978127 = 1.0;
        double r978128 = Om;
        double r978129 = Omc;
        double r978130 = r978128 / r978129;
        double r978131 = 2.0;
        double r978132 = pow(r978130, r978131);
        double r978133 = r978127 - r978132;
        double r978134 = t;
        double r978135 = l;
        double r978136 = r978134 / r978135;
        double r978137 = pow(r978136, r978131);
        double r978138 = r978131 * r978137;
        double r978139 = r978127 + r978138;
        double r978140 = r978133 / r978139;
        double r978141 = sqrt(r978140);
        double r978142 = asin(r978141);
        return r978142;
}

double f(double t, double l, double Om, double Omc) {
        double r978143 = 1.0;
        double r978144 = Om;
        double r978145 = Omc;
        double r978146 = r978144 / r978145;
        double r978147 = r978146 * r978146;
        double r978148 = r978143 - r978147;
        double r978149 = 2.0;
        double r978150 = t;
        double r978151 = l;
        double r978152 = r978150 / r978151;
        double r978153 = r978149 * r978152;
        double r978154 = fma(r978153, r978152, r978143);
        double r978155 = r978148 / r978154;
        double r978156 = sqrt(r978155);
        double r978157 = asin(r978156);
        double r978158 = log1p(r978157);
        double r978159 = expm1(r978158);
        return r978159;
}

Error

Bits error versus t

Bits error versus l

Bits error versus Om

Bits error versus Omc

Derivation

  1. Initial program 10.4

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

    \[\leadsto \color{blue}{\sin^{-1} \left(\sqrt{\frac{1 - \frac{Om}{Omc} \cdot \frac{Om}{Omc}}{\mathsf{fma}\left(\frac{t}{\ell} \cdot 2, \frac{t}{\ell}, 1\right)}}\right)}\]
  3. Using strategy rm
  4. Applied expm1-log1p-u10.4

    \[\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(\frac{t}{\ell} \cdot 2, \frac{t}{\ell}, 1\right)}}\right)\right)\right)}\]
  5. Final simplification10.4

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

Reproduce

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