Average Error: 6.8 → 1.8
Time: 16.3s
Precision: 64
\[x + \frac{y \cdot \left(z - x\right)}{t}\]
\[\frac{z - x}{\frac{t}{y}} + x\]
x + \frac{y \cdot \left(z - x\right)}{t}
\frac{z - x}{\frac{t}{y}} + x
double f(double x, double y, double z, double t) {
        double r327609 = x;
        double r327610 = y;
        double r327611 = z;
        double r327612 = r327611 - r327609;
        double r327613 = r327610 * r327612;
        double r327614 = t;
        double r327615 = r327613 / r327614;
        double r327616 = r327609 + r327615;
        return r327616;
}

double f(double x, double y, double z, double t) {
        double r327617 = z;
        double r327618 = x;
        double r327619 = r327617 - r327618;
        double r327620 = t;
        double r327621 = y;
        double r327622 = r327620 / r327621;
        double r327623 = r327619 / r327622;
        double r327624 = r327623 + r327618;
        return r327624;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original6.8
Target1.9
Herbie1.8
\[x - \left(x \cdot \frac{y}{t} + \left(-z\right) \cdot \frac{y}{t}\right)\]

Derivation

  1. Initial program 6.8

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

    \[\leadsto x + \color{blue}{1 \cdot \frac{y \cdot \left(z - x\right)}{t}}\]
  4. Applied *-un-lft-identity6.8

    \[\leadsto \color{blue}{1 \cdot x} + 1 \cdot \frac{y \cdot \left(z - x\right)}{t}\]
  5. Applied distribute-lft-out6.8

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

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

    \[\leadsto \frac{z - x}{\frac{t}{y}} + x\]

Reproduce

herbie shell --seed 2019174 
(FPCore (x y z t)
  :name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, D"

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

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