\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;\frac{a1 \cdot a2}{b1 \cdot b2} = -\infty:\\
\;\;\;\;\frac{1}{\frac{b1}{\frac{a1}{\frac{b2}{a2}}}}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le -8.768910935847288 \cdot 10^{-283}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 0.0:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{elif}\;\frac{a1 \cdot a2}{b1 \cdot b2} \le 7.0774205845335064 \cdot 10^{273}:\\
\;\;\;\;\frac{a1 \cdot a2}{b1 \cdot b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r123642 = a1;
double r123643 = a2;
double r123644 = r123642 * r123643;
double r123645 = b1;
double r123646 = b2;
double r123647 = r123645 * r123646;
double r123648 = r123644 / r123647;
return r123648;
}
double f(double a1, double a2, double b1, double b2) {
double r123649 = a1;
double r123650 = a2;
double r123651 = r123649 * r123650;
double r123652 = b1;
double r123653 = b2;
double r123654 = r123652 * r123653;
double r123655 = r123651 / r123654;
double r123656 = -inf.0;
bool r123657 = r123655 <= r123656;
double r123658 = 1.0;
double r123659 = r123653 / r123650;
double r123660 = r123649 / r123659;
double r123661 = r123652 / r123660;
double r123662 = r123658 / r123661;
double r123663 = -8.768910935847288e-283;
bool r123664 = r123655 <= r123663;
double r123665 = 0.0;
bool r123666 = r123655 <= r123665;
double r123667 = r123649 / r123652;
double r123668 = r123650 / r123653;
double r123669 = r123667 * r123668;
double r123670 = 7.077420584533506e+273;
bool r123671 = r123655 <= r123670;
double r123672 = r123671 ? r123655 : r123669;
double r123673 = r123666 ? r123669 : r123672;
double r123674 = r123664 ? r123655 : r123673;
double r123675 = r123657 ? r123662 : r123674;
return r123675;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 11.0 |
|---|---|
| Target | 11.1 |
| Herbie | 2.8 |
if (/ (* a1 a2) (* b1 b2)) < -inf.0Initial program 64.0
rmApplied clear-num64.0
rmApplied associate-/l*35.5
rmApplied associate-/l*21.3
if -inf.0 < (/ (* a1 a2) (* b1 b2)) < -8.768910935847288e-283 or 0.0 < (/ (* a1 a2) (* b1 b2)) < 7.077420584533506e+273Initial program 0.8
rmApplied clear-num1.1
rmApplied associate-/l*8.0
rmApplied div-inv8.4
Applied add-cube-cbrt8.4
Applied times-frac8.2
Simplified8.2
Simplified7.8
rmApplied frac-times0.8
Simplified0.8
if -8.768910935847288e-283 < (/ (* a1 a2) (* b1 b2)) < 0.0 or 7.077420584533506e+273 < (/ (* a1 a2) (* b1 b2)) Initial program 21.3
rmApplied clear-num21.6
rmApplied associate-/l*15.3
rmApplied div-inv15.3
Applied add-cube-cbrt15.3
Applied times-frac14.9
Simplified14.9
Simplified14.8
rmApplied *-un-lft-identity14.8
Applied times-frac6.3
Applied associate-*r*4.3
Simplified4.3
Final simplification2.8
herbie shell --seed 2020064
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))