Average Error: 10.1 → 10.1
Time: 20.8s
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 r35062 = 1.0;
        double r35063 = Om;
        double r35064 = Omc;
        double r35065 = r35063 / r35064;
        double r35066 = 2.0;
        double r35067 = pow(r35065, r35066);
        double r35068 = r35062 - r35067;
        double r35069 = t;
        double r35070 = l;
        double r35071 = r35069 / r35070;
        double r35072 = pow(r35071, r35066);
        double r35073 = r35066 * r35072;
        double r35074 = r35062 + r35073;
        double r35075 = r35068 / r35074;
        double r35076 = sqrt(r35075);
        double r35077 = asin(r35076);
        return r35077;
}

double f(double t, double l, double Om, double Omc) {
        double r35078 = 1.0;
        double r35079 = Om;
        double r35080 = Omc;
        double r35081 = r35079 / r35080;
        double r35082 = 2.0;
        double r35083 = pow(r35081, r35082);
        double r35084 = r35078 - r35083;
        double r35085 = t;
        double r35086 = l;
        double r35087 = r35085 / r35086;
        double r35088 = pow(r35087, r35082);
        double r35089 = fma(r35088, r35082, r35078);
        double r35090 = r35084 / r35089;
        double r35091 = log1p(r35090);
        double r35092 = expm1(r35091);
        double r35093 = sqrt(r35092);
        double r35094 = asin(r35093);
        return r35094;
}

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({\left(\frac{t}{\ell}\right)}^{2}, 2, 1\right)}}\right)}\]
  3. Using strategy rm
  4. Applied expm1-log1p-u10.1

    \[\leadsto \sin^{-1} \left(\sqrt{\color{blue}{\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)\]
  5. Final simplification10.1

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