Average Error: 2.1 → 1.0
Time: 26.1s
Precision: 64
\[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}\]
\[\begin{array}{l} \mathbf{if}\;y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right) \le -0.003354970188924930908636046211768189095892:\\ \;\;\;\;\sqrt{x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}} \cdot \sqrt{x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}}\\ \mathbf{else}:\\ \;\;\;\;x \cdot e^{-\left(a \cdot b + \left(1 \cdot \left(a \cdot z\right) + 0.5 \cdot \left(a \cdot {z}^{2}\right)\right)\right)}\\ \end{array}\]
x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}
\begin{array}{l}
\mathbf{if}\;y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right) \le -0.003354970188924930908636046211768189095892:\\
\;\;\;\;\sqrt{x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}} \cdot \sqrt{x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}}\\

\mathbf{else}:\\
\;\;\;\;x \cdot e^{-\left(a \cdot b + \left(1 \cdot \left(a \cdot z\right) + 0.5 \cdot \left(a \cdot {z}^{2}\right)\right)\right)}\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r88416 = x;
        double r88417 = y;
        double r88418 = z;
        double r88419 = log(r88418);
        double r88420 = t;
        double r88421 = r88419 - r88420;
        double r88422 = r88417 * r88421;
        double r88423 = a;
        double r88424 = 1.0;
        double r88425 = r88424 - r88418;
        double r88426 = log(r88425);
        double r88427 = b;
        double r88428 = r88426 - r88427;
        double r88429 = r88423 * r88428;
        double r88430 = r88422 + r88429;
        double r88431 = exp(r88430);
        double r88432 = r88416 * r88431;
        return r88432;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r88433 = y;
        double r88434 = z;
        double r88435 = log(r88434);
        double r88436 = t;
        double r88437 = r88435 - r88436;
        double r88438 = r88433 * r88437;
        double r88439 = a;
        double r88440 = 1.0;
        double r88441 = r88440 - r88434;
        double r88442 = log(r88441);
        double r88443 = b;
        double r88444 = r88442 - r88443;
        double r88445 = r88439 * r88444;
        double r88446 = r88438 + r88445;
        double r88447 = -0.003354970188924931;
        bool r88448 = r88446 <= r88447;
        double r88449 = x;
        double r88450 = exp(r88446);
        double r88451 = r88449 * r88450;
        double r88452 = sqrt(r88451);
        double r88453 = r88452 * r88452;
        double r88454 = r88439 * r88443;
        double r88455 = r88439 * r88434;
        double r88456 = r88440 * r88455;
        double r88457 = 0.5;
        double r88458 = 2.0;
        double r88459 = pow(r88434, r88458);
        double r88460 = r88439 * r88459;
        double r88461 = r88457 * r88460;
        double r88462 = r88456 + r88461;
        double r88463 = r88454 + r88462;
        double r88464 = -r88463;
        double r88465 = exp(r88464);
        double r88466 = r88449 * r88465;
        double r88467 = r88448 ? r88453 : r88466;
        return r88467;
}

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

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if (+ (* y (- (log z) t)) (* a (- (log (- 1.0 z)) b))) < -0.003354970188924931

    1. Initial program 0.1

      \[x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt0.3

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

    if -0.003354970188924931 < (+ (* y (- (log z) t)) (* a (- (log (- 1.0 z)) b)))

    1. Initial program 6.4

      \[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 1.3

      \[\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. Taylor expanded around inf 2.5

      \[\leadsto x \cdot e^{\color{blue}{-\left(a \cdot b + \left(1 \cdot \left(a \cdot z\right) + 0.5 \cdot \left(a \cdot {z}^{2}\right)\right)\right)}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right) \le -0.003354970188924930908636046211768189095892:\\ \;\;\;\;\sqrt{x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}} \cdot \sqrt{x \cdot e^{y \cdot \left(\log z - t\right) + a \cdot \left(\log \left(1 - z\right) - b\right)}}\\ \mathbf{else}:\\ \;\;\;\;x \cdot e^{-\left(a \cdot b + \left(1 \cdot \left(a \cdot z\right) + 0.5 \cdot \left(a \cdot {z}^{2}\right)\right)\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019297 
(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))))))