\frac{a1 \cdot a2}{b1 \cdot b2}\begin{array}{l}
\mathbf{if}\;b1 \cdot b2 \le -2.32021152475378652 \cdot 10^{210}:\\
\;\;\;\;\left(\frac{a1}{b1} \cdot a2\right) \cdot \frac{1}{b2}\\
\mathbf{elif}\;b1 \cdot b2 \le -4.173350324846027 \cdot 10^{-151}:\\
\;\;\;\;a1 \cdot \frac{a2}{b1 \cdot b2}\\
\mathbf{elif}\;b1 \cdot b2 \le -0.0 \lor \neg \left(b1 \cdot b2 \le 7.6189236997402214 \cdot 10^{265}\right):\\
\;\;\;\;\frac{a1}{b1} \cdot \frac{a2}{b2}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{b1 \cdot b2}{a1 \cdot a2}}\\
\end{array}double f(double a1, double a2, double b1, double b2) {
double r96159 = a1;
double r96160 = a2;
double r96161 = r96159 * r96160;
double r96162 = b1;
double r96163 = b2;
double r96164 = r96162 * r96163;
double r96165 = r96161 / r96164;
return r96165;
}
double f(double a1, double a2, double b1, double b2) {
double r96166 = b1;
double r96167 = b2;
double r96168 = r96166 * r96167;
double r96169 = -2.3202115247537865e+210;
bool r96170 = r96168 <= r96169;
double r96171 = a1;
double r96172 = r96171 / r96166;
double r96173 = a2;
double r96174 = r96172 * r96173;
double r96175 = 1.0;
double r96176 = r96175 / r96167;
double r96177 = r96174 * r96176;
double r96178 = -4.173350324846027e-151;
bool r96179 = r96168 <= r96178;
double r96180 = r96173 / r96168;
double r96181 = r96171 * r96180;
double r96182 = -0.0;
bool r96183 = r96168 <= r96182;
double r96184 = 7.618923699740221e+265;
bool r96185 = r96168 <= r96184;
double r96186 = !r96185;
bool r96187 = r96183 || r96186;
double r96188 = r96173 / r96167;
double r96189 = r96172 * r96188;
double r96190 = r96171 * r96173;
double r96191 = r96168 / r96190;
double r96192 = r96175 / r96191;
double r96193 = r96187 ? r96189 : r96192;
double r96194 = r96179 ? r96181 : r96193;
double r96195 = r96170 ? r96177 : r96194;
return r96195;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.7 |
|---|---|
| Target | 11.2 |
| Herbie | 5.5 |
if (* b1 b2) < -2.3202115247537865e+210Initial program 15.4
rmApplied div-inv15.4
rmApplied *-un-lft-identity15.4
Applied times-frac14.8
Applied associate-*r*7.7
Simplified4.1
if -2.3202115247537865e+210 < (* b1 b2) < -4.173350324846027e-151Initial program 3.7
rmApplied div-inv3.7
rmApplied associate-*l*4.3
Simplified4.3
if -4.173350324846027e-151 < (* b1 b2) < -0.0 or 7.618923699740221e+265 < (* b1 b2) Initial program 25.9
rmApplied times-frac7.4
if -0.0 < (* b1 b2) < 7.618923699740221e+265Initial program 5.6
rmApplied div-inv6.0
rmApplied associate-/r*6.0
rmApplied pow16.0
Applied pow16.0
Applied pow16.0
Applied pow-prod-down6.0
Applied pow-prod-down6.0
Simplified5.6
rmApplied clear-num5.9
Final simplification5.5
herbie shell --seed 2020043 +o rules:numerics
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))