Average Error: 6.4 → 2.7
Time: 6.4s
Precision: 64
\[x + \frac{y \cdot \left(z - t\right)}{a}\]
\[x + \frac{y}{a} \cdot \left(z - t\right)\]
x + \frac{y \cdot \left(z - t\right)}{a}
x + \frac{y}{a} \cdot \left(z - t\right)
double f(double x, double y, double z, double t, double a) {
        double r257678 = x;
        double r257679 = y;
        double r257680 = z;
        double r257681 = t;
        double r257682 = r257680 - r257681;
        double r257683 = r257679 * r257682;
        double r257684 = a;
        double r257685 = r257683 / r257684;
        double r257686 = r257678 + r257685;
        return r257686;
}

double f(double x, double y, double z, double t, double a) {
        double r257687 = x;
        double r257688 = y;
        double r257689 = a;
        double r257690 = r257688 / r257689;
        double r257691 = z;
        double r257692 = t;
        double r257693 = r257691 - r257692;
        double r257694 = r257690 * r257693;
        double r257695 = r257687 + r257694;
        return r257695;
}

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

Original6.4
Target0.7
Herbie2.7
\[\begin{array}{l} \mathbf{if}\;y \lt -1.07612662163899753216593153715602325729 \cdot 10^{-10}:\\ \;\;\;\;x + \frac{1}{\frac{\frac{a}{z - t}}{y}}\\ \mathbf{elif}\;y \lt 2.894426862792089097262541964056085749132 \cdot 10^{-49}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if a < -255.05455303688356

    1. Initial program 10.1

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

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

    if -255.05455303688356 < a < 1.5612962250566523e-121

    1. Initial program 0.8

      \[x + \frac{y \cdot \left(z - t\right)}{a}\]
    2. Using strategy rm
    3. Applied clear-num0.9

      \[\leadsto x + \color{blue}{\frac{1}{\frac{a}{y \cdot \left(z - t\right)}}}\]
    4. Using strategy rm
    5. Applied associate-/r*4.2

      \[\leadsto x + \frac{1}{\color{blue}{\frac{\frac{a}{y}}{z - t}}}\]
    6. Using strategy rm
    7. Applied *-un-lft-identity4.2

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

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

      \[\leadsto x + \frac{1}{\color{blue}{\frac{a}{1} \cdot \frac{\frac{1}{y}}{z - t}}}\]
    10. Simplified1.0

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

    if 1.5612962250566523e-121 < a

    1. Initial program 7.5

      \[x + \frac{y \cdot \left(z - t\right)}{a}\]
    2. Using strategy rm
    3. Applied clear-num7.5

      \[\leadsto x + \color{blue}{\frac{1}{\frac{a}{y \cdot \left(z - t\right)}}}\]
    4. Using strategy rm
    5. Applied associate-/r*2.3

      \[\leadsto x + \frac{1}{\color{blue}{\frac{\frac{a}{y}}{z - t}}}\]
    6. Using strategy rm
    7. Applied div-inv2.3

      \[\leadsto x + \frac{1}{\color{blue}{\frac{a}{y} \cdot \frac{1}{z - t}}}\]
    8. Applied *-un-lft-identity2.3

      \[\leadsto x + \frac{\color{blue}{1 \cdot 1}}{\frac{a}{y} \cdot \frac{1}{z - t}}\]
    9. Applied times-frac2.4

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

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

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

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

Reproduce

herbie shell --seed 2019308 
(FPCore (x y z t a)
  :name "Optimisation.CirclePacking:place from circle-packing-0.1.0.4, E"
  :precision binary64

  :herbie-target
  (if (< y -1.07612662163899753e-10) (+ x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.8944268627920891e-49) (+ x (/ (* y (- z t)) a)) (+ x (/ y (/ a (- z t))))))

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