Average Error: 6.1 → 0.8
Time: 13.0s
Precision: 64
\[x + \frac{\left(y - x\right) \cdot z}{t}\]
\[\begin{array}{l} \mathbf{if}\;x + \frac{\left(y - x\right) \cdot z}{t} = -\infty:\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{t} - \frac{x}{t}, z, x\right)\\ \mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le 4.84668724673702282414318349461758654708 \cdot 10^{282}:\\ \;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\ \mathbf{else}:\\ \;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\ \end{array}\]
x + \frac{\left(y - x\right) \cdot z}{t}
\begin{array}{l}
\mathbf{if}\;x + \frac{\left(y - x\right) \cdot z}{t} = -\infty:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t} - \frac{x}{t}, z, x\right)\\

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

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

\end{array}
double f(double x, double y, double z, double t) {
        double r432512 = x;
        double r432513 = y;
        double r432514 = r432513 - r432512;
        double r432515 = z;
        double r432516 = r432514 * r432515;
        double r432517 = t;
        double r432518 = r432516 / r432517;
        double r432519 = r432512 + r432518;
        return r432519;
}

double f(double x, double y, double z, double t) {
        double r432520 = x;
        double r432521 = y;
        double r432522 = r432521 - r432520;
        double r432523 = z;
        double r432524 = r432522 * r432523;
        double r432525 = t;
        double r432526 = r432524 / r432525;
        double r432527 = r432520 + r432526;
        double r432528 = -inf.0;
        bool r432529 = r432527 <= r432528;
        double r432530 = r432521 / r432525;
        double r432531 = r432520 / r432525;
        double r432532 = r432530 - r432531;
        double r432533 = fma(r432532, r432523, r432520);
        double r432534 = 4.846687246737023e+282;
        bool r432535 = r432527 <= r432534;
        double r432536 = r432523 / r432525;
        double r432537 = r432522 * r432536;
        double r432538 = r432520 + r432537;
        double r432539 = r432535 ? r432527 : r432538;
        double r432540 = r432529 ? r432533 : r432539;
        return r432540;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original6.1
Target2.0
Herbie0.8
\[\begin{array}{l} \mathbf{if}\;x \lt -9.025511195533004570453352523209034680317 \cdot 10^{-135}:\\ \;\;\;\;x - \frac{z}{t} \cdot \left(x - y\right)\\ \mathbf{elif}\;x \lt 4.275032163700714748507147332551979944314 \cdot 10^{-250}:\\ \;\;\;\;x + \frac{y - x}{t} \cdot z\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y - x}{\frac{t}{z}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if (+ x (/ (* (- y x) z) t)) < -inf.0

    1. Initial program 64.0

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

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

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

    if -inf.0 < (+ x (/ (* (- y x) z) t)) < 4.846687246737023e+282

    1. Initial program 0.7

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

    if 4.846687246737023e+282 < (+ x (/ (* (- y x) z) t))

    1. Initial program 42.0

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

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;x + \frac{\left(y - x\right) \cdot z}{t} = -\infty:\\ \;\;\;\;\mathsf{fma}\left(\frac{y}{t} - \frac{x}{t}, z, x\right)\\ \mathbf{elif}\;x + \frac{\left(y - x\right) \cdot z}{t} \le 4.84668724673702282414318349461758654708 \cdot 10^{282}:\\ \;\;\;\;x + \frac{\left(y - x\right) \cdot z}{t}\\ \mathbf{else}:\\ \;\;\;\;x + \left(y - x\right) \cdot \frac{z}{t}\\ \end{array}\]

Reproduce

herbie shell --seed 2019208 +o rules:numerics
(FPCore (x y z t)
  :name "Numeric.Histogram:binBounds from Chart-1.5.3"
  :precision binary64

  :herbie-target
  (if (< x -9.0255111955330046e-135) (- x (* (/ z t) (- x y))) (if (< x 4.2750321637007147e-250) (+ x (* (/ (- y x) t) z)) (+ x (/ (- y x) (/ t z)))))

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