Average Error: 10.3 → 10.4
Time: 26.9s
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(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)
\sin^{-1} \left(\sqrt{\mathsf{expm1}\left(\mathsf{log1p}\left(\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 r54315 = 1.0;
        double r54316 = Om;
        double r54317 = Omc;
        double r54318 = r54316 / r54317;
        double r54319 = 2.0;
        double r54320 = pow(r54318, r54319);
        double r54321 = r54315 - r54320;
        double r54322 = t;
        double r54323 = l;
        double r54324 = r54322 / r54323;
        double r54325 = pow(r54324, r54319);
        double r54326 = r54319 * r54325;
        double r54327 = r54315 + r54326;
        double r54328 = r54321 / r54327;
        double r54329 = sqrt(r54328);
        double r54330 = asin(r54329);
        return r54330;
}

double f(double t, double l, double Om, double Omc) {
        double r54331 = 1.0;
        double r54332 = Om;
        double r54333 = Omc;
        double r54334 = r54332 / r54333;
        double r54335 = 2.0;
        double r54336 = pow(r54334, r54335);
        double r54337 = r54331 - r54336;
        double r54338 = t;
        double r54339 = l;
        double r54340 = r54338 / r54339;
        double r54341 = pow(r54340, r54335);
        double r54342 = fma(r54335, r54341, r54331);
        double r54343 = r54337 / r54342;
        double r54344 = log1p(r54343);
        double r54345 = expm1(r54344);
        double r54346 = sqrt(r54345);
        double r54347 = asin(r54346);
        return r54347;
}

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 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}}{\mathsf{fma}\left(2, {\left(\frac{t}{\ell}\right)}^{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(2, {\left(\frac{t}{\ell}\right)}^{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)))))))