Average Error: 10.0 → 0.8
Time: 21.8s
Precision: 64
\[x + \frac{y \cdot \left(z - t\right)}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;y \le -1.4067031403702933 \cdot 10^{-150}:\\ \;\;\;\;x + y \cdot \frac{z - t}{a - t}\\ \mathbf{elif}\;y \le 4.050712264929229 \cdot 10^{+58}:\\ \;\;\;\;\frac{\left(z - t\right) \cdot y}{a - t} + x\\ \mathbf{else}:\\ \;\;\;\;x + y \cdot \frac{z - t}{a - t}\\ \end{array}\]
x + \frac{y \cdot \left(z - t\right)}{a - t}
\begin{array}{l}
\mathbf{if}\;y \le -1.4067031403702933 \cdot 10^{-150}:\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\

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

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r25527789 = x;
        double r25527790 = y;
        double r25527791 = z;
        double r25527792 = t;
        double r25527793 = r25527791 - r25527792;
        double r25527794 = r25527790 * r25527793;
        double r25527795 = a;
        double r25527796 = r25527795 - r25527792;
        double r25527797 = r25527794 / r25527796;
        double r25527798 = r25527789 + r25527797;
        return r25527798;
}

double f(double x, double y, double z, double t, double a) {
        double r25527799 = y;
        double r25527800 = -1.4067031403702933e-150;
        bool r25527801 = r25527799 <= r25527800;
        double r25527802 = x;
        double r25527803 = z;
        double r25527804 = t;
        double r25527805 = r25527803 - r25527804;
        double r25527806 = a;
        double r25527807 = r25527806 - r25527804;
        double r25527808 = r25527805 / r25527807;
        double r25527809 = r25527799 * r25527808;
        double r25527810 = r25527802 + r25527809;
        double r25527811 = 4.050712264929229e+58;
        bool r25527812 = r25527799 <= r25527811;
        double r25527813 = r25527805 * r25527799;
        double r25527814 = r25527813 / r25527807;
        double r25527815 = r25527814 + r25527802;
        double r25527816 = r25527812 ? r25527815 : r25527810;
        double r25527817 = r25527801 ? r25527810 : r25527816;
        return r25527817;
}

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.0
Target1.2
Herbie0.8
\[x + \frac{y}{\frac{a - t}{z - t}}\]

Derivation

  1. Split input into 2 regimes
  2. if y < -1.4067031403702933e-150 or 4.050712264929229e+58 < y

    1. Initial program 17.6

      \[x + \frac{y \cdot \left(z - t\right)}{a - t}\]
    2. Simplified3.1

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{y}{a - t}, z - t, x\right)}\]
    3. Using strategy rm
    4. Applied clear-num3.2

      \[\leadsto \mathsf{fma}\left(\color{blue}{\frac{1}{\frac{a - t}{y}}}, z - t, x\right)\]
    5. Using strategy rm
    6. Applied fma-udef3.2

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

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

    if -1.4067031403702933e-150 < y < 4.050712264929229e+58

    1. Initial program 0.9

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

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

Reproduce

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

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

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