Average Error: 4.5 → 0.4
Time: 19.2s
Precision: 64
\[x \cdot \left(\frac{y}{z} - \frac{t}{1.0 - z}\right)\]
\[\begin{array}{l} \mathbf{if}\;\frac{y}{z} - \frac{t}{1.0 - z} = -\infty:\\ \;\;\;\;\frac{x \cdot \left(\left(1.0 - z\right) \cdot y - t \cdot z\right)}{\left(1.0 - z\right) \cdot z}\\ \mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le -5.393223066037323 \cdot 10^{-209}:\\ \;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{1.0 - z} \cdot t\right)\\ \mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le 1.3058854717221127 \cdot 10^{-221}:\\ \;\;\;\;\frac{y \cdot x}{z} + \frac{x \cdot t}{z} \cdot \left(1 + \frac{1.0}{z}\right)\\ \mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le 3.119035244191526 \cdot 10^{+286}:\\ \;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{1.0 - z} \cdot t\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \left(\left(1.0 - z\right) \cdot y - t \cdot z\right)}{\left(1.0 - z\right) \cdot z}\\ \end{array}\]
x \cdot \left(\frac{y}{z} - \frac{t}{1.0 - z}\right)
\begin{array}{l}
\mathbf{if}\;\frac{y}{z} - \frac{t}{1.0 - z} = -\infty:\\
\;\;\;\;\frac{x \cdot \left(\left(1.0 - z\right) \cdot y - t \cdot z\right)}{\left(1.0 - z\right) \cdot z}\\

\mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le -5.393223066037323 \cdot 10^{-209}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{1.0 - z} \cdot t\right)\\

\mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le 1.3058854717221127 \cdot 10^{-221}:\\
\;\;\;\;\frac{y \cdot x}{z} + \frac{x \cdot t}{z} \cdot \left(1 + \frac{1.0}{z}\right)\\

\mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le 3.119035244191526 \cdot 10^{+286}:\\
\;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{1.0 - z} \cdot t\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{x \cdot \left(\left(1.0 - z\right) \cdot y - t \cdot z\right)}{\left(1.0 - z\right) \cdot z}\\

\end{array}
double f(double x, double y, double z, double t) {
        double r19623583 = x;
        double r19623584 = y;
        double r19623585 = z;
        double r19623586 = r19623584 / r19623585;
        double r19623587 = t;
        double r19623588 = 1.0;
        double r19623589 = r19623588 - r19623585;
        double r19623590 = r19623587 / r19623589;
        double r19623591 = r19623586 - r19623590;
        double r19623592 = r19623583 * r19623591;
        return r19623592;
}

