\frac{\tan \left(\frac{x}{y \cdot 2}\right)}{\sin \left(\frac{x}{y \cdot 2}\right)}
\begin{array}{l}
t_0 := \frac{x}{y \cdot 2}\\
t_1 := \frac{\tan t_0}{\sin t_0}\\
\mathbf{if}\;t_1 \leq 4.268495382830192:\\
\;\;\;\;\begin{array}{l}
t_2 := \mathsf{expm1}\left(t_1\right)\\
\mathsf{log1p}\left(\sqrt[3]{t_2 \cdot \left(t_2 \cdot t_2\right)}\right)
\end{array}\\
\mathbf{else}:\\
\;\;\;\;1\\
\end{array}
(FPCore (x y) :precision binary64 (/ (tan (/ x (* y 2.0))) (sin (/ x (* y 2.0)))))
(FPCore (x y)
:precision binary64
(let* ((t_0 (/ x (* y 2.0))) (t_1 (/ (tan t_0) (sin t_0))))
(if (<= t_1 4.268495382830192)
(let* ((t_2 (expm1 t_1))) (log1p (cbrt (* t_2 (* t_2 t_2)))))
1.0)))double code(double x, double y) {
return tan(x / (y * 2.0)) / sin(x / (y * 2.0));
}
double code(double x, double y) {
double t_0 = x / (y * 2.0);
double t_1 = tan(t_0) / sin(t_0);
double tmp;
if (t_1 <= 4.268495382830192) {
double t_2_1 = expm1(t_1);
tmp = log1p(cbrt(t_2_1 * (t_2_1 * t_2_1)));
} else {
tmp = 1.0;
}
return tmp;
}




Bits error versus x




Bits error versus y
Results
| Original | 35.8 |
|---|---|
| Target | 29.1 |
| Herbie | 27.8 |
if (/.f64 (tan.f64 (/.f64 x (*.f64 y 2))) (sin.f64 (/.f64 x (*.f64 y 2)))) < 4.2684953828301921Initial program 25.8
Applied log1p-expm1-u_binary6425.8
Applied add-cbrt-cube_binary6425.8
if 4.2684953828301921 < (/.f64 (tan.f64 (/.f64 x (*.f64 y 2))) (sin.f64 (/.f64 x (*.f64 y 2)))) Initial program 63.1
Taylor expanded in x around 0 33.4
Final simplification27.8
herbie shell --seed 2021280
(FPCore (x y)
:name "Diagrams.TwoD.Layout.CirclePacking:approxRadius from diagrams-contrib-1.3.0.5"
:precision binary64
:herbie-target
(if (< y -1.2303690911306994e+114) 1.0 (if (< y -9.102852406811914e-222) (/ (sin (/ x (* y 2.0))) (* (sin (/ x (* y 2.0))) (log (exp (cos (/ x (* y 2.0))))))) 1.0))
(/ (tan (/ x (* y 2.0))) (sin (/ x (* y 2.0)))))