Average Error: 4.7 → 3.9
Time: 2.5m
Precision: 64
\[x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.26312775728388193264462803930651602739 \cdot 10^{-234} \lor \neg \left(z \le 475836.5391296167508698999881744384765625\right):\\ \;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{\frac{1 - z}{t}}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \left(y \cdot \left(1 - z\right) - z \cdot t\right)}{z \cdot \left(1 - z\right)}\\ \end{array}\]
x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right)
\begin{array}{l}
\mathbf{if}\;z \le -1.26312775728388193264462803930651602739 \cdot 10^{-234} \lor \neg \left(z \le 475836.5391296167508698999881744384765625\right):\\
\;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{\frac{1 - z}{t}}\right)\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r964542 = x;
        double r964543 = y;
        double r964544 = z;
        double r964545 = r964543 / r964544;
        double r964546 = t;
        double r964547 = 1.0;
        double r964548 = r964547 - r964544;
        double r964549 = r964546 / r964548;
        double r964550 = r964545 - r964549;
        double r964551 = r964542 * r964550;
        return r964551;
}

double f(double x, double y, double z, double t) {
        double r964552 = z;
        double r964553 = -1.263127757283882e-234;
        bool r964554 = r964552 <= r964553;
        double r964555 = 475836.53912961675;
        bool r964556 = r964552 <= r964555;
        double r964557 = !r964556;
        bool r964558 = r964554 || r964557;
        double r964559 = x;
        double r964560 = y;
        double r964561 = r964560 / r964552;
        double r964562 = 1.0;
        double r964563 = 1.0;
        double r964564 = r964563 - r964552;
        double r964565 = t;
        double r964566 = r964564 / r964565;
        double r964567 = r964562 / r964566;
        double r964568 = r964561 - r964567;
        double r964569 = r964559 * r964568;
        double r964570 = r964560 * r964564;
        double r964571 = r964552 * r964565;
        double r964572 = r964570 - r964571;
        double r964573 = r964559 * r964572;
        double r964574 = r964552 * r964564;
        double r964575 = r964573 / r964574;
        double r964576 = r964558 ? r964569 : r964575;
        return r964576;
}

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.7
Target4.4
Herbie3.9
\[\begin{array}{l} \mathbf{if}\;x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right) \lt -7.623226303312042442144691872793570510727 \cdot 10^{-196}:\\ \;\;\;\;x \cdot \left(\frac{y}{z} - t \cdot \frac{1}{1 - z}\right)\\ \mathbf{elif}\;x \cdot \left(\frac{y}{z} - \frac{t}{1 - z}\right) \lt 1.413394492770230216018398633584271456447 \cdot 10^{-211}:\\ \;\;\;\;\frac{y \cdot x}{z} + \left(-\frac{t \cdot x}{1 - z}\right)\\ \mathbf{else}:\\ \;\;\;\;x \cdot \left(\frac{y}{z} - t \cdot \frac{1}{1 - z}\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -1.263127757283882e-234 or 475836.53912961675 < z

    1. Initial program 3.1

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

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

    if -1.263127757283882e-234 < z < 475836.53912961675

    1. Initial program 9.3

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.26312775728388193264462803930651602739 \cdot 10^{-234} \lor \neg \left(z \le 475836.5391296167508698999881744384765625\right):\\ \;\;\;\;x \cdot \left(\frac{y}{z} - \frac{1}{\frac{1 - z}{t}}\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x \cdot \left(y \cdot \left(1 - z\right) - z \cdot t\right)}{z \cdot \left(1 - z\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019235 +o rules:numerics
(FPCore (x y z t)
  :name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, C"
  :precision binary64

  :herbie-target
  (if (< (* x (- (/ y z) (/ t (- 1 z)))) -7.62322630331204244e-196) (* x (- (/ y z) (* t (/ 1 (- 1 z))))) (if (< (* x (- (/ y z) (/ t (- 1 z)))) 1.41339449277023022e-211) (+ (/ (* y x) z) (- (/ (* t x) (- 1 z)))) (* x (- (/ y z) (* t (/ 1 (- 1 z)))))))

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