x \cdot \frac{\frac{y}{z} \cdot t}{t}\begin{array}{l}
\mathbf{if}\;\frac{y}{z} \le -1.081925593636316638624250852721330734754 \cdot 10^{268} \lor \neg \left(\frac{y}{z} \le -1.636189466711752142567162663177727587498 \cdot 10^{-114} \lor \neg \left(\frac{y}{z} \le 1.319155274396128272951438676958151064215 \cdot 10^{-321}\right) \land \frac{y}{z} \le 1.104049436697308873782781562368572098325 \cdot 10^{252}\right):\\
\;\;\;\;y \cdot \frac{x}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{y}{z} \cdot x\\
\end{array}double f(double x, double y, double z, double t) {
double r365271 = x;
double r365272 = y;
double r365273 = z;
double r365274 = r365272 / r365273;
double r365275 = t;
double r365276 = r365274 * r365275;
double r365277 = r365276 / r365275;
double r365278 = r365271 * r365277;
return r365278;
}
double f(double x, double y, double z, double __attribute__((unused)) t) {
double r365279 = y;
double r365280 = z;
double r365281 = r365279 / r365280;
double r365282 = -1.0819255936363166e+268;
bool r365283 = r365281 <= r365282;
double r365284 = -1.636189466711752e-114;
bool r365285 = r365281 <= r365284;
double r365286 = 1.3191552743961e-321;
bool r365287 = r365281 <= r365286;
double r365288 = !r365287;
double r365289 = 1.1040494366973089e+252;
bool r365290 = r365281 <= r365289;
bool r365291 = r365288 && r365290;
bool r365292 = r365285 || r365291;
double r365293 = !r365292;
bool r365294 = r365283 || r365293;
double r365295 = x;
double r365296 = r365295 / r365280;
double r365297 = r365279 * r365296;
double r365298 = r365281 * r365295;
double r365299 = r365294 ? r365297 : r365298;
return r365299;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 15.1 |
|---|---|
| Target | 1.7 |
| Herbie | 0.5 |
if (/ y z) < -1.0819255936363166e+268 or -1.636189466711752e-114 < (/ y z) < 1.3191552743961e-321 or 1.1040494366973089e+252 < (/ y z) Initial program 25.2
Simplified17.6
rmApplied div-inv17.6
Applied associate-*l*1.1
Simplified1.0
if -1.0819255936363166e+268 < (/ y z) < -1.636189466711752e-114 or 1.3191552743961e-321 < (/ y z) < 1.1040494366973089e+252Initial program 9.8
Simplified0.3
Final simplification0.5
herbie shell --seed 2019347 +o rules:numerics
(FPCore (x y z t)
:name "Graphics.Rendering.Chart.Backend.Diagrams:calcFontMetrics from Chart-diagrams-1.5.1, B"
:precision binary64
:herbie-target
(if (< (/ (* (/ y z) t) t) -1.20672205123045e+245) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) -5.907522236933906e-275) (* x (/ y z)) (if (< (/ (* (/ y z) t) t) 5.658954423153415e-65) (/ y (/ z x)) (if (< (/ (* (/ y z) t) t) 2.0087180502407133e+217) (* x (/ y z)) (/ (* y x) z)))))
(* x (/ (* (/ y z) t) t)))