x + y \cdot \frac{z - t}{a - t}\begin{array}{l}
\mathbf{if}\;y \le -186062994224651239424:\\
\;\;\;\;\left(z - t\right) \cdot \frac{y}{a - t} + x\\
\mathbf{elif}\;y \le 1.22452106600687926588900523708060487951 \cdot 10^{-94}:\\
\;\;\;\;x + \frac{y \cdot \left(z - t\right)}{a - t}\\
\mathbf{else}:\\
\;\;\;\;x + y \cdot \frac{z - t}{a - t}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r375086 = x;
double r375087 = y;
double r375088 = z;
double r375089 = t;
double r375090 = r375088 - r375089;
double r375091 = a;
double r375092 = r375091 - r375089;
double r375093 = r375090 / r375092;
double r375094 = r375087 * r375093;
double r375095 = r375086 + r375094;
return r375095;
}
double f(double x, double y, double z, double t, double a) {
double r375096 = y;
double r375097 = -1.8606299422465124e+20;
bool r375098 = r375096 <= r375097;
double r375099 = z;
double r375100 = t;
double r375101 = r375099 - r375100;
double r375102 = a;
double r375103 = r375102 - r375100;
double r375104 = r375096 / r375103;
double r375105 = r375101 * r375104;
double r375106 = x;
double r375107 = r375105 + r375106;
double r375108 = 1.2245210660068793e-94;
bool r375109 = r375096 <= r375108;
double r375110 = r375096 * r375101;
double r375111 = r375110 / r375103;
double r375112 = r375106 + r375111;
double r375113 = r375101 / r375103;
double r375114 = r375096 * r375113;
double r375115 = r375106 + r375114;
double r375116 = r375109 ? r375112 : r375115;
double r375117 = r375098 ? r375107 : r375116;
return r375117;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 1.4 |
|---|---|
| Target | 0.4 |
| Herbie | 1.0 |
if y < -1.8606299422465124e+20Initial program 0.8
rmApplied pow10.8
Applied pow10.8
Applied pow-prod-down0.8
Simplified3.0
if -1.8606299422465124e+20 < y < 1.2245210660068793e-94Initial program 2.2
rmApplied associate-*r/0.3
if 1.2245210660068793e-94 < y Initial program 0.5
Final simplification1.0
herbie shell --seed 2019323
(FPCore (x y z t a)
:name "Graphics.Rendering.Plot.Render.Plot.Axis:renderAxisLine from plot-0.2.3.4, B"
:precision binary64
:herbie-target
(if (< y -8.508084860551241e-17) (+ x (* y (/ (- z t) (- a t)))) (if (< y 2.894426862792089e-49) (+ x (* (* y (- z t)) (/ 1 (- a t)))) (+ x (* y (/ (- z t) (- a t))))))
(+ x (* y (/ (- z t) (- a t)))))