double f(double x, double y, double z, double t) {
        double r19623593 = y;
        double r19623594 = z;
        double r19623595 = r19623593 / r19623594;
        double r19623596 = t;
        double r19623597 = 1.0;
        double r19623598 = r19623597 - r19623594;
        double r19623599 = r19623596 / r19623598;
        double r19623600 = r19623595 - r19623599;
        double r19623601 = -inf.0;
        bool r19623602 = r19623600 <= r19623601;
        double r19623603 = x;
        double r19623604 = r19623598 * r19623593;
        double r19623605 = r19623596 * r19623594;
        double r19623606 = r19623604 - r19623605;
        double r19623607 = r19623603 * r19623606;
        double r19623608 = r19623598 * r19623594;
        double r19623609 = r19623607 / r19623608;
        double r19623610 = -5.393223066037323e-209;
        bool r19623611 = r19623600 <= r19623610;
        double r19623612 = 1.0;
        double r19623613 = r19623612 / r19623598;
        double r19623614 = r19623613 * r19623596;
        double r19623615 = r19623595 - r19623614;
        double r19623616 = r19623603 * r19623615;
        double r19623617 = 1.3058854717221127e-221;
        bool r19623618 = r19623600 <= r19623617;
        double r19623619 = r19623593 * r19623603;
        double r19623620 = r19623619 / r19623594;
        double r19623621 = r19623603 * r19623596;
        double r19623622 = r19623621 / r19623594;
        double r19623623 = r19623597 / r19623594;
        double r19623624 = r19623612 + r19623623;
        double r19623625 = r19623622 * r19623624;
        double r19623626 = r19623620 + r19623625;
        double r19623627 = 3.119035244191526e+286;
        bool r19623628 = r19623600 <= r19623627;
        double r19623629 = r19623628 ? r19623616 : r19623609;
        double r19623630 = r19623618 ? r19623626 : r19623629;
        double r19623631 = r19623611 ? r19623616 : r19623630;
        double r19623632 = r19623602 ? r19623609 : r19623631;
        return r19623632;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original4.5
Target4.0
Herbie0.4
\[\begin{array}{l} \mathbf{if}\;x \cdot \left(\frac{y}{z} - \frac{t}{1.0 - z}\right) \lt -7.623226303312042 \cdot 10^{-196}:\\ \;\;\;\;x \cdot \left(\frac{y}{z} - t \cdot \frac{1}{1.0 - z}\right)\\ \mathbf{elif}\;x \cdot \left(\frac{y}{z} - \frac{t}{1.0 - z}\right) \lt 1.4133944927702302 \cdot 10^{-211}:\\ \;\;\;\;\frac{y \cdot x}{z} + \left(-\frac{t \cdot x}{1.0 - z}\right)\\ \mathbf{else}:\\ \;\;\;\;x \cdot \left(\frac{y}{z} - t \cdot \frac{1}{1.0 - z}\right)\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if (- (/ y z) (/ t (- 1.0 z))) < -inf.0 or 3.119035244191526e+286 < (- (/ y z) (/ t (- 1.0 z)))

    1. Initial program 49.1

      \[x \cdot \left(\frac{y}{z} - \frac{t}{1.0 - z}\right)\]
    2. Using strategy rm
    3. Applied frac-sub49.2

      \[\leadsto x \cdot \color{blue}{\frac{y \cdot \left(1.0 - z\right) - z \cdot t}{z \cdot \left(1.0 - z\right)}}\]
    4. Applied associate-*r/0.4

      \[\leadsto \color{blue}{\frac{x \cdot \left(y \cdot \left(1.0 - z\right) - z \cdot t\right)}{z \cdot \left(1.0 - z\right)}}\]

    if -inf.0 < (- (/ y z) (/ t (- 1.0 z))) < -5.393223066037323e-209 or 1.3058854717221127e-221 < (- (/ y z) (/ t (- 1.0 z))) < 3.119035244191526e+286

    1. Initial program 0.2

      \[x \cdot \left(\frac{y}{z} - \frac{t}{1.0 - z}\right)\]
    2. Using strategy rm
    3. Applied div-inv0.2

      \[\leadsto x \cdot \left(\frac{y}{z} - \color{blue}{t \cdot \frac{1}{1.0 - z}}\right)\]

    if -5.393223066037323e-209 < (- (/ y z) (/ t (- 1.0 z))) < 1.3058854717221127e-221

    1. Initial program 9.0

      \[x \cdot \left(\frac{y}{z} - \frac{t}{1.0 - z}\right)\]
    2. Using strategy rm
    3. Applied div-inv9.1

      \[\leadsto x \cdot \left(\frac{y}{z} - \color{blue}{t \cdot \frac{1}{1.0 - z}}\right)\]
    4. Taylor expanded around inf 1.7

      \[\leadsto \color{blue}{\frac{x \cdot y}{z} + \left(1.0 \cdot \frac{t \cdot x}{{z}^{2}} + \frac{t \cdot x}{z}\right)}\]
    5. Simplified1.6

      \[\leadsto \color{blue}{\left(\frac{1.0}{z} + 1\right) \cdot \frac{t \cdot x}{z} + \frac{x \cdot y}{z}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{y}{z} - \frac{t}{1.0 - z} = -\infty:\\ \;\;\;\;\frac{x \cdot \left(\left(1.0 - z\right) \cdot y - t \cdot z\right)}{\left(1.0 - z\right) \cdot z}\\ \mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le -5.393223066037323 \cdot 10^{-209}:\\ \;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{1.0 - z} \cdot t\right)\\ \mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le 1.3058854717221127 \cdot 10^{-221}:\\ \;\;\;\;\frac{y \cdot x}{z} + \frac{x \cdot t}{z} \cdot \left(1 + \frac{1.0}{z}\right)\\ \mathbf{elif}\;\frac{y}{z} - \frac{t}{1.0 - z} \le 3.119035244191526 \cdot 10^{+286}:\\ \;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{1.0 - z} \cdot t\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \left(\left(1.0 - z\right) \cdot y - t \cdot z\right)}{\left(1.0 - z\right) \cdot z}\\ \end{array}\]

Reproduce

herbie shell --seed 2019164 
(FPCore (x y z t)
  :name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, C"

  :herbie-target
  (if (< (* x (- (/ y z) (/ t (- 1.0 z)))) -7.623226303312042e-196) (* x (- (/ y z) (* t (/ 1 (- 1.0 z))))) (if (< (* x (- (/ y z) (/ t (- 1.0 z)))) 1.4133944927702302e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1.0 z)))) (* x (- (/ y z) (* t (/ 1 (- 1.0 z)))))))

  (* x (- (/ y z) (/ t (- 1.0 z)))))