\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \le -2.553414081389674509407045725962943766798 \cdot 10^{290}:\\
\;\;\;\;\frac{1}{\frac{\frac{b2}{\frac{a1}{b1}}}{a2}}\\
\mathbf{elif}\;a1 \cdot a2 \le -1.803802981211027273100658035489724291435 \cdot 10^{-249}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{elif}\;a1 \cdot a2 \le 2.758049283459723037540857018065176298329 \cdot 10^{-256}:\\
\;\;\;\;\frac{a1}{\frac{b1}{\frac{a2}{b2}}}\\
\mathbf{elif}\;a1 \cdot a2 \le 1.458857710290817792586452271714402343311 \cdot 10^{244}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\frac{b2}{\frac{a1}{b1}}}{a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r136501 = a1;
double r136502 = a2;
double r136503 = r136501 * r136502;
double r136504 = b1;
double r136505 = b2;
double r136506 = r136504 * r136505;
double r136507 = r136503 / r136506;
return r136507;
}
double f(double a1, double a2, double b1, double b2) {
double r136508 = a1;
double r136509 = a2;
double r136510 = r136508 * r136509;
double r136511 = -2.5534140813896745e+290;
bool r136512 = r136510 <= r136511;
double r136513 = 1.0;
double r136514 = b2;
double r136515 = b1;
double r136516 = r136508 / r136515;
double r136517 = r136514 / r136516;
double r136518 = r136517 / r136509;
double r136519 = r136513 / r136518;
double r136520 = -1.8038029812110273e-249;
bool r136521 = r136510 <= r136520;
double r136522 = r136510 / r136515;
double r136523 = r136522 / r136514;
double r136524 = 2.758049283459723e-256;
bool r136525 = r136510 <= r136524;
double r136526 = r136509 / r136514;
double r136527 = r136515 / r136526;
double r136528 = r136508 / r136527;
double r136529 = 1.4588577102908178e+244;
bool r136530 = r136510 <= r136529;
double r136531 = r136530 ? r136523 : r136519;
double r136532 = r136525 ? r136528 : r136531;
double r136533 = r136521 ? r136523 : r136532;
double r136534 = r136512 ? r136519 : r136533;
return r136534;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.4 |
|---|---|
| Target | 11.3 |
| Herbie | 4.9 |
if (* a1 a2) < -2.5534140813896745e+290 or 1.4588577102908178e+244 < (* a1 a2) Initial program 48.3
rmApplied associate-/r*48.3
Simplified20.1
rmApplied *-un-lft-identity20.1
Applied *-un-lft-identity20.1
Applied times-frac20.1
Applied *-un-lft-identity20.1
Applied times-frac20.1
Applied associate-/l*20.2
Simplified8.1
if -2.5534140813896745e+290 < (* a1 a2) < -1.8038029812110273e-249 or 2.758049283459723e-256 < (* a1 a2) < 1.4588577102908178e+244Initial program 5.5
rmApplied associate-/r*4.9
Simplified10.7
rmApplied frac-2neg10.7
Taylor expanded around 0 4.9
if -1.8038029812110273e-249 < (* a1 a2) < 2.758049283459723e-256Initial program 18.2
rmApplied associate-/r*17.8
Simplified8.0
rmApplied div-inv8.0
Applied associate-/l*4.0
Simplified3.9
Final simplification4.9
herbie shell --seed 2019179
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))