Average Error: 10.6 → 0.7
Time: 4.6s
Precision: 64
\[x + \frac{y \cdot \left(z - t\right)}{z - a}\]
\[\begin{array}{l} \mathbf{if}\;\frac{y \cdot \left(z - t\right)}{z - a} = -\infty \lor \neg \left(\frac{y \cdot \left(z - t\right)}{z - a} \le 1.566452066364055 \cdot 10^{119}\right):\\ \;\;\;\;x + y \cdot \frac{z - t}{z - a}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{z - a}\\ \end{array}\]
x + \frac{y \cdot \left(z - t\right)}{z - a}
\begin{array}{l}
\mathbf{if}\;\frac{y \cdot \left(z - t\right)}{z - a} = -\infty \lor \neg \left(\frac{y \cdot \left(z - t\right)}{z - a} \le 1.566452066364055 \cdot 10^{119}\right):\\
\;\;\;\;x + y \cdot \frac{z - t}{z - a}\\

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r580656 = x;
        double r580657 = y;
        double r580658 = z;
        double r580659 = t;
        double r580660 = r580658 - r580659;
        double r580661 = r580657 * r580660;
        double r580662 = a;
        double r580663 = r580658 - r580662;
        double r580664 = r580661 / r580663;
        double r580665 = r580656 + r580664;
        return r580665;
}

double f(double x, double y, double z, double t, double a) {
        double r580666 = y;
        double r580667 = z;
        double r580668 = t;
        double r580669 = r580667 - r580668;
        double r580670 = r580666 * r580669;
        double r580671 = a;
        double r580672 = r580667 - r580671;
        double r580673 = r580670 / r580672;
        double r580674 = -inf.0;
        bool r580675 = r580673 <= r580674;
        double r580676 = 1.5664520663640548e+119;
        bool r580677 = r580673 <= r580676;
        double r580678 = !r580677;
        bool r580679 = r580675 || r580678;
        double r580680 = x;
        double r580681 = r580669 / r580672;
        double r580682 = r580666 * r580681;
        double r580683 = r580680 + r580682;
        double r580684 = r580680 + r580673;
        double r580685 = r580679 ? r580683 : r580684;
        return r580685;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original10.6
Target1.3
Herbie0.7
\[x + \frac{y}{\frac{z - a}{z - t}}\]

Derivation

  1. Split input into 2 regimes
  2. if (/ (* y (- z t)) (- z a)) < -inf.0 or 1.5664520663640548e+119 < (/ (* y (- z t)) (- z a))

    1. Initial program 44.8

      \[x + \frac{y \cdot \left(z - t\right)}{z - a}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity44.8

      \[\leadsto x + \frac{y \cdot \left(z - t\right)}{\color{blue}{1 \cdot \left(z - a\right)}}\]
    4. Applied times-frac2.1

      \[\leadsto x + \color{blue}{\frac{y}{1} \cdot \frac{z - t}{z - a}}\]
    5. Simplified2.1

      \[\leadsto x + \color{blue}{y} \cdot \frac{z - t}{z - a}\]

    if -inf.0 < (/ (* y (- z t)) (- z a)) < 1.5664520663640548e+119

    1. Initial program 0.3

      \[x + \frac{y \cdot \left(z - t\right)}{z - a}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{y \cdot \left(z - t\right)}{z - a} = -\infty \lor \neg \left(\frac{y \cdot \left(z - t\right)}{z - a} \le 1.566452066364055 \cdot 10^{119}\right):\\ \;\;\;\;x + y \cdot \frac{z - t}{z - a}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{z - a}\\ \end{array}\]

Reproduce

herbie shell --seed 2020035 +o rules:numerics
(FPCore (x y z t a)
  :name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisTicks from plot-0.2.3.4, A"
  :precision binary64

  :herbie-target
  (+ x (/ y (/ (- z a) (- z t))))

  (+ x (/ (* y (- z t)) (- z a))))