Average Error: 10.8 → 0.4
Time: 24.1s
Precision: 64
\[x + \frac{y \cdot \left(z - t\right)}{a - t}\]
\[\begin{array}{l} \mathbf{if}\;y \le -1.114682128300157975163447253342211462313 \cdot 10^{-27}:\\ \;\;\;\;\mathsf{fma}\left(y, \frac{z}{a - t} - \frac{t}{a - t}, x\right)\\ \mathbf{elif}\;y \le 1.211877331305093968875689779186623802426 \cdot 10^{-80}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(y, \frac{z}{a - t} - \frac{t}{a - t}, x\right)\\ \end{array}\]
x + \frac{y \cdot \left(z - t\right)}{a - t}
\begin{array}{l}
\mathbf{if}\;y \le -1.114682128300157975163447253342211462313 \cdot 10^{-27}:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{z}{a - t} - \frac{t}{a - t}, x\right)\\

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

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(y, \frac{z}{a - t} - \frac{t}{a - t}, x\right)\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r27354065 = x;
        double r27354066 = y;
        double r27354067 = z;
        double r27354068 = t;
        double r27354069 = r27354067 - r27354068;
        double r27354070 = r27354066 * r27354069;
        double r27354071 = a;
        double r27354072 = r27354071 - r27354068;
        double r27354073 = r27354070 / r27354072;
        double r27354074 = r27354065 + r27354073;
        return r27354074;
}

double f(double x, double y, double z, double t, double a) {
        double r27354075 = y;
        double r27354076 = -1.114682128300158e-27;
        bool r27354077 = r27354075 <= r27354076;
        double r27354078 = z;
        double r27354079 = a;
        double r27354080 = t;
        double r27354081 = r27354079 - r27354080;
        double r27354082 = r27354078 / r27354081;
        double r27354083 = r27354080 / r27354081;
        double r27354084 = r27354082 - r27354083;
        double r27354085 = x;
        double r27354086 = fma(r27354075, r27354084, r27354085);
        double r27354087 = 1.211877331305094e-80;
        bool r27354088 = r27354075 <= r27354087;
        double r27354089 = r27354078 - r27354080;
        double r27354090 = r27354075 * r27354089;
        double r27354091 = r27354090 / r27354081;
        double r27354092 = r27354085 + r27354091;
        double r27354093 = r27354088 ? r27354092 : r27354086;
        double r27354094 = r27354077 ? r27354086 : r27354093;
        return r27354094;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Target

Original10.8
Target1.2
Herbie0.4
\[x + \frac{y}{\frac{a - t}{z - t}}\]

Derivation

  1. Split input into 2 regimes
  2. if y < -1.114682128300158e-27 or 1.211877331305094e-80 < y

    1. Initial program 19.3

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

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

      \[\leadsto \mathsf{fma}\left(y, \color{blue}{\frac{z}{a - t} - \frac{t}{a - t}}, x\right)\]

    if -1.114682128300158e-27 < y < 1.211877331305094e-80

    1. Initial program 0.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -1.114682128300157975163447253342211462313 \cdot 10^{-27}:\\ \;\;\;\;\mathsf{fma}\left(y, \frac{z}{a - t} - \frac{t}{a - t}, x\right)\\ \mathbf{elif}\;y \le 1.211877331305093968875689779186623802426 \cdot 10^{-80}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(y, \frac{z}{a - t} - \frac{t}{a - t}, x\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019192 +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))))