\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -9.78621637012035120889222133129827862576 \cdot 10^{209}:\\
\;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\
\mathbf{elif}\;b1 \cdot b2 \le -9.111280530104685398727222154888263046467 \cdot 10^{-184}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1 \cdot b2}{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\
\mathbf{elif}\;b1 \cdot b2 \le 4.74006580620091934483000099877771584647 \cdot 10^{-320}:\\
\;\;\;\;\frac{1}{b1 \cdot \frac{\frac{b2}{a2}}{a1}}\\
\mathbf{elif}\;b1 \cdot b2 \le 8.888412293585824693935829272063102395365 \cdot 10^{181}:\\
\;\;\;\;\frac{\frac{1}{\frac{b1 \cdot b2}{\sqrt[3]{a1} \cdot \sqrt[3]{a1}}}}{\frac{\frac{1}{a2}}{\sqrt[3]{a1}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{\frac{b2}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r128304 = a1;
double r128305 = a2;
double r128306 = r128304 * r128305;
double r128307 = b1;
double r128308 = b2;
double r128309 = r128307 * r128308;
double r128310 = r128306 / r128309;
return r128310;
}
double f(double a1, double a2, double b1, double b2) {
double r128311 = b1;
double r128312 = b2;
double r128313 = r128311 * r128312;
double r128314 = -9.786216370120351e+209;
bool r128315 = r128313 <= r128314;
double r128316 = 1.0;
double r128317 = a2;
double r128318 = r128312 / r128317;
double r128319 = a1;
double r128320 = r128318 / r128319;
double r128321 = r128311 * r128320;
double r128322 = r128316 / r128321;
double r128323 = -9.111280530104685e-184;
bool r128324 = r128313 <= r128323;
double r128325 = cbrt(r128319);
double r128326 = r128325 * r128325;
double r128327 = r128313 / r128326;
double r128328 = r128316 / r128327;
double r128329 = r128316 / r128317;
double r128330 = r128329 / r128325;
double r128331 = r128328 / r128330;
double r128332 = 4.7400658062009e-320;
bool r128333 = r128313 <= r128332;
double r128334 = 8.888412293585825e+181;
bool r128335 = r128313 <= r128334;
double r128336 = r128319 / r128311;
double r128337 = r128336 / r128318;
double r128338 = r128335 ? r128331 : r128337;
double r128339 = r128333 ? r128322 : r128338;
double r128340 = r128324 ? r128331 : r128339;
double r128341 = r128315 ? r128322 : r128340;
return r128341;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.6 |
|---|---|
| Target | 11.4 |
| Herbie | 4.6 |
if (* b1 b2) < -9.786216370120351e+209 or -9.111280530104685e-184 < (* b1 b2) < 4.7400658062009e-320Initial program 25.7
rmApplied associate-/l*25.3
rmApplied clear-num25.4
rmApplied *-un-lft-identity25.4
Applied *-un-lft-identity25.4
Applied times-frac12.9
Applied times-frac6.7
Simplified6.7
if -9.786216370120351e+209 < (* b1 b2) < -9.111280530104685e-184 or 4.7400658062009e-320 < (* b1 b2) < 8.888412293585825e+181Initial program 5.2
rmApplied associate-/l*5.2
rmApplied clear-num5.5
rmApplied add-cube-cbrt6.2
Applied div-inv6.2
Applied times-frac3.8
Applied associate-/r*3.7
if 8.888412293585825e+181 < (* b1 b2) Initial program 16.3
rmApplied associate-/l*15.8
rmApplied *-un-lft-identity15.8
Applied times-frac8.8
Applied associate-/r*5.3
Simplified5.3
Final simplification4.6
herbie shell --seed 2019323
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))