
(FPCore (a1 a2 th) :precision binary64 (let* ((t_1 (/ (cos th) (sqrt 2.0)))) (+ (* t_1 (* a1 a1)) (* t_1 (* a2 a2)))))
double code(double a1, double a2, double th) {
double t_1 = cos(th) / sqrt(2.0);
return (t_1 * (a1 * a1)) + (t_1 * (a2 * a2));
}
real(8) function code(a1, a2, th)
real(8), intent (in) :: a1
real(8), intent (in) :: a2
real(8), intent (in) :: th
real(8) :: t_1
t_1 = cos(th) / sqrt(2.0d0)
code = (t_1 * (a1 * a1)) + (t_1 * (a2 * a2))
end function
public static double code(double a1, double a2, double th) {
double t_1 = Math.cos(th) / Math.sqrt(2.0);
return (t_1 * (a1 * a1)) + (t_1 * (a2 * a2));
}
def code(a1, a2, th): t_1 = math.cos(th) / math.sqrt(2.0) return (t_1 * (a1 * a1)) + (t_1 * (a2 * a2))
function code(a1, a2, th) t_1 = Float64(cos(th) / sqrt(2.0)) return Float64(Float64(t_1 * Float64(a1 * a1)) + Float64(t_1 * Float64(a2 * a2))) end
function tmp = code(a1, a2, th) t_1 = cos(th) / sqrt(2.0); tmp = (t_1 * (a1 * a1)) + (t_1 * (a2 * a2)); end
code[a1_, a2_, th_] := Block[{t$95$1 = N[(N[Cos[th], $MachinePrecision] / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]}, N[(N[(t$95$1 * N[(a1 * a1), $MachinePrecision]), $MachinePrecision] + N[(t$95$1 * N[(a2 * a2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{\cos th}{\sqrt{2}}\\
t\_1 \cdot \left(a1 \cdot a1\right) + t\_1 \cdot \left(a2 \cdot a2\right)
\end{array}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 9 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (a1 a2 th) :precision binary64 (let* ((t_1 (/ (cos th) (sqrt 2.0)))) (+ (* t_1 (* a1 a1)) (* t_1 (* a2 a2)))))
double code(double a1, double a2, double th) {
double t_1 = cos(th) / sqrt(2.0);
return (t_1 * (a1 * a1)) + (t_1 * (a2 * a2));
}
real(8) function code(a1, a2, th)
real(8), intent (in) :: a1
real(8), intent (in) :: a2
real(8), intent (in) :: th
real(8) :: t_1
t_1 = cos(th) / sqrt(2.0d0)
code = (t_1 * (a1 * a1)) + (t_1 * (a2 * a2))
end function
public static double code(double a1, double a2, double th) {
double t_1 = Math.cos(th) / Math.sqrt(2.0);
return (t_1 * (a1 * a1)) + (t_1 * (a2 * a2));
}
def code(a1, a2, th): t_1 = math.cos(th) / math.sqrt(2.0) return (t_1 * (a1 * a1)) + (t_1 * (a2 * a2))
function code(a1, a2, th) t_1 = Float64(cos(th) / sqrt(2.0)) return Float64(Float64(t_1 * Float64(a1 * a1)) + Float64(t_1 * Float64(a2 * a2))) end
function tmp = code(a1, a2, th) t_1 = cos(th) / sqrt(2.0); tmp = (t_1 * (a1 * a1)) + (t_1 * (a2 * a2)); end
code[a1_, a2_, th_] := Block[{t$95$1 = N[(N[Cos[th], $MachinePrecision] / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]}, N[(N[(t$95$1 * N[(a1 * a1), $MachinePrecision]), $MachinePrecision] + N[(t$95$1 * N[(a2 * a2), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_1 := \frac{\cos th}{\sqrt{2}}\\
t\_1 \cdot \left(a1 \cdot a1\right) + t\_1 \cdot \left(a2 \cdot a2\right)
\end{array}
\end{array}
a2_m = (fabs.f64 a2) a1_m = (fabs.f64 a1) NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. (FPCore (a1_m a2_m th) :precision binary64 (+ (* (* a2_m a2_m) (* (pow 4.0 -0.25) (cos th))) (* (* a1_m a1_m) (/ (cos th) (sqrt 2.0)))))
a2_m = fabs(a2);
a1_m = fabs(a1);
assert(a1_m < a2_m && a2_m < th);
double code(double a1_m, double a2_m, double th) {
return ((a2_m * a2_m) * (pow(4.0, -0.25) * cos(th))) + ((a1_m * a1_m) * (cos(th) / sqrt(2.0)));
}
a2_m = abs(a2)
a1_m = abs(a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
real(8) function code(a1_m, a2_m, th)
real(8), intent (in) :: a1_m
real(8), intent (in) :: a2_m
real(8), intent (in) :: th
code = ((a2_m * a2_m) * ((4.0d0 ** (-0.25d0)) * cos(th))) + ((a1_m * a1_m) * (cos(th) / sqrt(2.0d0)))
end function
a2_m = Math.abs(a2);
a1_m = Math.abs(a1);
assert a1_m < a2_m && a2_m < th;
public static double code(double a1_m, double a2_m, double th) {
return ((a2_m * a2_m) * (Math.pow(4.0, -0.25) * Math.cos(th))) + ((a1_m * a1_m) * (Math.cos(th) / Math.sqrt(2.0)));
}
a2_m = math.fabs(a2) a1_m = math.fabs(a1) [a1_m, a2_m, th] = sort([a1_m, a2_m, th]) def code(a1_m, a2_m, th): return ((a2_m * a2_m) * (math.pow(4.0, -0.25) * math.cos(th))) + ((a1_m * a1_m) * (math.cos(th) / math.sqrt(2.0)))
a2_m = abs(a2) a1_m = abs(a1) a1_m, a2_m, th = sort([a1_m, a2_m, th]) function code(a1_m, a2_m, th) return Float64(Float64(Float64(a2_m * a2_m) * Float64((4.0 ^ -0.25) * cos(th))) + Float64(Float64(a1_m * a1_m) * Float64(cos(th) / sqrt(2.0)))) end
a2_m = abs(a2);
a1_m = abs(a1);
a1_m, a2_m, th = num2cell(sort([a1_m, a2_m, th])){:}
function tmp = code(a1_m, a2_m, th)
tmp = ((a2_m * a2_m) * ((4.0 ^ -0.25) * cos(th))) + ((a1_m * a1_m) * (cos(th) / sqrt(2.0)));
end
a2_m = N[Abs[a2], $MachinePrecision] a1_m = N[Abs[a1], $MachinePrecision] NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. code[a1$95$m_, a2$95$m_, th_] := N[(N[(N[(a2$95$m * a2$95$m), $MachinePrecision] * N[(N[Power[4.0, -0.25], $MachinePrecision] * N[Cos[th], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(a1$95$m * a1$95$m), $MachinePrecision] * N[(N[Cos[th], $MachinePrecision] / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
a2_m = \left|a2\right|
\\
a1_m = \left|a1\right|
\\
[a1_m, a2_m, th] = \mathsf{sort}([a1_m, a2_m, th])\\
\\
\left(a2\_m \cdot a2\_m\right) \cdot \left({4}^{-0.25} \cdot \cos th\right) + \left(a1\_m \cdot a1\_m\right) \cdot \frac{\cos th}{\sqrt{2}}
\end{array}
Initial program 99.6%
lift-/.f64N/A
clear-numN/A
associate-/r/N/A
lower-*.f64N/A
lift-sqrt.f64N/A
pow1/2N/A
pow-flipN/A
sqr-powN/A
pow-prod-downN/A
lower-pow.f64N/A
metadata-evalN/A
metadata-evalN/A
metadata-eval99.5
Applied rewrites99.5%
Final simplification99.5%
a2_m = (fabs.f64 a2) a1_m = (fabs.f64 a1) NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. (FPCore (a1_m a2_m th) :precision binary64 (+ (* (* (/ a2_m (sqrt 2.0)) (cos th)) a2_m) (* (* a1_m a1_m) (/ (cos th) (sqrt 2.0)))))
a2_m = fabs(a2);
a1_m = fabs(a1);
assert(a1_m < a2_m && a2_m < th);
double code(double a1_m, double a2_m, double th) {
return (((a2_m / sqrt(2.0)) * cos(th)) * a2_m) + ((a1_m * a1_m) * (cos(th) / sqrt(2.0)));
}
a2_m = abs(a2)
a1_m = abs(a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
real(8) function code(a1_m, a2_m, th)
real(8), intent (in) :: a1_m
real(8), intent (in) :: a2_m
real(8), intent (in) :: th
code = (((a2_m / sqrt(2.0d0)) * cos(th)) * a2_m) + ((a1_m * a1_m) * (cos(th) / sqrt(2.0d0)))
end function
a2_m = Math.abs(a2);
a1_m = Math.abs(a1);
assert a1_m < a2_m && a2_m < th;
public static double code(double a1_m, double a2_m, double th) {
return (((a2_m / Math.sqrt(2.0)) * Math.cos(th)) * a2_m) + ((a1_m * a1_m) * (Math.cos(th) / Math.sqrt(2.0)));
}
a2_m = math.fabs(a2) a1_m = math.fabs(a1) [a1_m, a2_m, th] = sort([a1_m, a2_m, th]) def code(a1_m, a2_m, th): return (((a2_m / math.sqrt(2.0)) * math.cos(th)) * a2_m) + ((a1_m * a1_m) * (math.cos(th) / math.sqrt(2.0)))
a2_m = abs(a2) a1_m = abs(a1) a1_m, a2_m, th = sort([a1_m, a2_m, th]) function code(a1_m, a2_m, th) return Float64(Float64(Float64(Float64(a2_m / sqrt(2.0)) * cos(th)) * a2_m) + Float64(Float64(a1_m * a1_m) * Float64(cos(th) / sqrt(2.0)))) end
a2_m = abs(a2);
a1_m = abs(a1);
a1_m, a2_m, th = num2cell(sort([a1_m, a2_m, th])){:}
function tmp = code(a1_m, a2_m, th)
tmp = (((a2_m / sqrt(2.0)) * cos(th)) * a2_m) + ((a1_m * a1_m) * (cos(th) / sqrt(2.0)));
end
a2_m = N[Abs[a2], $MachinePrecision] a1_m = N[Abs[a1], $MachinePrecision] NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. code[a1$95$m_, a2$95$m_, th_] := N[(N[(N[(N[(a2$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * N[Cos[th], $MachinePrecision]), $MachinePrecision] * a2$95$m), $MachinePrecision] + N[(N[(a1$95$m * a1$95$m), $MachinePrecision] * N[(N[Cos[th], $MachinePrecision] / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
a2_m = \left|a2\right|
\\
a1_m = \left|a1\right|
\\
[a1_m, a2_m, th] = \mathsf{sort}([a1_m, a2_m, th])\\
\\
\left(\frac{a2\_m}{\sqrt{2}} \cdot \cos th\right) \cdot a2\_m + \left(a1\_m \cdot a1\_m\right) \cdot \frac{\cos th}{\sqrt{2}}
\end{array}
Initial program 99.6%
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lift-/.f64N/A
div-invN/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
frac-2negN/A
metadata-evalN/A
associate-*l/N/A
neg-mul-1N/A
frac-2neg-revN/A
lower-/.f6499.6
Applied rewrites99.6%
Final simplification99.6%
a2_m = (fabs.f64 a2) a1_m = (fabs.f64 a1) NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. (FPCore (a1_m a2_m th) :precision binary64 (+ (* (* (/ a2_m (sqrt 2.0)) a2_m) (cos th)) (* (* a1_m a1_m) (/ (cos th) (sqrt 2.0)))))
a2_m = fabs(a2);
a1_m = fabs(a1);
assert(a1_m < a2_m && a2_m < th);
double code(double a1_m, double a2_m, double th) {
return (((a2_m / sqrt(2.0)) * a2_m) * cos(th)) + ((a1_m * a1_m) * (cos(th) / sqrt(2.0)));
}
a2_m = abs(a2)
a1_m = abs(a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
real(8) function code(a1_m, a2_m, th)
real(8), intent (in) :: a1_m
real(8), intent (in) :: a2_m
real(8), intent (in) :: th
code = (((a2_m / sqrt(2.0d0)) * a2_m) * cos(th)) + ((a1_m * a1_m) * (cos(th) / sqrt(2.0d0)))
end function
a2_m = Math.abs(a2);
a1_m = Math.abs(a1);
assert a1_m < a2_m && a2_m < th;
public static double code(double a1_m, double a2_m, double th) {
return (((a2_m / Math.sqrt(2.0)) * a2_m) * Math.cos(th)) + ((a1_m * a1_m) * (Math.cos(th) / Math.sqrt(2.0)));
}
a2_m = math.fabs(a2) a1_m = math.fabs(a1) [a1_m, a2_m, th] = sort([a1_m, a2_m, th]) def code(a1_m, a2_m, th): return (((a2_m / math.sqrt(2.0)) * a2_m) * math.cos(th)) + ((a1_m * a1_m) * (math.cos(th) / math.sqrt(2.0)))
a2_m = abs(a2) a1_m = abs(a1) a1_m, a2_m, th = sort([a1_m, a2_m, th]) function code(a1_m, a2_m, th) return Float64(Float64(Float64(Float64(a2_m / sqrt(2.0)) * a2_m) * cos(th)) + Float64(Float64(a1_m * a1_m) * Float64(cos(th) / sqrt(2.0)))) end
a2_m = abs(a2);
a1_m = abs(a1);
a1_m, a2_m, th = num2cell(sort([a1_m, a2_m, th])){:}
function tmp = code(a1_m, a2_m, th)
tmp = (((a2_m / sqrt(2.0)) * a2_m) * cos(th)) + ((a1_m * a1_m) * (cos(th) / sqrt(2.0)));
end
a2_m = N[Abs[a2], $MachinePrecision] a1_m = N[Abs[a1], $MachinePrecision] NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. code[a1$95$m_, a2$95$m_, th_] := N[(N[(N[(N[(a2$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * a2$95$m), $MachinePrecision] * N[Cos[th], $MachinePrecision]), $MachinePrecision] + N[(N[(a1$95$m * a1$95$m), $MachinePrecision] * N[(N[Cos[th], $MachinePrecision] / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
a2_m = \left|a2\right|
\\
a1_m = \left|a1\right|
\\
[a1_m, a2_m, th] = \mathsf{sort}([a1_m, a2_m, th])\\
\\
\left(\frac{a2\_m}{\sqrt{2}} \cdot a2\_m\right) \cdot \cos th + \left(a1\_m \cdot a1\_m\right) \cdot \frac{\cos th}{\sqrt{2}}
\end{array}
Initial program 99.6%
lift-*.f64N/A
lift-/.f64N/A
associate-*l/N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
div-invN/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
frac-2negN/A
metadata-evalN/A
associate-*l/N/A
neg-mul-1N/A
frac-2neg-revN/A
lower-/.f6499.6
Applied rewrites99.6%
Final simplification99.6%
a2_m = (fabs.f64 a2)
a1_m = (fabs.f64 a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
(FPCore (a1_m a2_m th)
:precision binary64
(let* ((t_1 (* (/ a1_m (sqrt 2.0)) a1_m)))
(if (<= (cos th) -0.005)
(+ (* (- a2_m) (/ a2_m (sqrt 2.0))) t_1)
(+ (* (sqrt (/ (* a2_m a2_m) 2.0)) a2_m) t_1))))a2_m = fabs(a2);
a1_m = fabs(a1);
assert(a1_m < a2_m && a2_m < th);
double code(double a1_m, double a2_m, double th) {
double t_1 = (a1_m / sqrt(2.0)) * a1_m;
double tmp;
if (cos(th) <= -0.005) {
tmp = (-a2_m * (a2_m / sqrt(2.0))) + t_1;
} else {
tmp = (sqrt(((a2_m * a2_m) / 2.0)) * a2_m) + t_1;
}
return tmp;
}
a2_m = abs(a2)
a1_m = abs(a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
real(8) function code(a1_m, a2_m, th)
real(8), intent (in) :: a1_m
real(8), intent (in) :: a2_m
real(8), intent (in) :: th
real(8) :: t_1
real(8) :: tmp
t_1 = (a1_m / sqrt(2.0d0)) * a1_m
if (cos(th) <= (-0.005d0)) then
tmp = (-a2_m * (a2_m / sqrt(2.0d0))) + t_1
else
tmp = (sqrt(((a2_m * a2_m) / 2.0d0)) * a2_m) + t_1
end if
code = tmp
end function
a2_m = Math.abs(a2);
a1_m = Math.abs(a1);
assert a1_m < a2_m && a2_m < th;
public static double code(double a1_m, double a2_m, double th) {
double t_1 = (a1_m / Math.sqrt(2.0)) * a1_m;
double tmp;
if (Math.cos(th) <= -0.005) {
tmp = (-a2_m * (a2_m / Math.sqrt(2.0))) + t_1;
} else {
tmp = (Math.sqrt(((a2_m * a2_m) / 2.0)) * a2_m) + t_1;
}
return tmp;
}
a2_m = math.fabs(a2) a1_m = math.fabs(a1) [a1_m, a2_m, th] = sort([a1_m, a2_m, th]) def code(a1_m, a2_m, th): t_1 = (a1_m / math.sqrt(2.0)) * a1_m tmp = 0 if math.cos(th) <= -0.005: tmp = (-a2_m * (a2_m / math.sqrt(2.0))) + t_1 else: tmp = (math.sqrt(((a2_m * a2_m) / 2.0)) * a2_m) + t_1 return tmp
a2_m = abs(a2) a1_m = abs(a1) a1_m, a2_m, th = sort([a1_m, a2_m, th]) function code(a1_m, a2_m, th) t_1 = Float64(Float64(a1_m / sqrt(2.0)) * a1_m) tmp = 0.0 if (cos(th) <= -0.005) tmp = Float64(Float64(Float64(-a2_m) * Float64(a2_m / sqrt(2.0))) + t_1); else tmp = Float64(Float64(sqrt(Float64(Float64(a2_m * a2_m) / 2.0)) * a2_m) + t_1); end return tmp end
a2_m = abs(a2);
a1_m = abs(a1);
a1_m, a2_m, th = num2cell(sort([a1_m, a2_m, th])){:}
function tmp_2 = code(a1_m, a2_m, th)
t_1 = (a1_m / sqrt(2.0)) * a1_m;
tmp = 0.0;
if (cos(th) <= -0.005)
tmp = (-a2_m * (a2_m / sqrt(2.0))) + t_1;
else
tmp = (sqrt(((a2_m * a2_m) / 2.0)) * a2_m) + t_1;
end
tmp_2 = tmp;
end
a2_m = N[Abs[a2], $MachinePrecision]
a1_m = N[Abs[a1], $MachinePrecision]
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
code[a1$95$m_, a2$95$m_, th_] := Block[{t$95$1 = N[(N[(a1$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * a1$95$m), $MachinePrecision]}, If[LessEqual[N[Cos[th], $MachinePrecision], -0.005], N[(N[((-a2$95$m) * N[(a2$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + t$95$1), $MachinePrecision], N[(N[(N[Sqrt[N[(N[(a2$95$m * a2$95$m), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision] * a2$95$m), $MachinePrecision] + t$95$1), $MachinePrecision]]]
\begin{array}{l}
a2_m = \left|a2\right|
\\
a1_m = \left|a1\right|
\\
[a1_m, a2_m, th] = \mathsf{sort}([a1_m, a2_m, th])\\
\\
\begin{array}{l}
t_1 := \frac{a1\_m}{\sqrt{2}} \cdot a1\_m\\
\mathbf{if}\;\cos th \leq -0.005:\\
\;\;\;\;\left(-a2\_m\right) \cdot \frac{a2\_m}{\sqrt{2}} + t\_1\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\frac{a2\_m \cdot a2\_m}{2}} \cdot a2\_m + t\_1\\
\end{array}
\end{array}
if (cos.f64 th) < -0.0050000000000000001Initial program 99.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6455.6
Applied rewrites55.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f648.7
Applied rewrites8.7%
Applied rewrites31.0%
if -0.0050000000000000001 < (cos.f64 th) Initial program 99.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6491.6
Applied rewrites91.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6483.3
Applied rewrites83.3%
Applied rewrites58.4%
Final simplification51.5%
a2_m = (fabs.f64 a2) a1_m = (fabs.f64 a1) NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. (FPCore (a1_m a2_m th) :precision binary64 (+ (* (sqrt (/ (* a2_m a2_m) 2.0)) (* a2_m (cos th))) (* (/ a1_m (sqrt 2.0)) a1_m)))
a2_m = fabs(a2);
a1_m = fabs(a1);
assert(a1_m < a2_m && a2_m < th);
double code(double a1_m, double a2_m, double th) {
return (sqrt(((a2_m * a2_m) / 2.0)) * (a2_m * cos(th))) + ((a1_m / sqrt(2.0)) * a1_m);
}
a2_m = abs(a2)
a1_m = abs(a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
real(8) function code(a1_m, a2_m, th)
real(8), intent (in) :: a1_m
real(8), intent (in) :: a2_m
real(8), intent (in) :: th
code = (sqrt(((a2_m * a2_m) / 2.0d0)) * (a2_m * cos(th))) + ((a1_m / sqrt(2.0d0)) * a1_m)
end function
a2_m = Math.abs(a2);
a1_m = Math.abs(a1);
assert a1_m < a2_m && a2_m < th;
public static double code(double a1_m, double a2_m, double th) {
return (Math.sqrt(((a2_m * a2_m) / 2.0)) * (a2_m * Math.cos(th))) + ((a1_m / Math.sqrt(2.0)) * a1_m);
}
a2_m = math.fabs(a2) a1_m = math.fabs(a1) [a1_m, a2_m, th] = sort([a1_m, a2_m, th]) def code(a1_m, a2_m, th): return (math.sqrt(((a2_m * a2_m) / 2.0)) * (a2_m * math.cos(th))) + ((a1_m / math.sqrt(2.0)) * a1_m)
a2_m = abs(a2) a1_m = abs(a1) a1_m, a2_m, th = sort([a1_m, a2_m, th]) function code(a1_m, a2_m, th) return Float64(Float64(sqrt(Float64(Float64(a2_m * a2_m) / 2.0)) * Float64(a2_m * cos(th))) + Float64(Float64(a1_m / sqrt(2.0)) * a1_m)) end
a2_m = abs(a2);
a1_m = abs(a1);
a1_m, a2_m, th = num2cell(sort([a1_m, a2_m, th])){:}
function tmp = code(a1_m, a2_m, th)
tmp = (sqrt(((a2_m * a2_m) / 2.0)) * (a2_m * cos(th))) + ((a1_m / sqrt(2.0)) * a1_m);
end
a2_m = N[Abs[a2], $MachinePrecision] a1_m = N[Abs[a1], $MachinePrecision] NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. code[a1$95$m_, a2$95$m_, th_] := N[(N[(N[Sqrt[N[(N[(a2$95$m * a2$95$m), $MachinePrecision] / 2.0), $MachinePrecision]], $MachinePrecision] * N[(a2$95$m * N[Cos[th], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[(a1$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * a1$95$m), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
a2_m = \left|a2\right|
\\
a1_m = \left|a1\right|
\\
[a1_m, a2_m, th] = \mathsf{sort}([a1_m, a2_m, th])\\
\\
\sqrt{\frac{a2\_m \cdot a2\_m}{2}} \cdot \left(a2\_m \cdot \cos th\right) + \frac{a1\_m}{\sqrt{2}} \cdot a1\_m
\end{array}
Initial program 99.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6482.5
Applied rewrites82.5%
lift-*.f64N/A
*-commutativeN/A
/-rgt-identityN/A
associate-/r/N/A
lift-*.f64N/A
lift-/.f64N/A
frac-2negN/A
associate-/r/N/A
sqr-neg-revN/A
times-fracN/A
frac-2negN/A
lower-*.f64N/A
lower-/.f64N/A
lower-neg.f64N/A
frac-2negN/A
metadata-evalN/A
remove-double-negN/A
lower-/.f64N/A
lower-/.f6482.5
Applied rewrites82.5%
lift-/.f64N/A
unpow1N/A
metadata-evalN/A
sqrt-pow1N/A
pow2N/A
lift-sqrt.f64N/A
sqrt-undivN/A
lower-sqrt.f64N/A
lower-/.f64N/A
lower-*.f6456.5
Applied rewrites56.5%
Taylor expanded in a2 around 0
*-commutativeN/A
lower-*.f64N/A
lower-cos.f6456.5
Applied rewrites56.5%
Final simplification56.5%
a2_m = (fabs.f64 a2) a1_m = (fabs.f64 a1) NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. (FPCore (a1_m a2_m th) :precision binary64 (let* ((t_1 (/ a2_m (sqrt 2.0))) (t_2 (* (/ a1_m (sqrt 2.0)) a1_m))) (if (<= (cos th) -5e-310) (+ (* (- a2_m) t_1) t_2) (+ (* t_1 a2_m) t_2))))
a2_m = fabs(a2);
a1_m = fabs(a1);
assert(a1_m < a2_m && a2_m < th);
double code(double a1_m, double a2_m, double th) {
double t_1 = a2_m / sqrt(2.0);
double t_2 = (a1_m / sqrt(2.0)) * a1_m;
double tmp;
if (cos(th) <= -5e-310) {
tmp = (-a2_m * t_1) + t_2;
} else {
tmp = (t_1 * a2_m) + t_2;
}
return tmp;
}
a2_m = abs(a2)
a1_m = abs(a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
real(8) function code(a1_m, a2_m, th)
real(8), intent (in) :: a1_m
real(8), intent (in) :: a2_m
real(8), intent (in) :: th
real(8) :: t_1
real(8) :: t_2
real(8) :: tmp
t_1 = a2_m / sqrt(2.0d0)
t_2 = (a1_m / sqrt(2.0d0)) * a1_m
if (cos(th) <= (-5d-310)) then
tmp = (-a2_m * t_1) + t_2
else
tmp = (t_1 * a2_m) + t_2
end if
code = tmp
end function
a2_m = Math.abs(a2);
a1_m = Math.abs(a1);
assert a1_m < a2_m && a2_m < th;
public static double code(double a1_m, double a2_m, double th) {
double t_1 = a2_m / Math.sqrt(2.0);
double t_2 = (a1_m / Math.sqrt(2.0)) * a1_m;
double tmp;
if (Math.cos(th) <= -5e-310) {
tmp = (-a2_m * t_1) + t_2;
} else {
tmp = (t_1 * a2_m) + t_2;
}
return tmp;
}
a2_m = math.fabs(a2) a1_m = math.fabs(a1) [a1_m, a2_m, th] = sort([a1_m, a2_m, th]) def code(a1_m, a2_m, th): t_1 = a2_m / math.sqrt(2.0) t_2 = (a1_m / math.sqrt(2.0)) * a1_m tmp = 0 if math.cos(th) <= -5e-310: tmp = (-a2_m * t_1) + t_2 else: tmp = (t_1 * a2_m) + t_2 return tmp
a2_m = abs(a2) a1_m = abs(a1) a1_m, a2_m, th = sort([a1_m, a2_m, th]) function code(a1_m, a2_m, th) t_1 = Float64(a2_m / sqrt(2.0)) t_2 = Float64(Float64(a1_m / sqrt(2.0)) * a1_m) tmp = 0.0 if (cos(th) <= -5e-310) tmp = Float64(Float64(Float64(-a2_m) * t_1) + t_2); else tmp = Float64(Float64(t_1 * a2_m) + t_2); end return tmp end
a2_m = abs(a2);
a1_m = abs(a1);
a1_m, a2_m, th = num2cell(sort([a1_m, a2_m, th])){:}
function tmp_2 = code(a1_m, a2_m, th)
t_1 = a2_m / sqrt(2.0);
t_2 = (a1_m / sqrt(2.0)) * a1_m;
tmp = 0.0;
if (cos(th) <= -5e-310)
tmp = (-a2_m * t_1) + t_2;
else
tmp = (t_1 * a2_m) + t_2;
end
tmp_2 = tmp;
end
a2_m = N[Abs[a2], $MachinePrecision]
a1_m = N[Abs[a1], $MachinePrecision]
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
code[a1$95$m_, a2$95$m_, th_] := Block[{t$95$1 = N[(a2$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$2 = N[(N[(a1$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * a1$95$m), $MachinePrecision]}, If[LessEqual[N[Cos[th], $MachinePrecision], -5e-310], N[(N[((-a2$95$m) * t$95$1), $MachinePrecision] + t$95$2), $MachinePrecision], N[(N[(t$95$1 * a2$95$m), $MachinePrecision] + t$95$2), $MachinePrecision]]]]
\begin{array}{l}
a2_m = \left|a2\right|
\\
a1_m = \left|a1\right|
\\
[a1_m, a2_m, th] = \mathsf{sort}([a1_m, a2_m, th])\\
\\
\begin{array}{l}
t_1 := \frac{a2\_m}{\sqrt{2}}\\
t_2 := \frac{a1\_m}{\sqrt{2}} \cdot a1\_m\\
\mathbf{if}\;\cos th \leq -5 \cdot 10^{-310}:\\
\;\;\;\;\left(-a2\_m\right) \cdot t\_1 + t\_2\\
\mathbf{else}:\\
\;\;\;\;t\_1 \cdot a2\_m + t\_2\\
\end{array}
\end{array}
if (cos.f64 th) < -4.999999999999985e-310Initial program 99.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6455.6
Applied rewrites55.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f648.7
Applied rewrites8.7%
Applied rewrites31.0%
if -4.999999999999985e-310 < (cos.f64 th) Initial program 99.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6491.6
Applied rewrites91.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6483.3
Applied rewrites83.3%
Final simplification70.1%
a2_m = (fabs.f64 a2) a1_m = (fabs.f64 a1) NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. (FPCore (a1_m a2_m th) :precision binary64 (+ (* (* (/ a2_m (sqrt 2.0)) (cos th)) a2_m) (* (/ a1_m (sqrt 2.0)) a1_m)))
a2_m = fabs(a2);
a1_m = fabs(a1);
assert(a1_m < a2_m && a2_m < th);
double code(double a1_m, double a2_m, double th) {
return (((a2_m / sqrt(2.0)) * cos(th)) * a2_m) + ((a1_m / sqrt(2.0)) * a1_m);
}
a2_m = abs(a2)
a1_m = abs(a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
real(8) function code(a1_m, a2_m, th)
real(8), intent (in) :: a1_m
real(8), intent (in) :: a2_m
real(8), intent (in) :: th
code = (((a2_m / sqrt(2.0d0)) * cos(th)) * a2_m) + ((a1_m / sqrt(2.0d0)) * a1_m)
end function
a2_m = Math.abs(a2);
a1_m = Math.abs(a1);
assert a1_m < a2_m && a2_m < th;
public static double code(double a1_m, double a2_m, double th) {
return (((a2_m / Math.sqrt(2.0)) * Math.cos(th)) * a2_m) + ((a1_m / Math.sqrt(2.0)) * a1_m);
}
a2_m = math.fabs(a2) a1_m = math.fabs(a1) [a1_m, a2_m, th] = sort([a1_m, a2_m, th]) def code(a1_m, a2_m, th): return (((a2_m / math.sqrt(2.0)) * math.cos(th)) * a2_m) + ((a1_m / math.sqrt(2.0)) * a1_m)
a2_m = abs(a2) a1_m = abs(a1) a1_m, a2_m, th = sort([a1_m, a2_m, th]) function code(a1_m, a2_m, th) return Float64(Float64(Float64(Float64(a2_m / sqrt(2.0)) * cos(th)) * a2_m) + Float64(Float64(a1_m / sqrt(2.0)) * a1_m)) end
a2_m = abs(a2);
a1_m = abs(a1);
a1_m, a2_m, th = num2cell(sort([a1_m, a2_m, th])){:}
function tmp = code(a1_m, a2_m, th)
tmp = (((a2_m / sqrt(2.0)) * cos(th)) * a2_m) + ((a1_m / sqrt(2.0)) * a1_m);
end
a2_m = N[Abs[a2], $MachinePrecision] a1_m = N[Abs[a1], $MachinePrecision] NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. code[a1$95$m_, a2$95$m_, th_] := N[(N[(N[(N[(a2$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * N[Cos[th], $MachinePrecision]), $MachinePrecision] * a2$95$m), $MachinePrecision] + N[(N[(a1$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * a1$95$m), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
a2_m = \left|a2\right|
\\
a1_m = \left|a1\right|
\\
[a1_m, a2_m, th] = \mathsf{sort}([a1_m, a2_m, th])\\
\\
\left(\frac{a2\_m}{\sqrt{2}} \cdot \cos th\right) \cdot a2\_m + \frac{a1\_m}{\sqrt{2}} \cdot a1\_m
\end{array}
Initial program 99.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6482.5
Applied rewrites82.5%
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lift-/.f64N/A
frac-2negN/A
associate-*l/N/A
neg-mul-1N/A
times-fracN/A
metadata-evalN/A
frac-2negN/A
/-rgt-identityN/A
lower-*.f64N/A
lower-/.f6482.5
Applied rewrites82.5%
Final simplification82.5%
a2_m = (fabs.f64 a2) a1_m = (fabs.f64 a1) NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. (FPCore (a1_m a2_m th) :precision binary64 (+ (* (* (/ a2_m (sqrt 2.0)) a2_m) (cos th)) (* (/ a1_m (sqrt 2.0)) a1_m)))
a2_m = fabs(a2);
a1_m = fabs(a1);
assert(a1_m < a2_m && a2_m < th);
double code(double a1_m, double a2_m, double th) {
return (((a2_m / sqrt(2.0)) * a2_m) * cos(th)) + ((a1_m / sqrt(2.0)) * a1_m);
}
a2_m = abs(a2)
a1_m = abs(a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
real(8) function code(a1_m, a2_m, th)
real(8), intent (in) :: a1_m
real(8), intent (in) :: a2_m
real(8), intent (in) :: th
code = (((a2_m / sqrt(2.0d0)) * a2_m) * cos(th)) + ((a1_m / sqrt(2.0d0)) * a1_m)
end function
a2_m = Math.abs(a2);
a1_m = Math.abs(a1);
assert a1_m < a2_m && a2_m < th;
public static double code(double a1_m, double a2_m, double th) {
return (((a2_m / Math.sqrt(2.0)) * a2_m) * Math.cos(th)) + ((a1_m / Math.sqrt(2.0)) * a1_m);
}
a2_m = math.fabs(a2) a1_m = math.fabs(a1) [a1_m, a2_m, th] = sort([a1_m, a2_m, th]) def code(a1_m, a2_m, th): return (((a2_m / math.sqrt(2.0)) * a2_m) * math.cos(th)) + ((a1_m / math.sqrt(2.0)) * a1_m)
a2_m = abs(a2) a1_m = abs(a1) a1_m, a2_m, th = sort([a1_m, a2_m, th]) function code(a1_m, a2_m, th) return Float64(Float64(Float64(Float64(a2_m / sqrt(2.0)) * a2_m) * cos(th)) + Float64(Float64(a1_m / sqrt(2.0)) * a1_m)) end
a2_m = abs(a2);
a1_m = abs(a1);
a1_m, a2_m, th = num2cell(sort([a1_m, a2_m, th])){:}
function tmp = code(a1_m, a2_m, th)
tmp = (((a2_m / sqrt(2.0)) * a2_m) * cos(th)) + ((a1_m / sqrt(2.0)) * a1_m);
end
a2_m = N[Abs[a2], $MachinePrecision] a1_m = N[Abs[a1], $MachinePrecision] NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. code[a1$95$m_, a2$95$m_, th_] := N[(N[(N[(N[(a2$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * a2$95$m), $MachinePrecision] * N[Cos[th], $MachinePrecision]), $MachinePrecision] + N[(N[(a1$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * a1$95$m), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
a2_m = \left|a2\right|
\\
a1_m = \left|a1\right|
\\
[a1_m, a2_m, th] = \mathsf{sort}([a1_m, a2_m, th])\\
\\
\left(\frac{a2\_m}{\sqrt{2}} \cdot a2\_m\right) \cdot \cos th + \frac{a1\_m}{\sqrt{2}} \cdot a1\_m
\end{array}
Initial program 99.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6482.5
Applied rewrites82.5%
lift-*.f64N/A
*-commutativeN/A
lift-/.f64N/A
clear-numN/A
lift-/.f64N/A
div-invN/A
lift-/.f64N/A
associate-/r/N/A
lower-*.f64N/A
lift-*.f64N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f6482.5
Applied rewrites82.5%
Final simplification82.5%
a2_m = (fabs.f64 a2) a1_m = (fabs.f64 a1) NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. (FPCore (a1_m a2_m th) :precision binary64 (+ (* (/ a2_m (sqrt 2.0)) a2_m) (* (/ a1_m (sqrt 2.0)) a1_m)))
a2_m = fabs(a2);
a1_m = fabs(a1);
assert(a1_m < a2_m && a2_m < th);
double code(double a1_m, double a2_m, double th) {
return ((a2_m / sqrt(2.0)) * a2_m) + ((a1_m / sqrt(2.0)) * a1_m);
}
a2_m = abs(a2)
a1_m = abs(a1)
NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function.
real(8) function code(a1_m, a2_m, th)
real(8), intent (in) :: a1_m
real(8), intent (in) :: a2_m
real(8), intent (in) :: th
code = ((a2_m / sqrt(2.0d0)) * a2_m) + ((a1_m / sqrt(2.0d0)) * a1_m)
end function
a2_m = Math.abs(a2);
a1_m = Math.abs(a1);
assert a1_m < a2_m && a2_m < th;
public static double code(double a1_m, double a2_m, double th) {
return ((a2_m / Math.sqrt(2.0)) * a2_m) + ((a1_m / Math.sqrt(2.0)) * a1_m);
}
a2_m = math.fabs(a2) a1_m = math.fabs(a1) [a1_m, a2_m, th] = sort([a1_m, a2_m, th]) def code(a1_m, a2_m, th): return ((a2_m / math.sqrt(2.0)) * a2_m) + ((a1_m / math.sqrt(2.0)) * a1_m)
a2_m = abs(a2) a1_m = abs(a1) a1_m, a2_m, th = sort([a1_m, a2_m, th]) function code(a1_m, a2_m, th) return Float64(Float64(Float64(a2_m / sqrt(2.0)) * a2_m) + Float64(Float64(a1_m / sqrt(2.0)) * a1_m)) end
a2_m = abs(a2);
a1_m = abs(a1);
a1_m, a2_m, th = num2cell(sort([a1_m, a2_m, th])){:}
function tmp = code(a1_m, a2_m, th)
tmp = ((a2_m / sqrt(2.0)) * a2_m) + ((a1_m / sqrt(2.0)) * a1_m);
end
a2_m = N[Abs[a2], $MachinePrecision] a1_m = N[Abs[a1], $MachinePrecision] NOTE: a1_m, a2_m, and th should be sorted in increasing order before calling this function. code[a1$95$m_, a2$95$m_, th_] := N[(N[(N[(a2$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * a2$95$m), $MachinePrecision] + N[(N[(a1$95$m / N[Sqrt[2.0], $MachinePrecision]), $MachinePrecision] * a1$95$m), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
a2_m = \left|a2\right|
\\
a1_m = \left|a1\right|
\\
[a1_m, a2_m, th] = \mathsf{sort}([a1_m, a2_m, th])\\
\\
\frac{a2\_m}{\sqrt{2}} \cdot a2\_m + \frac{a1\_m}{\sqrt{2}} \cdot a1\_m
\end{array}
Initial program 99.6%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6482.5
Applied rewrites82.5%
Taylor expanded in th around 0
unpow2N/A
associate-/l*N/A
lower-*.f64N/A
lower-/.f64N/A
lower-sqrt.f6464.4
Applied rewrites64.4%
Final simplification64.4%
herbie shell --seed 2024312
(FPCore (a1 a2 th)
:name "Migdal et al, Equation (64)"
:precision binary64
(+ (* (/ (cos th) (sqrt 2.0)) (* a1 a1)) (* (/ (cos th) (sqrt 2.0)) (* a2 a2))))