Average Error: 9.2 → 0.3
Time: 3.1s
Precision: 64
\[\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.49705735611404329 \cdot 10^{22} \lor \neg \left(z \le 178345.007446012256\right):\\ \;\;\;\;\mathsf{fma}\left(2, \frac{1}{t}, \frac{x}{y} - 2\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{y} + \frac{\frac{\mathsf{fma}\left(z, 2 \cdot \left(1 - t\right), 2\right)}{t}}{z}\\ \end{array}\]
\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}
\begin{array}{l}
\mathbf{if}\;z \le -1.49705735611404329 \cdot 10^{22} \lor \neg \left(z \le 178345.007446012256\right):\\
\;\;\;\;\mathsf{fma}\left(2, \frac{1}{t}, \frac{x}{y} - 2\right)\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r761282 = x;
        double r761283 = y;
        double r761284 = r761282 / r761283;
        double r761285 = 2.0;
        double r761286 = z;
        double r761287 = r761286 * r761285;
        double r761288 = 1.0;
        double r761289 = t;
        double r761290 = r761288 - r761289;
        double r761291 = r761287 * r761290;
        double r761292 = r761285 + r761291;
        double r761293 = r761289 * r761286;
        double r761294 = r761292 / r761293;
        double r761295 = r761284 + r761294;
        return r761295;
}

double f(double x, double y, double z, double t) {
        double r761296 = z;
        double r761297 = -1.4970573561140433e+22;
        bool r761298 = r761296 <= r761297;
        double r761299 = 178345.00744601226;
        bool r761300 = r761296 <= r761299;
        double r761301 = !r761300;
        bool r761302 = r761298 || r761301;
        double r761303 = 2.0;
        double r761304 = 1.0;
        double r761305 = t;
        double r761306 = r761304 / r761305;
        double r761307 = x;
        double r761308 = y;
        double r761309 = r761307 / r761308;
        double r761310 = r761309 - r761303;
        double r761311 = fma(r761303, r761306, r761310);
        double r761312 = 1.0;
        double r761313 = r761312 - r761305;
        double r761314 = r761303 * r761313;
        double r761315 = fma(r761296, r761314, r761303);
        double r761316 = r761315 / r761305;
        double r761317 = r761316 / r761296;
        double r761318 = r761309 + r761317;
        double r761319 = r761302 ? r761311 : r761318;
        return r761319;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original9.2
Target0.1
Herbie0.3
\[\frac{\frac{2}{z} + 2}{t} - \left(2 - \frac{x}{y}\right)\]

Derivation

  1. Split input into 2 regimes
  2. if z < -1.4970573561140433e+22 or 178345.00744601226 < z

    1. Initial program 16.5

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{\mathsf{fma}\left(z, 1 - t, 1\right)}{z}, \frac{2}{t}, \frac{x}{y}\right)}\]
    3. Taylor expanded around inf 0.1

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

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

    if -1.4970573561140433e+22 < z < 178345.00744601226

    1. Initial program 0.2

      \[\frac{x}{y} + \frac{2 + \left(z \cdot 2\right) \cdot \left(1 - t\right)}{t \cdot z}\]
    2. Using strategy rm
    3. Applied associate-/r*0.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.49705735611404329 \cdot 10^{22} \lor \neg \left(z \le 178345.007446012256\right):\\ \;\;\;\;\mathsf{fma}\left(2, \frac{1}{t}, \frac{x}{y} - 2\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{y} + \frac{\frac{\mathsf{fma}\left(z, 2 \cdot \left(1 - t\right), 2\right)}{t}}{z}\\ \end{array}\]

Reproduce

herbie shell --seed 2020089 +o rules:numerics
(FPCore (x y z t)
  :name "Data.HashTable.ST.Basic:computeOverhead from hashtables-1.2.0.2"
  :precision binary64

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

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