Average Error: 10.1 → 1.2
Time: 3.5s
Precision: 64
\[x + \frac{y \cdot \left(z - t\right)}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;y \le -3.411193258922676914246366629914191895999 \cdot 10^{-203}:\\ \;\;\;\;y \cdot \frac{z - t}{a - t} + x\\ \mathbf{elif}\;y \le 3.141542066260724965673573068949770532037 \cdot 10^{-88}:\\ \;\;\;\;1 \cdot \frac{\left(z - t\right) \cdot y}{a - t} + x\\ \mathbf{else}:\\ \;\;\;\;\frac{y}{a - t} \cdot \left(z - t\right) + x\\ \end{array}\]
x + \frac{y \cdot \left(z - t\right)}{a - t}
\begin{array}{l}
\mathbf{if}\;y \le -3.411193258922676914246366629914191895999 \cdot 10^{-203}:\\
\;\;\;\;y \cdot \frac{z - t}{a - t} + x\\

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

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r680116 = x;
        double r680117 = y;
        double r680118 = z;
        double r680119 = t;
        double r680120 = r680118 - r680119;
        double r680121 = r680117 * r680120;
        double r680122 = a;
        double r680123 = r680122 - r680119;
        double r680124 = r680121 / r680123;
        double r680125 = r680116 + r680124;
        return r680125;
}

double f(double x, double y, double z, double t, double a) {
        double r680126 = y;
        double r680127 = -3.411193258922677e-203;
        bool r680128 = r680126 <= r680127;
        double r680129 = z;
        double r680130 = t;
        double r680131 = r680129 - r680130;
        double r680132 = a;
        double r680133 = r680132 - r680130;
        double r680134 = r680131 / r680133;
        double r680135 = r680126 * r680134;
        double r680136 = x;
        double r680137 = r680135 + r680136;
        double r680138 = 3.141542066260725e-88;
        bool r680139 = r680126 <= r680138;
        double r680140 = 1.0;
        double r680141 = r680131 * r680126;
        double r680142 = r680141 / r680133;
        double r680143 = r680140 * r680142;
        double r680144 = r680143 + r680136;
        double r680145 = r680126 / r680133;
        double r680146 = r680145 * r680131;
        double r680147 = r680146 + r680136;
        double r680148 = r680139 ? r680144 : r680147;
        double r680149 = r680128 ? r680137 : r680148;
        return r680149;
}

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

Derivation

  1. Split input into 3 regimes
  2. if y < -3.411193258922677e-203

    1. Initial program 12.1

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

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

      \[\leadsto \color{blue}{\frac{y}{a - t} \cdot \left(z - t\right) + x}\]
    5. Using strategy rm
    6. Applied div-inv2.7

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

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

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

    if -3.411193258922677e-203 < y < 3.141542066260725e-88

    1. Initial program 0.4

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

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

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

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

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

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

    if 3.141542066260725e-88 < y

    1. Initial program 16.3

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

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

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

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

Reproduce

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

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

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