Average Error: 6.0 → 1.3
Time: 6.4s
Precision: 64
\[x + \frac{y \cdot \left(z - t\right)}{a}\]
\[\begin{array}{l} \mathbf{if}\;y \le -2.0796321081405416 \cdot 10^{65} \lor \neg \left(y \le 1.12588847867946582 \cdot 10^{-121}\right):\\ \;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a}\\ \end{array}\]
x + \frac{y \cdot \left(z - t\right)}{a}
\begin{array}{l}
\mathbf{if}\;y \le -2.0796321081405416 \cdot 10^{65} \lor \neg \left(y \le 1.12588847867946582 \cdot 10^{-121}\right):\\
\;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\

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

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r432975 = x;
        double r432976 = y;
        double r432977 = z;
        double r432978 = t;
        double r432979 = r432977 - r432978;
        double r432980 = r432976 * r432979;
        double r432981 = a;
        double r432982 = r432980 / r432981;
        double r432983 = r432975 + r432982;
        return r432983;
}

double f(double x, double y, double z, double t, double a) {
        double r432984 = y;
        double r432985 = -2.0796321081405416e+65;
        bool r432986 = r432984 <= r432985;
        double r432987 = 1.1258884786794658e-121;
        bool r432988 = r432984 <= r432987;
        double r432989 = !r432988;
        bool r432990 = r432986 || r432989;
        double r432991 = x;
        double r432992 = a;
        double r432993 = z;
        double r432994 = t;
        double r432995 = r432993 - r432994;
        double r432996 = r432992 / r432995;
        double r432997 = r432984 / r432996;
        double r432998 = r432991 + r432997;
        double r432999 = r432984 * r432995;
        double r433000 = r432999 / r432992;
        double r433001 = r432991 + r433000;
        double r433002 = r432990 ? r432998 : r433001;
        return r433002;
}

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.0
Target0.7
Herbie1.3
\[\begin{array}{l} \mathbf{if}\;y \lt -1.07612662163899753 \cdot 10^{-10}:\\ \;\;\;\;x + \frac{1}{\frac{\frac{a}{z - t}}{y}}\\ \mathbf{elif}\;y \lt 2.8944268627920891 \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 2 regimes
  2. if y < -2.0796321081405416e+65 or 1.1258884786794658e-121 < y

    1. Initial program 12.5

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

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

    if -2.0796321081405416e+65 < y < 1.1258884786794658e-121

    1. Initial program 0.7

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -2.0796321081405416 \cdot 10^{65} \lor \neg \left(y \le 1.12588847867946582 \cdot 10^{-121}\right):\\ \;\;\;\;x + \frac{y}{\frac{a}{z - t}}\\ \mathbf{else}:\\ \;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2020027 
(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.0761266216389975e-10) (+ x (/ 1 (/ (/ a (- z t)) y))) (if (< y 2.894426862792089e-49) (+ x (/ (* y (- z t)) a)) (+ x (/ y (/ a (- z t))))))

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