
(FPCore (a b angle) :precision binary64 (let* ((t_0 (* (/ angle 180.0) PI))) (+ (pow (* a (sin t_0)) 2.0) (pow (* b (cos t_0)) 2.0))))
double code(double a, double b, double angle) {
double t_0 = (angle / 180.0) * ((double) M_PI);
return pow((a * sin(t_0)), 2.0) + pow((b * cos(t_0)), 2.0);
}
public static double code(double a, double b, double angle) {
double t_0 = (angle / 180.0) * Math.PI;
return Math.pow((a * Math.sin(t_0)), 2.0) + Math.pow((b * Math.cos(t_0)), 2.0);
}
def code(a, b, angle): t_0 = (angle / 180.0) * math.pi return math.pow((a * math.sin(t_0)), 2.0) + math.pow((b * math.cos(t_0)), 2.0)
function code(a, b, angle) t_0 = Float64(Float64(angle / 180.0) * pi) return Float64((Float64(a * sin(t_0)) ^ 2.0) + (Float64(b * cos(t_0)) ^ 2.0)) end
function tmp = code(a, b, angle) t_0 = (angle / 180.0) * pi; tmp = ((a * sin(t_0)) ^ 2.0) + ((b * cos(t_0)) ^ 2.0); end
code[a_, b_, angle_] := Block[{t$95$0 = N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]}, N[(N[Power[N[(a * N[Sin[t$95$0], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(b * N[Cos[t$95$0], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{angle}{180} \cdot \pi\\
{\left(a \cdot \sin t_0\right)}^{2} + {\left(b \cdot \cos t_0\right)}^{2}
\end{array}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 12 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (a b angle) :precision binary64 (let* ((t_0 (* (/ angle 180.0) PI))) (+ (pow (* a (sin t_0)) 2.0) (pow (* b (cos t_0)) 2.0))))
double code(double a, double b, double angle) {
double t_0 = (angle / 180.0) * ((double) M_PI);
return pow((a * sin(t_0)), 2.0) + pow((b * cos(t_0)), 2.0);
}
public static double code(double a, double b, double angle) {
double t_0 = (angle / 180.0) * Math.PI;
return Math.pow((a * Math.sin(t_0)), 2.0) + Math.pow((b * Math.cos(t_0)), 2.0);
}
def code(a, b, angle): t_0 = (angle / 180.0) * math.pi return math.pow((a * math.sin(t_0)), 2.0) + math.pow((b * math.cos(t_0)), 2.0)
function code(a, b, angle) t_0 = Float64(Float64(angle / 180.0) * pi) return Float64((Float64(a * sin(t_0)) ^ 2.0) + (Float64(b * cos(t_0)) ^ 2.0)) end
function tmp = code(a, b, angle) t_0 = (angle / 180.0) * pi; tmp = ((a * sin(t_0)) ^ 2.0) + ((b * cos(t_0)) ^ 2.0); end
code[a_, b_, angle_] := Block[{t$95$0 = N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]}, N[(N[Power[N[(a * N[Sin[t$95$0], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(b * N[Cos[t$95$0], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{angle}{180} \cdot \pi\\
{\left(a \cdot \sin t_0\right)}^{2} + {\left(b \cdot \cos t_0\right)}^{2}
\end{array}
\end{array}
(FPCore (a b angle) :precision binary64 (+ (pow (* a (sin (* (/ angle 180.0) PI))) 2.0) (pow (* b (log (exp (cos (* angle (* PI 0.005555555555555556)))))) 2.0)))
double code(double a, double b, double angle) {
return pow((a * sin(((angle / 180.0) * ((double) M_PI)))), 2.0) + pow((b * log(exp(cos((angle * (((double) M_PI) * 0.005555555555555556)))))), 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow((a * Math.sin(((angle / 180.0) * Math.PI))), 2.0) + Math.pow((b * Math.log(Math.exp(Math.cos((angle * (Math.PI * 0.005555555555555556)))))), 2.0);
}
def code(a, b, angle): return math.pow((a * math.sin(((angle / 180.0) * math.pi))), 2.0) + math.pow((b * math.log(math.exp(math.cos((angle * (math.pi * 0.005555555555555556)))))), 2.0)
function code(a, b, angle) return Float64((Float64(a * sin(Float64(Float64(angle / 180.0) * pi))) ^ 2.0) + (Float64(b * log(exp(cos(Float64(angle * Float64(pi * 0.005555555555555556)))))) ^ 2.0)) end
function tmp = code(a, b, angle) tmp = ((a * sin(((angle / 180.0) * pi))) ^ 2.0) + ((b * log(exp(cos((angle * (pi * 0.005555555555555556)))))) ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[N[(a * N[Sin[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(b * N[Log[N[Exp[N[Cos[N[(angle * N[(Pi * 0.005555555555555556), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{\left(a \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \log \left(e^{\cos \left(angle \cdot \left(\pi \cdot 0.005555555555555556\right)\right)}\right)\right)}^{2}
\end{array}
Initial program 79.1%
add-log-exp79.1%
div-inv79.2%
associate-*l*79.2%
metadata-eval79.2%
Applied egg-rr79.2%
Final simplification79.2%
(FPCore (a b angle) :precision binary64 (+ (pow (* b (cos (* (/ angle 180.0) PI))) 2.0) (pow (* a (sin (* 0.005555555555555556 (* angle PI)))) 2.0)))
double code(double a, double b, double angle) {
return pow((b * cos(((angle / 180.0) * ((double) M_PI)))), 2.0) + pow((a * sin((0.005555555555555556 * (angle * ((double) M_PI))))), 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow((b * Math.cos(((angle / 180.0) * Math.PI))), 2.0) + Math.pow((a * Math.sin((0.005555555555555556 * (angle * Math.PI)))), 2.0);
}
def code(a, b, angle): return math.pow((b * math.cos(((angle / 180.0) * math.pi))), 2.0) + math.pow((a * math.sin((0.005555555555555556 * (angle * math.pi)))), 2.0)
function code(a, b, angle) return Float64((Float64(b * cos(Float64(Float64(angle / 180.0) * pi))) ^ 2.0) + (Float64(a * sin(Float64(0.005555555555555556 * Float64(angle * pi)))) ^ 2.0)) end
function tmp = code(a, b, angle) tmp = ((b * cos(((angle / 180.0) * pi))) ^ 2.0) + ((a * sin((0.005555555555555556 * (angle * pi)))) ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[N[(b * N[Cos[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(a * N[Sin[N[(0.005555555555555556 * N[(angle * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{\left(b \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(a \cdot \sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)\right)}^{2}
\end{array}
Initial program 79.1%
Taylor expanded in angle around inf 79.1%
Final simplification79.1%
(FPCore (a b angle) :precision binary64 (+ (pow (* a (sin (* angle (/ PI 180.0)))) 2.0) (pow (* b (cos (* (/ angle 180.0) PI))) 2.0)))
double code(double a, double b, double angle) {
return pow((a * sin((angle * (((double) M_PI) / 180.0)))), 2.0) + pow((b * cos(((angle / 180.0) * ((double) M_PI)))), 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow((a * Math.sin((angle * (Math.PI / 180.0)))), 2.0) + Math.pow((b * Math.cos(((angle / 180.0) * Math.PI))), 2.0);
}
def code(a, b, angle): return math.pow((a * math.sin((angle * (math.pi / 180.0)))), 2.0) + math.pow((b * math.cos(((angle / 180.0) * math.pi))), 2.0)
function code(a, b, angle) return Float64((Float64(a * sin(Float64(angle * Float64(pi / 180.0)))) ^ 2.0) + (Float64(b * cos(Float64(Float64(angle / 180.0) * pi))) ^ 2.0)) end
function tmp = code(a, b, angle) tmp = ((a * sin((angle * (pi / 180.0)))) ^ 2.0) + ((b * cos(((angle / 180.0) * pi))) ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[N[(a * N[Sin[N[(angle * N[(Pi / 180.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(b * N[Cos[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{\left(a \cdot \sin \left(angle \cdot \frac{\pi}{180}\right)\right)}^{2} + {\left(b \cdot \cos \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2}
\end{array}
Initial program 79.1%
Taylor expanded in angle around inf 79.1%
metadata-eval78.9%
associate-/r/78.9%
associate-/l*78.9%
*-commutative78.9%
associate-/l*78.9%
metadata-eval78.9%
associate-*r/79.0%
Simplified79.1%
Final simplification79.1%
(FPCore (a b angle) :precision binary64 (+ (pow (* a (sin (* (/ angle 180.0) PI))) 2.0) (pow (* b (cos (* PI (* angle 0.005555555555555556)))) 2.0)))
double code(double a, double b, double angle) {
return pow((a * sin(((angle / 180.0) * ((double) M_PI)))), 2.0) + pow((b * cos((((double) M_PI) * (angle * 0.005555555555555556)))), 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow((a * Math.sin(((angle / 180.0) * Math.PI))), 2.0) + Math.pow((b * Math.cos((Math.PI * (angle * 0.005555555555555556)))), 2.0);
}
def code(a, b, angle): return math.pow((a * math.sin(((angle / 180.0) * math.pi))), 2.0) + math.pow((b * math.cos((math.pi * (angle * 0.005555555555555556)))), 2.0)
function code(a, b, angle) return Float64((Float64(a * sin(Float64(Float64(angle / 180.0) * pi))) ^ 2.0) + (Float64(b * cos(Float64(pi * Float64(angle * 0.005555555555555556)))) ^ 2.0)) end
function tmp = code(a, b, angle) tmp = ((a * sin(((angle / 180.0) * pi))) ^ 2.0) + ((b * cos((pi * (angle * 0.005555555555555556)))) ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[N[(a * N[Sin[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[N[(b * N[Cos[N[(Pi * N[(angle * 0.005555555555555556), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{\left(a \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {\left(b \cdot \cos \left(\pi \cdot \left(angle \cdot 0.005555555555555556\right)\right)\right)}^{2}
\end{array}
Initial program 79.1%
add-cube-cbrt79.1%
pow379.1%
pow-to-exp41.8%
div-inv41.8%
associate-*l*41.8%
metadata-eval41.8%
Applied egg-rr41.8%
exp-to-pow79.1%
pow379.1%
add-cube-cbrt79.2%
*-commutative79.2%
associate-*r*79.0%
*-commutative79.0%
associate-*r*79.2%
Applied egg-rr79.2%
Final simplification79.2%
(FPCore (a b angle) :precision binary64 (+ (pow (* a (sin (* 0.005555555555555556 (* angle PI)))) 2.0) (pow b 2.0)))
double code(double a, double b, double angle) {
return pow((a * sin((0.005555555555555556 * (angle * ((double) M_PI))))), 2.0) + pow(b, 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow((a * Math.sin((0.005555555555555556 * (angle * Math.PI)))), 2.0) + Math.pow(b, 2.0);
}
def code(a, b, angle): return math.pow((a * math.sin((0.005555555555555556 * (angle * math.pi)))), 2.0) + math.pow(b, 2.0)
function code(a, b, angle) return Float64((Float64(a * sin(Float64(0.005555555555555556 * Float64(angle * pi)))) ^ 2.0) + (b ^ 2.0)) end
function tmp = code(a, b, angle) tmp = ((a * sin((0.005555555555555556 * (angle * pi)))) ^ 2.0) + (b ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[N[(a * N[Sin[N[(0.005555555555555556 * N[(angle * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[b, 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{\left(a \cdot \sin \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)\right)}^{2} + {b}^{2}
\end{array}
Initial program 79.1%
Taylor expanded in angle around 0 79.0%
Taylor expanded in angle around inf 78.9%
Final simplification78.9%
(FPCore (a b angle) :precision binary64 (+ (pow (* a (sin (* angle (/ PI 180.0)))) 2.0) (pow b 2.0)))
double code(double a, double b, double angle) {
return pow((a * sin((angle * (((double) M_PI) / 180.0)))), 2.0) + pow(b, 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow((a * Math.sin((angle * (Math.PI / 180.0)))), 2.0) + Math.pow(b, 2.0);
}
def code(a, b, angle): return math.pow((a * math.sin((angle * (math.pi / 180.0)))), 2.0) + math.pow(b, 2.0)
function code(a, b, angle) return Float64((Float64(a * sin(Float64(angle * Float64(pi / 180.0)))) ^ 2.0) + (b ^ 2.0)) end
function tmp = code(a, b, angle) tmp = ((a * sin((angle * (pi / 180.0)))) ^ 2.0) + (b ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[N[(a * N[Sin[N[(angle * N[(Pi / 180.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[b, 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{\left(a \cdot \sin \left(angle \cdot \frac{\pi}{180}\right)\right)}^{2} + {b}^{2}
\end{array}
Initial program 79.1%
Taylor expanded in angle around 0 79.0%
Taylor expanded in angle around inf 78.9%
metadata-eval78.9%
associate-/r/78.9%
associate-/l*78.9%
*-commutative78.9%
associate-/l*78.9%
metadata-eval78.9%
associate-*r/79.0%
Simplified79.0%
Final simplification79.0%
(FPCore (a b angle) :precision binary64 (+ (pow (* a (sin (* (/ angle 180.0) PI))) 2.0) (pow b 2.0)))
double code(double a, double b, double angle) {
return pow((a * sin(((angle / 180.0) * ((double) M_PI)))), 2.0) + pow(b, 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow((a * Math.sin(((angle / 180.0) * Math.PI))), 2.0) + Math.pow(b, 2.0);
}
def code(a, b, angle): return math.pow((a * math.sin(((angle / 180.0) * math.pi))), 2.0) + math.pow(b, 2.0)
function code(a, b, angle) return Float64((Float64(a * sin(Float64(Float64(angle / 180.0) * pi))) ^ 2.0) + (b ^ 2.0)) end
function tmp = code(a, b, angle) tmp = ((a * sin(((angle / 180.0) * pi))) ^ 2.0) + (b ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[N[(a * N[Sin[N[(N[(angle / 180.0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[Power[b, 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{\left(a \cdot \sin \left(\frac{angle}{180} \cdot \pi\right)\right)}^{2} + {b}^{2}
\end{array}
Initial program 79.1%
Taylor expanded in angle around 0 79.0%
Final simplification79.0%
(FPCore (a b angle)
:precision binary64
(if (<= (/ angle 180.0) 100000000.0)
(+ (pow b 2.0) (pow (* a (* angle (/ PI 180.0))) 2.0))
(+
(pow b 2.0)
(* (pow PI 2.0) (* 3.08641975308642e-5 (* angle (* angle (* a a))))))))
double code(double a, double b, double angle) {
double tmp;
if ((angle / 180.0) <= 100000000.0) {
tmp = pow(b, 2.0) + pow((a * (angle * (((double) M_PI) / 180.0))), 2.0);
} else {
tmp = pow(b, 2.0) + (pow(((double) M_PI), 2.0) * (3.08641975308642e-5 * (angle * (angle * (a * a)))));
}
return tmp;
}
public static double code(double a, double b, double angle) {
double tmp;
if ((angle / 180.0) <= 100000000.0) {
tmp = Math.pow(b, 2.0) + Math.pow((a * (angle * (Math.PI / 180.0))), 2.0);
} else {
tmp = Math.pow(b, 2.0) + (Math.pow(Math.PI, 2.0) * (3.08641975308642e-5 * (angle * (angle * (a * a)))));
}
return tmp;
}
def code(a, b, angle): tmp = 0 if (angle / 180.0) <= 100000000.0: tmp = math.pow(b, 2.0) + math.pow((a * (angle * (math.pi / 180.0))), 2.0) else: tmp = math.pow(b, 2.0) + (math.pow(math.pi, 2.0) * (3.08641975308642e-5 * (angle * (angle * (a * a))))) return tmp
function code(a, b, angle) tmp = 0.0 if (Float64(angle / 180.0) <= 100000000.0) tmp = Float64((b ^ 2.0) + (Float64(a * Float64(angle * Float64(pi / 180.0))) ^ 2.0)); else tmp = Float64((b ^ 2.0) + Float64((pi ^ 2.0) * Float64(3.08641975308642e-5 * Float64(angle * Float64(angle * Float64(a * a)))))); end return tmp end
function tmp_2 = code(a, b, angle) tmp = 0.0; if ((angle / 180.0) <= 100000000.0) tmp = (b ^ 2.0) + ((a * (angle * (pi / 180.0))) ^ 2.0); else tmp = (b ^ 2.0) + ((pi ^ 2.0) * (3.08641975308642e-5 * (angle * (angle * (a * a))))); end tmp_2 = tmp; end
code[a_, b_, angle_] := If[LessEqual[N[(angle / 180.0), $MachinePrecision], 100000000.0], N[(N[Power[b, 2.0], $MachinePrecision] + N[Power[N[(a * N[(angle * N[(Pi / 180.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision], N[(N[Power[b, 2.0], $MachinePrecision] + N[(N[Power[Pi, 2.0], $MachinePrecision] * N[(3.08641975308642e-5 * N[(angle * N[(angle * N[(a * a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{angle}{180} \leq 100000000:\\
\;\;\;\;{b}^{2} + {\left(a \cdot \left(angle \cdot \frac{\pi}{180}\right)\right)}^{2}\\
\mathbf{else}:\\
\;\;\;\;{b}^{2} + {\pi}^{2} \cdot \left(3.08641975308642 \cdot 10^{-5} \cdot \left(angle \cdot \left(angle \cdot \left(a \cdot a\right)\right)\right)\right)\\
\end{array}
\end{array}
if (/.f64 angle 180) < 1e8Initial program 87.1%
Taylor expanded in angle around 0 86.8%
Taylor expanded in angle around 0 82.6%
metadata-eval82.6%
associate-/r/82.6%
associate-/l*82.6%
*-commutative82.6%
associate-/l*82.6%
metadata-eval82.6%
associate-*r/82.7%
Simplified82.7%
if 1e8 < (/.f64 angle 180) Initial program 59.5%
Taylor expanded in angle around 0 59.9%
Taylor expanded in angle around 0 43.1%
associate-*r*43.1%
associate-*r*43.1%
unpow243.1%
associate-*l*56.2%
unpow256.2%
Simplified56.2%
Final simplification75.0%
(FPCore (a b angle)
:precision binary64
(if (<= (/ angle 180.0) 2e-66)
(+
(pow b 2.0)
(* (* (* a angle) (* a angle)) (* 3.08641975308642e-5 (pow PI 2.0))))
(+
(pow b 2.0)
(* (pow PI 2.0) (* 3.08641975308642e-5 (* angle (* angle (* a a))))))))
double code(double a, double b, double angle) {
double tmp;
if ((angle / 180.0) <= 2e-66) {
tmp = pow(b, 2.0) + (((a * angle) * (a * angle)) * (3.08641975308642e-5 * pow(((double) M_PI), 2.0)));
} else {
tmp = pow(b, 2.0) + (pow(((double) M_PI), 2.0) * (3.08641975308642e-5 * (angle * (angle * (a * a)))));
}
return tmp;
}
public static double code(double a, double b, double angle) {
double tmp;
if ((angle / 180.0) <= 2e-66) {
tmp = Math.pow(b, 2.0) + (((a * angle) * (a * angle)) * (3.08641975308642e-5 * Math.pow(Math.PI, 2.0)));
} else {
tmp = Math.pow(b, 2.0) + (Math.pow(Math.PI, 2.0) * (3.08641975308642e-5 * (angle * (angle * (a * a)))));
}
return tmp;
}
def code(a, b, angle): tmp = 0 if (angle / 180.0) <= 2e-66: tmp = math.pow(b, 2.0) + (((a * angle) * (a * angle)) * (3.08641975308642e-5 * math.pow(math.pi, 2.0))) else: tmp = math.pow(b, 2.0) + (math.pow(math.pi, 2.0) * (3.08641975308642e-5 * (angle * (angle * (a * a))))) return tmp
function code(a, b, angle) tmp = 0.0 if (Float64(angle / 180.0) <= 2e-66) tmp = Float64((b ^ 2.0) + Float64(Float64(Float64(a * angle) * Float64(a * angle)) * Float64(3.08641975308642e-5 * (pi ^ 2.0)))); else tmp = Float64((b ^ 2.0) + Float64((pi ^ 2.0) * Float64(3.08641975308642e-5 * Float64(angle * Float64(angle * Float64(a * a)))))); end return tmp end
function tmp_2 = code(a, b, angle) tmp = 0.0; if ((angle / 180.0) <= 2e-66) tmp = (b ^ 2.0) + (((a * angle) * (a * angle)) * (3.08641975308642e-5 * (pi ^ 2.0))); else tmp = (b ^ 2.0) + ((pi ^ 2.0) * (3.08641975308642e-5 * (angle * (angle * (a * a))))); end tmp_2 = tmp; end
code[a_, b_, angle_] := If[LessEqual[N[(angle / 180.0), $MachinePrecision], 2e-66], N[(N[Power[b, 2.0], $MachinePrecision] + N[(N[(N[(a * angle), $MachinePrecision] * N[(a * angle), $MachinePrecision]), $MachinePrecision] * N[(3.08641975308642e-5 * N[Power[Pi, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[Power[b, 2.0], $MachinePrecision] + N[(N[Power[Pi, 2.0], $MachinePrecision] * N[(3.08641975308642e-5 * N[(angle * N[(angle * N[(a * a), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{angle}{180} \leq 2 \cdot 10^{-66}:\\
\;\;\;\;{b}^{2} + \left(\left(a \cdot angle\right) \cdot \left(a \cdot angle\right)\right) \cdot \left(3.08641975308642 \cdot 10^{-5} \cdot {\pi}^{2}\right)\\
\mathbf{else}:\\
\;\;\;\;{b}^{2} + {\pi}^{2} \cdot \left(3.08641975308642 \cdot 10^{-5} \cdot \left(angle \cdot \left(angle \cdot \left(a \cdot a\right)\right)\right)\right)\\
\end{array}
\end{array}
if (/.f64 angle 180) < 2e-66Initial program 86.7%
Taylor expanded in angle around 0 86.5%
Taylor expanded in angle around 0 83.8%
*-commutative83.8%
metadata-eval83.8%
div-inv83.8%
associate-/l*83.8%
Applied egg-rr83.8%
associate-/r/83.8%
Simplified83.8%
associate-*l/83.8%
associate-*r/83.8%
unpow283.8%
associate-*r*83.9%
associate-*r*83.8%
swap-sqr83.8%
*-commutative83.8%
*-commutative83.8%
div-inv83.8%
metadata-eval83.8%
*-commutative83.8%
div-inv83.8%
metadata-eval83.8%
*-commutative83.8%
swap-sqr83.8%
metadata-eval83.8%
pow283.8%
Applied egg-rr83.8%
if 2e-66 < (/.f64 angle 180) Initial program 65.9%
Taylor expanded in angle around 0 65.8%
Taylor expanded in angle around 0 49.2%
associate-*r*49.2%
associate-*r*49.2%
unpow249.2%
associate-*l*59.6%
unpow259.6%
Simplified59.6%
Final simplification75.0%
(FPCore (a b angle) :precision binary64 (+ (pow b 2.0) (pow (* 0.005555555555555556 (* angle (* a PI))) 2.0)))
double code(double a, double b, double angle) {
return pow(b, 2.0) + pow((0.005555555555555556 * (angle * (a * ((double) M_PI)))), 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow(b, 2.0) + Math.pow((0.005555555555555556 * (angle * (a * Math.PI))), 2.0);
}
def code(a, b, angle): return math.pow(b, 2.0) + math.pow((0.005555555555555556 * (angle * (a * math.pi))), 2.0)
function code(a, b, angle) return Float64((b ^ 2.0) + (Float64(0.005555555555555556 * Float64(angle * Float64(a * pi))) ^ 2.0)) end
function tmp = code(a, b, angle) tmp = (b ^ 2.0) + ((0.005555555555555556 * (angle * (a * pi))) ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[b, 2.0], $MachinePrecision] + N[Power[N[(0.005555555555555556 * N[(angle * N[(a * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{b}^{2} + {\left(0.005555555555555556 \cdot \left(angle \cdot \left(a \cdot \pi\right)\right)\right)}^{2}
\end{array}
Initial program 79.1%
Taylor expanded in angle around 0 79.0%
Taylor expanded in angle around 0 72.9%
*-commutative72.9%
metadata-eval72.9%
div-inv72.9%
associate-/l*72.9%
Applied egg-rr72.9%
associate-/r/72.9%
Simplified72.9%
Taylor expanded in a around 0 72.9%
*-commutative72.9%
Simplified72.9%
Final simplification72.9%
(FPCore (a b angle) :precision binary64 (+ (pow b 2.0) (pow (* a (* 0.005555555555555556 (* angle PI))) 2.0)))
double code(double a, double b, double angle) {
return pow(b, 2.0) + pow((a * (0.005555555555555556 * (angle * ((double) M_PI)))), 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow(b, 2.0) + Math.pow((a * (0.005555555555555556 * (angle * Math.PI))), 2.0);
}
def code(a, b, angle): return math.pow(b, 2.0) + math.pow((a * (0.005555555555555556 * (angle * math.pi))), 2.0)
function code(a, b, angle) return Float64((b ^ 2.0) + (Float64(a * Float64(0.005555555555555556 * Float64(angle * pi))) ^ 2.0)) end
function tmp = code(a, b, angle) tmp = (b ^ 2.0) + ((a * (0.005555555555555556 * (angle * pi))) ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[b, 2.0], $MachinePrecision] + N[Power[N[(a * N[(0.005555555555555556 * N[(angle * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{b}^{2} + {\left(a \cdot \left(0.005555555555555556 \cdot \left(angle \cdot \pi\right)\right)\right)}^{2}
\end{array}
Initial program 79.1%
Taylor expanded in angle around 0 79.0%
Taylor expanded in angle around 0 72.9%
Final simplification72.9%
(FPCore (a b angle) :precision binary64 (+ (pow b 2.0) (pow (* a (* angle (/ PI 180.0))) 2.0)))
double code(double a, double b, double angle) {
return pow(b, 2.0) + pow((a * (angle * (((double) M_PI) / 180.0))), 2.0);
}
public static double code(double a, double b, double angle) {
return Math.pow(b, 2.0) + Math.pow((a * (angle * (Math.PI / 180.0))), 2.0);
}
def code(a, b, angle): return math.pow(b, 2.0) + math.pow((a * (angle * (math.pi / 180.0))), 2.0)
function code(a, b, angle) return Float64((b ^ 2.0) + (Float64(a * Float64(angle * Float64(pi / 180.0))) ^ 2.0)) end
function tmp = code(a, b, angle) tmp = (b ^ 2.0) + ((a * (angle * (pi / 180.0))) ^ 2.0); end
code[a_, b_, angle_] := N[(N[Power[b, 2.0], $MachinePrecision] + N[Power[N[(a * N[(angle * N[(Pi / 180.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{b}^{2} + {\left(a \cdot \left(angle \cdot \frac{\pi}{180}\right)\right)}^{2}
\end{array}
Initial program 79.1%
Taylor expanded in angle around 0 79.0%
Taylor expanded in angle around 0 72.9%
metadata-eval72.9%
associate-/r/72.9%
associate-/l*72.9%
*-commutative72.9%
associate-/l*72.9%
metadata-eval72.9%
associate-*r/72.9%
Simplified72.9%
Final simplification72.9%
herbie shell --seed 2023187
(FPCore (a b angle)
:name "ab-angle->ABCF A"
:precision binary64
(+ (pow (* a (sin (* (/ angle 180.0) PI))) 2.0) (pow (* b (cos (* (/ angle 180.0) PI))) 2.0)))