Average Error: 1.9 → 0.2
Time: 11.7s
Precision: 64
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}\]
\[x \cdot e^{y \cdot \log z + \mathsf{fma}\left(-t, y, \left(\log 1 - \left(\mathsf{fma}\left(\frac{1}{2}, \frac{{z}^{2}}{{1}^{2}}, 1 \cdot z\right) + b\right)\right) \cdot a\right)}\]
x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}
x \cdot e^{y \cdot \log z + \mathsf{fma}\left(-t, y, \left(\log 1 - \left(\mathsf{fma}\left(\frac{1}{2}, \frac{{z}^{2}}{{1}^{2}}, 1 \cdot z\right) + b\right)\right) \cdot a\right)}
double f(double x, double y, double z, double t, double a, double b) {
        double r122299 = x;
        double r122300 = y;
        double r122301 = z;
        double r122302 = log(r122301);
        double r122303 = t;
        double r122304 = r122302 - r122303;
        double r122305 = r122300 * r122304;
        double r122306 = a;
        double r122307 = 1.0;
        double r122308 = r122307 - r122301;
        double r122309 = log(r122308);
        double r122310 = b;
        double r122311 = r122309 - r122310;
        double r122312 = r122306 * r122311;
        double r122313 = r122305 + r122312;
        double r122314 = exp(r122313);
        double r122315 = r122299 * r122314;
        return r122315;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r122316 = x;
        double r122317 = y;
        double r122318 = z;
        double r122319 = log(r122318);
        double r122320 = r122317 * r122319;
        double r122321 = t;
        double r122322 = -r122321;
        double r122323 = 1.0;
        double r122324 = log(r122323);
        double r122325 = 0.5;
        double r122326 = 2.0;
        double r122327 = pow(r122318, r122326);
        double r122328 = pow(r122323, r122326);
        double r122329 = r122327 / r122328;
        double r122330 = r122323 * r122318;
        double r122331 = fma(r122325, r122329, r122330);
        double r122332 = b;
        double r122333 = r122331 + r122332;
        double r122334 = r122324 - r122333;
        double r122335 = a;
        double r122336 = r122334 * r122335;
        double r122337 = fma(r122322, r122317, r122336);
        double r122338 = r122320 + r122337;
        double r122339 = exp(r122338);
        double r122340 = r122316 * r122339;
        return r122340;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 1.9

    \[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}\]
  2. Taylor expanded around 0 0.4

    \[\leadsto x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\color{blue}{\left(\log 1 - \left(\frac{1}{2} \cdot \frac{{z}^{2}}{{1}^{2}} + 1 \cdot z\right)\right)} - b\right)}\]
  3. Using strategy rm
  4. Applied sub-neg0.4

    \[\leadsto x \cdot e^{y \cdot \color{blue}{\left(\log z + \left(-t\right)\right)} + a \cdot \left(\left(\log 1 - \left(\frac{1}{2} \cdot \frac{{z}^{2}}{{1}^{2}} + 1 \cdot z\right)\right) - b\right)}\]
  5. Applied distribute-lft-in0.5

    \[\leadsto x \cdot e^{\color{blue}{\left(y \cdot \log z + y \cdot \left(-t\right)\right)} + a \cdot \left(\left(\log 1 - \left(\frac{1}{2} \cdot \frac{{z}^{2}}{{1}^{2}} + 1 \cdot z\right)\right) - b\right)}\]
  6. Applied associate-+l+0.5

    \[\leadsto x \cdot e^{\color{blue}{y \cdot \log z + \left(y \cdot \left(-t\right) + a \cdot \left(\left(\log 1 - \left(\frac{1}{2} \cdot \frac{{z}^{2}}{{1}^{2}} + 1 \cdot z\right)\right) - b\right)\right)}}\]
  7. Simplified0.2

    \[\leadsto x \cdot e^{y \cdot \log z + \color{blue}{\mathsf{fma}\left(-t, y, \left(\log 1 - \left(\mathsf{fma}\left(\frac{1}{2}, \frac{{z}^{2}}{{1}^{2}}, 1 \cdot z\right) + b\right)\right) \cdot a\right)}}\]
  8. Final simplification0.2

    \[\leadsto x \cdot e^{y \cdot \log z + \mathsf{fma}\left(-t, y, \left(\log 1 - \left(\mathsf{fma}\left(\frac{1}{2}, \frac{{z}^{2}}{{1}^{2}}, 1 \cdot z\right) + b\right)\right) \cdot a\right)}\]

Reproduce

herbie shell --seed 2020039 +o rules:numerics
(FPCore (x y z t a b)
  :name "Numeric.SpecFunctions:incompleteBetaApprox from math-functions-0.1.5.2, B"
  :precision binary64
  (* x (exp (+ (* y (- (log z) t)) (* a (- (log (- 1 z)) b))))))