\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -2.823909045212994652646830133015028059674 \cdot 10^{247}:\\
\;\;\;\;\frac{a1}{\frac{b2}{a2} \cdot b1}\\
\mathbf{elif}\;b1 \cdot b2 \le -1.977094403295562009633117616926065832914 \cdot 10^{-180}:\\
\;\;\;\;\frac{a1}{b1 \cdot b2} \cdot a2\\
\mathbf{elif}\;b1 \cdot b2 \le 8.073858979281978655111868248140178022066 \cdot 10^{-164}:\\
\;\;\;\;\frac{1}{b1} \cdot \left(\frac{a1}{b2} \cdot a2\right)\\
\mathbf{elif}\;b1 \cdot b2 \le 2.345913877288735097014094340963252524817 \cdot 10^{180}:\\
\;\;\;\;\frac{a1}{\frac{1}{\frac{a2}{b1 \cdot b2}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{a1}{b1}}{b2} \cdot a2\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r4844624 = a1;
double r4844625 = a2;
double r4844626 = r4844624 * r4844625;
double r4844627 = b1;
double r4844628 = b2;
double r4844629 = r4844627 * r4844628;
double r4844630 = r4844626 / r4844629;
return r4844630;
}
double f(double a1, double a2, double b1, double b2) {
double r4844631 = b1;
double r4844632 = b2;
double r4844633 = r4844631 * r4844632;
double r4844634 = -2.8239090452129947e+247;
bool r4844635 = r4844633 <= r4844634;
double r4844636 = a1;
double r4844637 = a2;
double r4844638 = r4844632 / r4844637;
double r4844639 = r4844638 * r4844631;
double r4844640 = r4844636 / r4844639;
double r4844641 = -1.977094403295562e-180;
bool r4844642 = r4844633 <= r4844641;
double r4844643 = r4844636 / r4844633;
double r4844644 = r4844643 * r4844637;
double r4844645 = 8.073858979281979e-164;
bool r4844646 = r4844633 <= r4844645;
double r4844647 = 1.0;
double r4844648 = r4844647 / r4844631;
double r4844649 = r4844636 / r4844632;
double r4844650 = r4844649 * r4844637;
double r4844651 = r4844648 * r4844650;
double r4844652 = 2.345913877288735e+180;
bool r4844653 = r4844633 <= r4844652;
double r4844654 = r4844637 / r4844633;
double r4844655 = r4844647 / r4844654;
double r4844656 = r4844636 / r4844655;
double r4844657 = r4844636 / r4844631;
double r4844658 = r4844657 / r4844632;
double r4844659 = r4844658 * r4844637;
double r4844660 = r4844653 ? r4844656 : r4844659;
double r4844661 = r4844646 ? r4844651 : r4844660;
double r4844662 = r4844642 ? r4844644 : r4844661;
double r4844663 = r4844635 ? r4844640 : r4844662;
return r4844663;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.3 |
|---|---|
| Target | 11.4 |
| Herbie | 6.3 |
if (* b1 b2) < -2.8239090452129947e+247Initial program 17.4
rmApplied associate-/l*17.1
rmApplied *-un-lft-identity17.1
Applied times-frac7.1
Simplified7.1
if -2.8239090452129947e+247 < (* b1 b2) < -1.977094403295562e-180Initial program 5.1
rmApplied associate-/l*4.2
rmApplied associate-/r/4.2
if -1.977094403295562e-180 < (* b1 b2) < 8.073858979281979e-164Initial program 28.1
rmApplied associate-/l*28.5
rmApplied associate-/r/29.3
rmApplied *-un-lft-identity29.3
Applied times-frac17.6
Applied associate-*l*11.7
if 8.073858979281979e-164 < (* b1 b2) < 2.345913877288735e+180Initial program 4.3
rmApplied associate-/l*3.7
rmApplied clear-num4.1
if 2.345913877288735e+180 < (* b1 b2) Initial program 13.7
rmApplied associate-/l*14.2
rmApplied associate-/r/13.6
rmApplied *-un-lft-identity13.6
Applied associate-*r*13.6
Simplified7.7
Final simplification6.3
herbie shell --seed 2019171 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))