Average Error: 1.9 → 0.5
Time: 32.6s
Precision: 64
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}\]
\[e^{a \cdot \left(\left(\log 1 - \mathsf{fma}\left(\frac{1}{2}, \frac{\frac{z \cdot z}{1}}{1}, z \cdot 1\right)\right) - b\right) + \left(\log z - t\right) \cdot y} \cdot x\]
x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}
e^{a \cdot \left(\left(\log 1 - \mathsf{fma}\left(\frac{1}{2}, \frac{\frac{z \cdot z}{1}}{1}, z \cdot 1\right)\right) - b\right) + \left(\log z - t\right) \cdot y} \cdot x
double f(double x, double y, double z, double t, double a, double b) {
        double r79685 = x;
        double r79686 = y;
        double r79687 = z;
        double r79688 = log(r79687);
        double r79689 = t;
        double r79690 = r79688 - r79689;
        double r79691 = r79686 * r79690;
        double r79692 = a;
        double r79693 = 1.0;
        double r79694 = r79693 - r79687;
        double r79695 = log(r79694);
        double r79696 = b;
        double r79697 = r79695 - r79696;
        double r79698 = r79692 * r79697;
        double r79699 = r79691 + r79698;
        double r79700 = exp(r79699);
        double r79701 = r79685 * r79700;
        return r79701;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r79702 = a;
        double r79703 = 1.0;
        double r79704 = log(r79703);
        double r79705 = 0.5;
        double r79706 = z;
        double r79707 = r79706 * r79706;
        double r79708 = r79707 / r79703;
        double r79709 = r79708 / r79703;
        double r79710 = r79706 * r79703;
        double r79711 = fma(r79705, r79709, r79710);
        double r79712 = r79704 - r79711;
        double r79713 = b;
        double r79714 = r79712 - r79713;
        double r79715 = r79702 * r79714;
        double r79716 = log(r79706);
        double r79717 = t;
        double r79718 = r79716 - r79717;
        double r79719 = y;
        double r79720 = r79718 * r79719;
        double r79721 = r79715 + r79720;
        double r79722 = exp(r79721);
        double r79723 = x;
        double r79724 = r79722 * r79723;
        return r79724;
}

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.5

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

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

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

Reproduce

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