| Alternative 1 | |
|---|---|
| Error | 28.2 |
| Cost | 64 |
\[1
\]
(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))))
(if (<= (/ (tan t_0) (sin t_0)) 50.0)
(/ 1.0 (cos (* (cbrt x) (* (/ 0.5 y) (pow (cbrt x) 2.0)))))
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 tmp;
if ((tan(t_0) / sin(t_0)) <= 50.0) {
tmp = 1.0 / cos((cbrt(x) * ((0.5 / y) * pow(cbrt(x), 2.0))));
} else {
tmp = 1.0;
}
return tmp;
}
public static double code(double x, double y) {
return Math.tan((x / (y * 2.0))) / Math.sin((x / (y * 2.0)));
}
public static double code(double x, double y) {
double t_0 = x / (y * 2.0);
double tmp;
if ((Math.tan(t_0) / Math.sin(t_0)) <= 50.0) {
tmp = 1.0 / Math.cos((Math.cbrt(x) * ((0.5 / y) * Math.pow(Math.cbrt(x), 2.0))));
} else {
tmp = 1.0;
}
return tmp;
}
function code(x, y) return Float64(tan(Float64(x / Float64(y * 2.0))) / sin(Float64(x / Float64(y * 2.0)))) end
function code(x, y) t_0 = Float64(x / Float64(y * 2.0)) tmp = 0.0 if (Float64(tan(t_0) / sin(t_0)) <= 50.0) tmp = Float64(1.0 / cos(Float64(cbrt(x) * Float64(Float64(0.5 / y) * (cbrt(x) ^ 2.0))))); else tmp = 1.0; end return tmp end
code[x_, y_] := N[(N[Tan[N[(x / N[(y * 2.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / N[Sin[N[(x / N[(y * 2.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
code[x_, y_] := Block[{t$95$0 = N[(x / N[(y * 2.0), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[(N[Tan[t$95$0], $MachinePrecision] / N[Sin[t$95$0], $MachinePrecision]), $MachinePrecision], 50.0], N[(1.0 / N[Cos[N[(N[Power[x, 1/3], $MachinePrecision] * N[(N[(0.5 / y), $MachinePrecision] * N[Power[N[Power[x, 1/3], $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 1.0]]
\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}\\
\mathbf{if}\;\frac{\tan t_0}{\sin t_0} \leq 50:\\
\;\;\;\;\frac{1}{\cos \left(\sqrt[3]{x} \cdot \left(\frac{0.5}{y} \cdot {\left(\sqrt[3]{x}\right)}^{2}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;1\\
\end{array}
Results
| Original | 35.4 |
|---|---|
| Target | 28.5 |
| Herbie | 27.3 |
if (/.f64 (tan.f64 (/.f64 x (*.f64 y 2))) (sin.f64 (/.f64 x (*.f64 y 2)))) < 50Initial program 26.3
Applied egg-rr50.5
Taylor expanded in x around inf 26.3
Simplified26.3
Applied egg-rr26.4
if 50 < (/.f64 (tan.f64 (/.f64 x (*.f64 y 2))) (sin.f64 (/.f64 x (*.f64 y 2)))) Initial program 63.9
Taylor expanded in x around 0 30.1
Final simplification27.3
| Alternative 1 | |
|---|---|
| Error | 28.2 |
| Cost | 64 |
herbie shell --seed 2022337
(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)))))