\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.1180214770221087 \cdot 10^{+115}:\\
\;\;\;\;\frac{\frac{a2}{\frac{b1}{a1}}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le -6.76662796926326 \cdot 10^{-234}:\\
\;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\
\mathbf{elif}\;a1 \cdot a2 \le 7.422955137579593 \cdot 10^{-199}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 6.395771950507316 \cdot 10^{+255}:\\
\;\;\;\;\frac{a1 \cdot a2}{b2 \cdot b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r5362282 = a1;
double r5362283 = a2;
double r5362284 = r5362282 * r5362283;
double r5362285 = b1;
double r5362286 = b2;
double r5362287 = r5362285 * r5362286;
double r5362288 = r5362284 / r5362287;
return r5362288;
}
double f(double a1, double a2, double b1, double b2) {
double r5362289 = a1;
double r5362290 = a2;
double r5362291 = r5362289 * r5362290;
double r5362292 = -2.1180214770221087e+115;
bool r5362293 = r5362291 <= r5362292;
double r5362294 = b1;
double r5362295 = r5362294 / r5362289;
double r5362296 = r5362290 / r5362295;
double r5362297 = b2;
double r5362298 = r5362296 / r5362297;
double r5362299 = -6.76662796926326e-234;
bool r5362300 = r5362291 <= r5362299;
double r5362301 = r5362297 * r5362294;
double r5362302 = r5362291 / r5362301;
double r5362303 = 7.422955137579593e-199;
bool r5362304 = r5362291 <= r5362303;
double r5362305 = r5362289 / r5362294;
double r5362306 = r5362290 / r5362297;
double r5362307 = r5362305 * r5362306;
double r5362308 = 6.395771950507316e+255;
bool r5362309 = r5362291 <= r5362308;
double r5362310 = r5362309 ? r5362302 : r5362307;
double r5362311 = r5362304 ? r5362307 : r5362310;
double r5362312 = r5362300 ? r5362302 : r5362311;
double r5362313 = r5362293 ? r5362298 : r5362312;
return r5362313;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.8 |
|---|---|
| Target | 10.9 |
| Herbie | 5.6 |
if (* a1 a2) < -2.1180214770221087e+115Initial program 23.4
rmApplied associate-/r*23.2
rmApplied *-un-lft-identity23.2
Applied associate-/r*23.2
Simplified16.6
if -2.1180214770221087e+115 < (* a1 a2) < -6.76662796926326e-234 or 7.422955137579593e-199 < (* a1 a2) < 6.395771950507316e+255Initial program 4.1
rmApplied associate-/r*3.9
rmApplied *-un-lft-identity3.9
Applied add-cube-cbrt4.7
Applied times-frac9.7
Applied times-frac12.8
Simplified12.8
Taylor expanded around inf 4.1
if -6.76662796926326e-234 < (* a1 a2) < 7.422955137579593e-199 or 6.395771950507316e+255 < (* a1 a2) Initial program 19.2
rmApplied times-frac4.3
Final simplification5.6
herbie shell --seed 2019144 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))