\frac{a1 \cdot a2}{b1 \cdot b2}
\begin{array}{l}
\mathbf{if}\;a1 \cdot a2 \leq -1.736041581919262 \cdot 10^{+209}:\\
\;\;\;\;a1 \cdot \frac{\frac{a2}{b1}}{b2}\\
\mathbf{else}:\\
\;\;\;\;\begin{array}{l}
t_0 := \sqrt[3]{b2} \cdot \sqrt[3]{b2}\\
\mathbf{if}\;a1 \cdot a2 \leq -2.5746168329260578 \cdot 10^{-222}:\\
\;\;\;\;\frac{1}{\frac{t_0}{a1 \cdot a2} \cdot \left(b1 \cdot \sqrt[3]{b2}\right)}\\
\mathbf{elif}\;a1 \cdot a2 \leq 9.600530308119492 \cdot 10^{-256}:\\
\;\;\;\;\frac{\frac{a1}{\sqrt[3]{b1} \cdot \sqrt[3]{b1}}}{t_0} \cdot \frac{\frac{a2}{\sqrt[3]{b1}}}{\sqrt[3]{b2}}\\
\mathbf{elif}\;a1 \cdot a2 \leq 5.8338690603176334 \cdot 10^{+253}:\\
\;\;\;\;\frac{\frac{a1 \cdot a2}{b2}}{b1}\\
\mathbf{else}:\\
\;\;\;\;\frac{a1}{\frac{b2}{\frac{a2}{b1}}}\\
\end{array}\\
\end{array}
(FPCore (a1 a2 b1 b2) :precision binary64 (/ (* a1 a2) (* b1 b2)))
(FPCore (a1 a2 b1 b2)
:precision binary64
(if (<= (* a1 a2) -1.736041581919262e+209)
(* a1 (/ (/ a2 b1) b2))
(let* ((t_0 (* (cbrt b2) (cbrt b2))))
(if (<= (* a1 a2) -2.5746168329260578e-222)
(/ 1.0 (* (/ t_0 (* a1 a2)) (* b1 (cbrt b2))))
(if (<= (* a1 a2) 9.600530308119492e-256)
(*
(/ (/ a1 (* (cbrt b1) (cbrt b1))) t_0)
(/ (/ a2 (cbrt b1)) (cbrt b2)))
(if (<= (* a1 a2) 5.8338690603176334e+253)
(/ (/ (* a1 a2) b2) b1)
(/ a1 (/ b2 (/ a2 b1)))))))))double code(double a1, double a2, double b1, double b2) {
return (a1 * a2) / (b1 * b2);
}
double code(double a1, double a2, double b1, double b2) {
double tmp;
if ((a1 * a2) <= -1.736041581919262e+209) {
tmp = a1 * ((a2 / b1) / b2);
} else {
double t_0 = cbrt(b2) * cbrt(b2);
double tmp_1;
if ((a1 * a2) <= -2.5746168329260578e-222) {
tmp_1 = 1.0 / ((t_0 / (a1 * a2)) * (b1 * cbrt(b2)));
} else if ((a1 * a2) <= 9.600530308119492e-256) {
tmp_1 = ((a1 / (cbrt(b1) * cbrt(b1))) / t_0) * ((a2 / cbrt(b1)) / cbrt(b2));
} else if ((a1 * a2) <= 5.8338690603176334e+253) {
tmp_1 = ((a1 * a2) / b2) / b1;
} else {
tmp_1 = a1 / (b2 / (a2 / b1));
}
tmp = tmp_1;
}
return tmp;
}




Bits error versus a1




Bits error versus a2




Bits error versus b1




Bits error versus b2
Results
| Original | 10.6 |
|---|---|
| Target | 11.3 |
| Herbie | 4.1 |
if (*.f64 a1 a2) < -1.7360415819192621e209Initial program 35.5
Applied associate-/r*_binary6434.3
Applied clear-num_binary6434.3
Applied *-un-lft-identity_binary6434.3
Applied times-frac_binary6416.3
Applied *-un-lft-identity_binary6416.3
Applied times-frac_binary648.5
Applied add-cube-cbrt_binary648.5
Applied times-frac_binary648.6
Simplified8.6
Simplified8.1
if -1.7360415819192621e209 < (*.f64 a1 a2) < -2.5746168329260578e-222Initial program 4.7
Applied associate-/r*_binary645.0
Applied clear-num_binary645.4
Applied div-inv_binary645.4
Applied add-cube-cbrt_binary646.1
Applied times-frac_binary643.3
Simplified3.2
if -2.5746168329260578e-222 < (*.f64 a1 a2) < 9.60053030811949162e-256Initial program 15.5
Applied associate-/r*_binary6415.2
Applied add-cube-cbrt_binary6415.4
Applied add-cube-cbrt_binary6415.4
Applied times-frac_binary647.6
Applied times-frac_binary642.3
if 9.60053030811949162e-256 < (*.f64 a1 a2) < 5.83386906031763342e253Initial program 4.8
Applied associate-/r*_binary645.5
Applied clear-num_binary646.0
Applied associate-/r/_binary645.5
Applied associate-/r*_binary645.3
Simplified10.8
Taylor expanded in a2 around 0 4.9
if 5.83386906031763342e253 < (*.f64 a1 a2) Initial program 43.6
Applied associate-/r*_binary6445.2
Applied clear-num_binary6445.3
Applied *-un-lft-identity_binary6445.3
Applied times-frac_binary6420.6
Applied *-un-lft-identity_binary6420.6
Applied times-frac_binary648.5
Applied associate-/r*_binary648.3
Simplified8.3
Final simplification4.1
herbie shell --seed 2022005
(FPCore (a1 a2 b1 b2)
:name "Quotient of products"
:precision binary64
:herbie-target
(* (/ a1 b1) (/ a2 b2))
(/ (* a1 a2) (* b1 b2)))