Average Error: 1.3 → 1.5
Time: 23.8s
Precision: 64
\[x + y \cdot \frac{z - t}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;y \cdot \frac{z - t}{a - t} \le -4.753267398932855806255398723158550008719 \cdot 10^{44}:\\ \;\;\;\;x + \frac{y}{a - t} \cdot \left(z - t\right)\\ \mathbf{elif}\;y \cdot \frac{z - t}{a - t} \le 17792690225009492051485051387379712:\\ \;\;\;\;\frac{\left(z - t\right) \cdot y}{a - t} + x\\ \mathbf{else}:\\ \;\;\;\;y \cdot \frac{z - t}{a - t} + x\\ \end{array}\]
x + y \cdot \frac{z - t}{a - t}
\begin{array}{l}
\mathbf{if}\;y \cdot \frac{z - t}{a - t} \le -4.753267398932855806255398723158550008719 \cdot 10^{44}:\\
\;\;\;\;x + \frac{y}{a - t} \cdot \left(z - t\right)\\

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

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r14227061 = x;
        double r14227062 = y;
        double r14227063 = z;
        double r14227064 = t;
        double r14227065 = r14227063 - r14227064;
        double r14227066 = a;
        double r14227067 = r14227066 - r14227064;
        double r14227068 = r14227065 / r14227067;
        double r14227069 = r14227062 * r14227068;
        double r14227070 = r14227061 + r14227069;
        return r14227070;
}

double f(double x, double y, double z, double t, double a) {
        double r14227071 = y;
        double r14227072 = z;
        double r14227073 = t;
        double r14227074 = r14227072 - r14227073;
        double r14227075 = a;
        double r14227076 = r14227075 - r14227073;
        double r14227077 = r14227074 / r14227076;
        double r14227078 = r14227071 * r14227077;
        double r14227079 = -4.753267398932856e+44;
        bool r14227080 = r14227078 <= r14227079;
        double r14227081 = x;
        double r14227082 = r14227071 / r14227076;
        double r14227083 = r14227082 * r14227074;
        double r14227084 = r14227081 + r14227083;
        double r14227085 = 1.7792690225009492e+34;
        bool r14227086 = r14227078 <= r14227085;
        double r14227087 = r14227074 * r14227071;
        double r14227088 = r14227087 / r14227076;
        double r14227089 = r14227088 + r14227081;
        double r14227090 = r14227078 + r14227081;
        double r14227091 = r14227086 ? r14227089 : r14227090;
        double r14227092 = r14227080 ? r14227084 : r14227091;
        return r14227092;
}

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

Original1.3
Target0.4
Herbie1.5
\[\begin{array}{l} \mathbf{if}\;y \lt -8.508084860551241069024247453646278348229 \cdot 10^{-17}:\\ \;\;\;\;x + y \cdot \frac{z - t}{a - t}\\ \mathbf{elif}\;y \lt 2.894426862792089097262541964056085749132 \cdot 10^{-49}:\\ \;\;\;\;x + \left(y \cdot \left(z - t\right)\right) \cdot \frac{1}{a - t}\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \frac{z - t}{a - t}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if (* y (/ (- z t) (- a t))) < -4.753267398932856e+44

    1. Initial program 3.1

      \[x + y \cdot \frac{z - t}{a - t}\]
    2. Using strategy rm
    3. Applied div-inv3.2

      \[\leadsto x + y \cdot \color{blue}{\left(\left(z - t\right) \cdot \frac{1}{a - t}\right)}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity3.2

      \[\leadsto x + \color{blue}{\left(1 \cdot y\right)} \cdot \left(\left(z - t\right) \cdot \frac{1}{a - t}\right)\]
    6. Applied associate-*l*3.2

      \[\leadsto x + \color{blue}{1 \cdot \left(y \cdot \left(\left(z - t\right) \cdot \frac{1}{a - t}\right)\right)}\]
    7. Simplified3.3

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

    if -4.753267398932856e+44 < (* y (/ (- z t) (- a t))) < 1.7792690225009492e+34

    1. Initial program 0.3

      \[x + y \cdot \frac{z - t}{a - t}\]
    2. Using strategy rm
    3. Applied associate-*r/0.6

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

    if 1.7792690225009492e+34 < (* y (/ (- z t) (- a t)))

    1. Initial program 2.6

      \[x + y \cdot \frac{z - t}{a - t}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification1.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \cdot \frac{z - t}{a - t} \le -4.753267398932855806255398723158550008719 \cdot 10^{44}:\\ \;\;\;\;x + \frac{y}{a - t} \cdot \left(z - t\right)\\ \mathbf{elif}\;y \cdot \frac{z - t}{a - t} \le 17792690225009492051485051387379712:\\ \;\;\;\;\frac{\left(z - t\right) \cdot y}{a - t} + x\\ \mathbf{else}:\\ \;\;\;\;y \cdot \frac{z - t}{a - t} + x\\ \end{array}\]

Reproduce

herbie shell --seed 2019171 
(FPCore (x y z t a)
  :name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"

  :herbie-target
  (if (< y -8.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1.0 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))

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