
(FPCore (z1 z2 z0) :precision binary64 (- 1.0 (cos (* -2.0 (atan (* (/ z1 z2) (tan (* PI (+ 0.5 (+ z0 z0))))))))))
double code(double z1, double z2, double z0) {
return 1.0 - cos((-2.0 * atan(((z1 / z2) * tan((((double) M_PI) * (0.5 + (z0 + z0))))))));
}
public static double code(double z1, double z2, double z0) {
return 1.0 - Math.cos((-2.0 * Math.atan(((z1 / z2) * Math.tan((Math.PI * (0.5 + (z0 + z0))))))));
}
def code(z1, z2, z0): return 1.0 - math.cos((-2.0 * math.atan(((z1 / z2) * math.tan((math.pi * (0.5 + (z0 + z0))))))))
function code(z1, z2, z0) return Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(z1 / z2) * tan(Float64(pi * Float64(0.5 + Float64(z0 + z0))))))))) end
function tmp = code(z1, z2, z0) tmp = 1.0 - cos((-2.0 * atan(((z1 / z2) * tan((pi * (0.5 + (z0 + z0)))))))); end
code[z1_, z2_, z0_] := N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(z1 / z2), $MachinePrecision] * N[Tan[N[(Pi * N[(0.5 + N[(z0 + z0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{z1}{z2} \cdot \tan \left(\pi \cdot \left(0.5 + \left(z0 + z0\right)\right)\right)\right)\right)
Herbie found 7 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (z1 z2 z0) :precision binary64 (- 1.0 (cos (* -2.0 (atan (* (/ z1 z2) (tan (* PI (+ 0.5 (+ z0 z0))))))))))
double code(double z1, double z2, double z0) {
return 1.0 - cos((-2.0 * atan(((z1 / z2) * tan((((double) M_PI) * (0.5 + (z0 + z0))))))));
}
public static double code(double z1, double z2, double z0) {
return 1.0 - Math.cos((-2.0 * Math.atan(((z1 / z2) * Math.tan((Math.PI * (0.5 + (z0 + z0))))))));
}
def code(z1, z2, z0): return 1.0 - math.cos((-2.0 * math.atan(((z1 / z2) * math.tan((math.pi * (0.5 + (z0 + z0))))))))
function code(z1, z2, z0) return Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(z1 / z2) * tan(Float64(pi * Float64(0.5 + Float64(z0 + z0))))))))) end
function tmp = code(z1, z2, z0) tmp = 1.0 - cos((-2.0 * atan(((z1 / z2) * tan((pi * (0.5 + (z0 + z0)))))))); end
code[z1_, z2_, z0_] := N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(z1 / z2), $MachinePrecision] * N[Tan[N[(Pi * N[(0.5 + N[(z0 + z0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{z1}{z2} \cdot \tan \left(\pi \cdot \left(0.5 + \left(z0 + z0\right)\right)\right)\right)\right)
(FPCore (z1 z2 z0)
:precision binary64
(let* ((t_0 (* (+ z0 z0) PI))
(t_1 (cos (- PI)))
(t_2
(-
1.0
(cos
(*
-2.0
(atan
(/
(*
(-
(*
(+
(/ (* (- 0.5 (* t_1 0.5)) PI) (* (+ t_1 1.0) 0.5))
PI)
(+ z0 z0))
(tan (* -0.5 PI)))
z1)
z2)))))))
(if (<= z0 -48000000.0)
t_2
(if (<= z0 43.0)
(-
1.0
(cos
(* -2.0 (atan (/ (* (cos t_0) z1) (* (- (sin t_0)) z2))))))
t_2))))double code(double z1, double z2, double z0) {
double t_0 = (z0 + z0) * ((double) M_PI);
double t_1 = cos(-((double) M_PI));
double t_2 = 1.0 - cos((-2.0 * atan(((((((((0.5 - (t_1 * 0.5)) * ((double) M_PI)) / ((t_1 + 1.0) * 0.5)) + ((double) M_PI)) * (z0 + z0)) - tan((-0.5 * ((double) M_PI)))) * z1) / z2))));
double tmp;
if (z0 <= -48000000.0) {
tmp = t_2;
} else if (z0 <= 43.0) {
tmp = 1.0 - cos((-2.0 * atan(((cos(t_0) * z1) / (-sin(t_0) * z2)))));
} else {
tmp = t_2;
}
return tmp;
}
public static double code(double z1, double z2, double z0) {
double t_0 = (z0 + z0) * Math.PI;
double t_1 = Math.cos(-Math.PI);
double t_2 = 1.0 - Math.cos((-2.0 * Math.atan(((((((((0.5 - (t_1 * 0.5)) * Math.PI) / ((t_1 + 1.0) * 0.5)) + Math.PI) * (z0 + z0)) - Math.tan((-0.5 * Math.PI))) * z1) / z2))));
double tmp;
if (z0 <= -48000000.0) {
tmp = t_2;
} else if (z0 <= 43.0) {
tmp = 1.0 - Math.cos((-2.0 * Math.atan(((Math.cos(t_0) * z1) / (-Math.sin(t_0) * z2)))));
} else {
tmp = t_2;
}
return tmp;
}
def code(z1, z2, z0): t_0 = (z0 + z0) * math.pi t_1 = math.cos(-math.pi) t_2 = 1.0 - math.cos((-2.0 * math.atan(((((((((0.5 - (t_1 * 0.5)) * math.pi) / ((t_1 + 1.0) * 0.5)) + math.pi) * (z0 + z0)) - math.tan((-0.5 * math.pi))) * z1) / z2)))) tmp = 0 if z0 <= -48000000.0: tmp = t_2 elif z0 <= 43.0: tmp = 1.0 - math.cos((-2.0 * math.atan(((math.cos(t_0) * z1) / (-math.sin(t_0) * z2))))) else: tmp = t_2 return tmp
function code(z1, z2, z0) t_0 = Float64(Float64(z0 + z0) * pi) t_1 = cos(Float64(-pi)) t_2 = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(Float64(Float64(Float64(Float64(Float64(Float64(0.5 - Float64(t_1 * 0.5)) * pi) / Float64(Float64(t_1 + 1.0) * 0.5)) + pi) * Float64(z0 + z0)) - tan(Float64(-0.5 * pi))) * z1) / z2))))) tmp = 0.0 if (z0 <= -48000000.0) tmp = t_2; elseif (z0 <= 43.0) tmp = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(cos(t_0) * z1) / Float64(Float64(-sin(t_0)) * z2)))))); else tmp = t_2; end return tmp end
function tmp_2 = code(z1, z2, z0) t_0 = (z0 + z0) * pi; t_1 = cos(-pi); t_2 = 1.0 - cos((-2.0 * atan(((((((((0.5 - (t_1 * 0.5)) * pi) / ((t_1 + 1.0) * 0.5)) + pi) * (z0 + z0)) - tan((-0.5 * pi))) * z1) / z2)))); tmp = 0.0; if (z0 <= -48000000.0) tmp = t_2; elseif (z0 <= 43.0) tmp = 1.0 - cos((-2.0 * atan(((cos(t_0) * z1) / (-sin(t_0) * z2))))); else tmp = t_2; end tmp_2 = tmp; end
code[z1_, z2_, z0_] := Block[{t$95$0 = N[(N[(z0 + z0), $MachinePrecision] * Pi), $MachinePrecision]}, Block[{t$95$1 = N[Cos[(-Pi)], $MachinePrecision]}, Block[{t$95$2 = N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(N[(N[(N[(N[(N[(N[(0.5 - N[(t$95$1 * 0.5), $MachinePrecision]), $MachinePrecision] * Pi), $MachinePrecision] / N[(N[(t$95$1 + 1.0), $MachinePrecision] * 0.5), $MachinePrecision]), $MachinePrecision] + Pi), $MachinePrecision] * N[(z0 + z0), $MachinePrecision]), $MachinePrecision] - N[Tan[N[(-0.5 * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * z1), $MachinePrecision] / z2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[z0, -48000000.0], t$95$2, If[LessEqual[z0, 43.0], N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(N[Cos[t$95$0], $MachinePrecision] * z1), $MachinePrecision] / N[((-N[Sin[t$95$0], $MachinePrecision]) * z2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], t$95$2]]]]]
\begin{array}{l}
t_0 := \left(z0 + z0\right) \cdot \pi\\
t_1 := \cos \left(-\pi\right)\\
t_2 := 1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{\left(\left(\frac{\left(0.5 - t\_1 \cdot 0.5\right) \cdot \pi}{\left(t\_1 + 1\right) \cdot 0.5} + \pi\right) \cdot \left(z0 + z0\right) - \tan \left(-0.5 \cdot \pi\right)\right) \cdot z1}{z2}\right)\right)\\
\mathbf{if}\;z0 \leq -48000000:\\
\;\;\;\;t\_2\\
\mathbf{elif}\;z0 \leq 43:\\
\;\;\;\;1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{\cos t\_0 \cdot z1}{\left(-\sin t\_0\right) \cdot z2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;t\_2\\
\end{array}
if z0 < -4.8e7 or 43 < z0 Initial program 59.9%
Taylor expanded in z0 around 0
lower-+.f64N/A
Applied rewrites71.7%
Applied rewrites72.4%
Applied rewrites84.6%
Applied rewrites84.6%
if -4.8e7 < z0 < 43Initial program 59.9%
lift-*.f64N/A
lift-/.f64N/A
lift-tan.f64N/A
tan-quotN/A
frac-timesN/A
*-commutativeN/A
lower-/.f64N/A
Applied rewrites69.1%
(FPCore (z1 z2 z0)
:precision binary64
(let* ((t_0 (tan (* PI 0.5)))
(t_1 (* t_0 t_0))
(t_2 (* (* -1.3333333333333333 (* PI PI)) PI))
(t_3 (* 2.0 (+ PI (* t_1 PI)))))
(if (<= (tan (* PI (+ 0.5 (+ z0 z0)))) 40000000000000.0)
(-
1.0
(cos
(*
-2.0
(atan
(/
(*
(-
(*
(+
(*
(+
(* (+ PI PI) (* t_3 t_0))
(*
(-
t_2
(+
(- (* (* (* PI PI) -2.0) t_3) (* t_2 t_1))
(* (* -4.0 (* PI PI)) (* t_3 t_1))))
z0))
z0)
t_3)
z0)
(tan (* -0.5 PI)))
z1)
z2)))))
(- 1.0 (cos (* -2.0 (atan (* -0.5 (/ z1 (* z0 (* z2 PI)))))))))))double code(double z1, double z2, double z0) {
double t_0 = tan((((double) M_PI) * 0.5));
double t_1 = t_0 * t_0;
double t_2 = (-1.3333333333333333 * (((double) M_PI) * ((double) M_PI))) * ((double) M_PI);
double t_3 = 2.0 * (((double) M_PI) + (t_1 * ((double) M_PI)));
double tmp;
if (tan((((double) M_PI) * (0.5 + (z0 + z0)))) <= 40000000000000.0) {
tmp = 1.0 - cos((-2.0 * atan((((((((((((double) M_PI) + ((double) M_PI)) * (t_3 * t_0)) + ((t_2 - (((((((double) M_PI) * ((double) M_PI)) * -2.0) * t_3) - (t_2 * t_1)) + ((-4.0 * (((double) M_PI) * ((double) M_PI))) * (t_3 * t_1)))) * z0)) * z0) + t_3) * z0) - tan((-0.5 * ((double) M_PI)))) * z1) / z2))));
} else {
tmp = 1.0 - cos((-2.0 * atan((-0.5 * (z1 / (z0 * (z2 * ((double) M_PI))))))));
}
return tmp;
}
public static double code(double z1, double z2, double z0) {
double t_0 = Math.tan((Math.PI * 0.5));
double t_1 = t_0 * t_0;
double t_2 = (-1.3333333333333333 * (Math.PI * Math.PI)) * Math.PI;
double t_3 = 2.0 * (Math.PI + (t_1 * Math.PI));
double tmp;
if (Math.tan((Math.PI * (0.5 + (z0 + z0)))) <= 40000000000000.0) {
tmp = 1.0 - Math.cos((-2.0 * Math.atan((((((((((Math.PI + Math.PI) * (t_3 * t_0)) + ((t_2 - (((((Math.PI * Math.PI) * -2.0) * t_3) - (t_2 * t_1)) + ((-4.0 * (Math.PI * Math.PI)) * (t_3 * t_1)))) * z0)) * z0) + t_3) * z0) - Math.tan((-0.5 * Math.PI))) * z1) / z2))));
} else {
tmp = 1.0 - Math.cos((-2.0 * Math.atan((-0.5 * (z1 / (z0 * (z2 * Math.PI)))))));
}
return tmp;
}
def code(z1, z2, z0): t_0 = math.tan((math.pi * 0.5)) t_1 = t_0 * t_0 t_2 = (-1.3333333333333333 * (math.pi * math.pi)) * math.pi t_3 = 2.0 * (math.pi + (t_1 * math.pi)) tmp = 0 if math.tan((math.pi * (0.5 + (z0 + z0)))) <= 40000000000000.0: tmp = 1.0 - math.cos((-2.0 * math.atan((((((((((math.pi + math.pi) * (t_3 * t_0)) + ((t_2 - (((((math.pi * math.pi) * -2.0) * t_3) - (t_2 * t_1)) + ((-4.0 * (math.pi * math.pi)) * (t_3 * t_1)))) * z0)) * z0) + t_3) * z0) - math.tan((-0.5 * math.pi))) * z1) / z2)))) else: tmp = 1.0 - math.cos((-2.0 * math.atan((-0.5 * (z1 / (z0 * (z2 * math.pi))))))) return tmp
function code(z1, z2, z0) t_0 = tan(Float64(pi * 0.5)) t_1 = Float64(t_0 * t_0) t_2 = Float64(Float64(-1.3333333333333333 * Float64(pi * pi)) * pi) t_3 = Float64(2.0 * Float64(pi + Float64(t_1 * pi))) tmp = 0.0 if (tan(Float64(pi * Float64(0.5 + Float64(z0 + z0)))) <= 40000000000000.0) tmp = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(Float64(Float64(Float64(Float64(Float64(Float64(Float64(pi + pi) * Float64(t_3 * t_0)) + Float64(Float64(t_2 - Float64(Float64(Float64(Float64(Float64(pi * pi) * -2.0) * t_3) - Float64(t_2 * t_1)) + Float64(Float64(-4.0 * Float64(pi * pi)) * Float64(t_3 * t_1)))) * z0)) * z0) + t_3) * z0) - tan(Float64(-0.5 * pi))) * z1) / z2))))); else tmp = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(-0.5 * Float64(z1 / Float64(z0 * Float64(z2 * pi)))))))); end return tmp end
function tmp_2 = code(z1, z2, z0) t_0 = tan((pi * 0.5)); t_1 = t_0 * t_0; t_2 = (-1.3333333333333333 * (pi * pi)) * pi; t_3 = 2.0 * (pi + (t_1 * pi)); tmp = 0.0; if (tan((pi * (0.5 + (z0 + z0)))) <= 40000000000000.0) tmp = 1.0 - cos((-2.0 * atan((((((((((pi + pi) * (t_3 * t_0)) + ((t_2 - (((((pi * pi) * -2.0) * t_3) - (t_2 * t_1)) + ((-4.0 * (pi * pi)) * (t_3 * t_1)))) * z0)) * z0) + t_3) * z0) - tan((-0.5 * pi))) * z1) / z2)))); else tmp = 1.0 - cos((-2.0 * atan((-0.5 * (z1 / (z0 * (z2 * pi))))))); end tmp_2 = tmp; end
code[z1_, z2_, z0_] := Block[{t$95$0 = N[Tan[N[(Pi * 0.5), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(t$95$0 * t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[(-1.3333333333333333 * N[(Pi * Pi), $MachinePrecision]), $MachinePrecision] * Pi), $MachinePrecision]}, Block[{t$95$3 = N[(2.0 * N[(Pi + N[(t$95$1 * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[N[Tan[N[(Pi * N[(0.5 + N[(z0 + z0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 40000000000000.0], N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(N[(N[(N[(N[(N[(N[(N[(Pi + Pi), $MachinePrecision] * N[(t$95$3 * t$95$0), $MachinePrecision]), $MachinePrecision] + N[(N[(t$95$2 - N[(N[(N[(N[(N[(Pi * Pi), $MachinePrecision] * -2.0), $MachinePrecision] * t$95$3), $MachinePrecision] - N[(t$95$2 * t$95$1), $MachinePrecision]), $MachinePrecision] + N[(N[(-4.0 * N[(Pi * Pi), $MachinePrecision]), $MachinePrecision] * N[(t$95$3 * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * z0), $MachinePrecision]), $MachinePrecision] * z0), $MachinePrecision] + t$95$3), $MachinePrecision] * z0), $MachinePrecision] - N[Tan[N[(-0.5 * Pi), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] * z1), $MachinePrecision] / z2), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(-0.5 * N[(z1 / N[(z0 * N[(z2 * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
t_0 := \tan \left(\pi \cdot 0.5\right)\\
t_1 := t\_0 \cdot t\_0\\
t_2 := \left(-1.3333333333333333 \cdot \left(\pi \cdot \pi\right)\right) \cdot \pi\\
t_3 := 2 \cdot \left(\pi + t\_1 \cdot \pi\right)\\
\mathbf{if}\;\tan \left(\pi \cdot \left(0.5 + \left(z0 + z0\right)\right)\right) \leq 40000000000000:\\
\;\;\;\;1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{\left(\left(\left(\left(\pi + \pi\right) \cdot \left(t\_3 \cdot t\_0\right) + \left(t\_2 - \left(\left(\left(\left(\pi \cdot \pi\right) \cdot -2\right) \cdot t\_3 - t\_2 \cdot t\_1\right) + \left(-4 \cdot \left(\pi \cdot \pi\right)\right) \cdot \left(t\_3 \cdot t\_1\right)\right)\right) \cdot z0\right) \cdot z0 + t\_3\right) \cdot z0 - \tan \left(-0.5 \cdot \pi\right)\right) \cdot z1}{z2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \cos \left(-2 \cdot \tan^{-1} \left(-0.5 \cdot \frac{z1}{z0 \cdot \left(z2 \cdot \pi\right)}\right)\right)\\
\end{array}
if (tan.f64 (*.f64 (PI.f64) (+.f64 #s(literal 1/2 binary64) (+.f64 z0 z0)))) < 4e13Initial program 59.9%
Taylor expanded in z0 around 0
Applied rewrites76.4%
Applied rewrites80.6%
if 4e13 < (tan.f64 (*.f64 (PI.f64) (+.f64 #s(literal 1/2 binary64) (+.f64 z0 z0)))) Initial program 59.9%
lift-*.f64N/A
lift-/.f64N/A
lift-tan.f64N/A
tan-quotN/A
frac-timesN/A
*-commutativeN/A
lower-/.f64N/A
Applied rewrites69.1%
Taylor expanded in z0 around 0
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f6459.1%
Applied rewrites59.1%
(FPCore (z1 z2 z0)
:precision binary64
(-
1.0
(cos
(*
-2.0
(atan
(/
(* (+ 1.0 (* -2.0 (* (pow z0 2.0) (pow PI 2.0)))) z1)
(* (- (sin (* (+ z0 z0) PI))) z2)))))))double code(double z1, double z2, double z0) {
return 1.0 - cos((-2.0 * atan((((1.0 + (-2.0 * (pow(z0, 2.0) * pow(((double) M_PI), 2.0)))) * z1) / (-sin(((z0 + z0) * ((double) M_PI))) * z2)))));
}
public static double code(double z1, double z2, double z0) {
return 1.0 - Math.cos((-2.0 * Math.atan((((1.0 + (-2.0 * (Math.pow(z0, 2.0) * Math.pow(Math.PI, 2.0)))) * z1) / (-Math.sin(((z0 + z0) * Math.PI)) * z2)))));
}
def code(z1, z2, z0): return 1.0 - math.cos((-2.0 * math.atan((((1.0 + (-2.0 * (math.pow(z0, 2.0) * math.pow(math.pi, 2.0)))) * z1) / (-math.sin(((z0 + z0) * math.pi)) * z2)))))
function code(z1, z2, z0) return Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(Float64(1.0 + Float64(-2.0 * Float64((z0 ^ 2.0) * (pi ^ 2.0)))) * z1) / Float64(Float64(-sin(Float64(Float64(z0 + z0) * pi))) * z2)))))) end
function tmp = code(z1, z2, z0) tmp = 1.0 - cos((-2.0 * atan((((1.0 + (-2.0 * ((z0 ^ 2.0) * (pi ^ 2.0)))) * z1) / (-sin(((z0 + z0) * pi)) * z2))))); end
code[z1_, z2_, z0_] := N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(N[(1.0 + N[(-2.0 * N[(N[Power[z0, 2.0], $MachinePrecision] * N[Power[Pi, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * z1), $MachinePrecision] / N[((-N[Sin[N[(N[(z0 + z0), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]) * z2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{\left(1 + -2 \cdot \left({z0}^{2} \cdot {\pi}^{2}\right)\right) \cdot z1}{\left(-\sin \left(\left(z0 + z0\right) \cdot \pi\right)\right) \cdot z2}\right)\right)
Initial program 59.9%
lift-*.f64N/A
lift-/.f64N/A
lift-tan.f64N/A
tan-quotN/A
frac-timesN/A
*-commutativeN/A
lower-/.f64N/A
Applied rewrites69.1%
Taylor expanded in z0 around 0
lower-+.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-pow.f64N/A
lower-pow.f64N/A
lower-PI.f6486.2%
Applied rewrites86.2%
(FPCore (z1 z2 z0)
:precision binary64
(let* ((t_0 (/ (fabs z1) (fabs z2)))
(t_1 (/ (* (fabs z1) PI) (fabs z2))))
(if (<= t_0 140000000.0)
(-
1.0
(cos
(*
-2.0
(atan
(/
(+
(*
-1.0
(*
(pow z0 2.0)
(- (* -1.0 t_1) (* -0.3333333333333333 t_1))))
(* -0.5 (/ (fabs z1) (* (fabs z2) PI))))
z0)))))
(-
1.0
(cos (* -2.0 (atan (* t_0 (tan (* PI (+ 0.5 (+ z0 z0))))))))))))double code(double z1, double z2, double z0) {
double t_0 = fabs(z1) / fabs(z2);
double t_1 = (fabs(z1) * ((double) M_PI)) / fabs(z2);
double tmp;
if (t_0 <= 140000000.0) {
tmp = 1.0 - cos((-2.0 * atan((((-1.0 * (pow(z0, 2.0) * ((-1.0 * t_1) - (-0.3333333333333333 * t_1)))) + (-0.5 * (fabs(z1) / (fabs(z2) * ((double) M_PI))))) / z0))));
} else {
tmp = 1.0 - cos((-2.0 * atan((t_0 * tan((((double) M_PI) * (0.5 + (z0 + z0))))))));
}
return tmp;
}
public static double code(double z1, double z2, double z0) {
double t_0 = Math.abs(z1) / Math.abs(z2);
double t_1 = (Math.abs(z1) * Math.PI) / Math.abs(z2);
double tmp;
if (t_0 <= 140000000.0) {
tmp = 1.0 - Math.cos((-2.0 * Math.atan((((-1.0 * (Math.pow(z0, 2.0) * ((-1.0 * t_1) - (-0.3333333333333333 * t_1)))) + (-0.5 * (Math.abs(z1) / (Math.abs(z2) * Math.PI)))) / z0))));
} else {
tmp = 1.0 - Math.cos((-2.0 * Math.atan((t_0 * Math.tan((Math.PI * (0.5 + (z0 + z0))))))));
}
return tmp;
}
def code(z1, z2, z0): t_0 = math.fabs(z1) / math.fabs(z2) t_1 = (math.fabs(z1) * math.pi) / math.fabs(z2) tmp = 0 if t_0 <= 140000000.0: tmp = 1.0 - math.cos((-2.0 * math.atan((((-1.0 * (math.pow(z0, 2.0) * ((-1.0 * t_1) - (-0.3333333333333333 * t_1)))) + (-0.5 * (math.fabs(z1) / (math.fabs(z2) * math.pi)))) / z0)))) else: tmp = 1.0 - math.cos((-2.0 * math.atan((t_0 * math.tan((math.pi * (0.5 + (z0 + z0)))))))) return tmp
function code(z1, z2, z0) t_0 = Float64(abs(z1) / abs(z2)) t_1 = Float64(Float64(abs(z1) * pi) / abs(z2)) tmp = 0.0 if (t_0 <= 140000000.0) tmp = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(Float64(-1.0 * Float64((z0 ^ 2.0) * Float64(Float64(-1.0 * t_1) - Float64(-0.3333333333333333 * t_1)))) + Float64(-0.5 * Float64(abs(z1) / Float64(abs(z2) * pi)))) / z0))))); else tmp = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(t_0 * tan(Float64(pi * Float64(0.5 + Float64(z0 + z0))))))))); end return tmp end
function tmp_2 = code(z1, z2, z0) t_0 = abs(z1) / abs(z2); t_1 = (abs(z1) * pi) / abs(z2); tmp = 0.0; if (t_0 <= 140000000.0) tmp = 1.0 - cos((-2.0 * atan((((-1.0 * ((z0 ^ 2.0) * ((-1.0 * t_1) - (-0.3333333333333333 * t_1)))) + (-0.5 * (abs(z1) / (abs(z2) * pi)))) / z0)))); else tmp = 1.0 - cos((-2.0 * atan((t_0 * tan((pi * (0.5 + (z0 + z0)))))))); end tmp_2 = tmp; end
code[z1_, z2_, z0_] := Block[{t$95$0 = N[(N[Abs[z1], $MachinePrecision] / N[Abs[z2], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(N[(N[Abs[z1], $MachinePrecision] * Pi), $MachinePrecision] / N[Abs[z2], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 140000000.0], N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(N[(-1.0 * N[(N[Power[z0, 2.0], $MachinePrecision] * N[(N[(-1.0 * t$95$1), $MachinePrecision] - N[(-0.3333333333333333 * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(-0.5 * N[(N[Abs[z1], $MachinePrecision] / N[(N[Abs[z2], $MachinePrecision] * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / z0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(t$95$0 * N[Tan[N[(Pi * N[(0.5 + N[(z0 + z0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
t_0 := \frac{\left|z1\right|}{\left|z2\right|}\\
t_1 := \frac{\left|z1\right| \cdot \pi}{\left|z2\right|}\\
\mathbf{if}\;t\_0 \leq 140000000:\\
\;\;\;\;1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{-1 \cdot \left({z0}^{2} \cdot \left(-1 \cdot t\_1 - -0.3333333333333333 \cdot t\_1\right)\right) + -0.5 \cdot \frac{\left|z1\right|}{\left|z2\right| \cdot \pi}}{z0}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \cos \left(-2 \cdot \tan^{-1} \left(t\_0 \cdot \tan \left(\pi \cdot \left(0.5 + \left(z0 + z0\right)\right)\right)\right)\right)\\
\end{array}
if (/.f64 z1 z2) < 1.4e8Initial program 59.9%
lift-*.f64N/A
lift-/.f64N/A
lift-tan.f64N/A
tan-quotN/A
frac-timesN/A
*-commutativeN/A
lower-/.f64N/A
Applied rewrites69.1%
Taylor expanded in z0 around 0
lower-/.f64N/A
Applied rewrites68.0%
if 1.4e8 < (/.f64 z1 z2) Initial program 59.9%
(FPCore (z1 z2 z0)
:precision binary64
(let* ((t_0 (* (+ z0 z0) PI)) (t_1 (/ (* z1 PI) z2)))
(if (<=
(cos
(* -2.0 (atan (* (/ z1 z2) (tan (* PI (+ 0.5 (+ z0 z0))))))))
-0.999999998)
(-
1.0
(cos (* -2.0 (atan (/ (* (cos t_0) z1) (* (- (sin t_0)) z2))))))
(-
1.0
(cos
(*
-2.0
(atan
(/
(+
(*
-1.0
(*
(pow z0 2.0)
(- (* -1.0 t_1) (* -0.3333333333333333 t_1))))
(* -0.5 (/ z1 (* z2 PI))))
z0))))))))double code(double z1, double z2, double z0) {
double t_0 = (z0 + z0) * ((double) M_PI);
double t_1 = (z1 * ((double) M_PI)) / z2;
double tmp;
if (cos((-2.0 * atan(((z1 / z2) * tan((((double) M_PI) * (0.5 + (z0 + z0)))))))) <= -0.999999998) {
tmp = 1.0 - cos((-2.0 * atan(((cos(t_0) * z1) / (-sin(t_0) * z2)))));
} else {
tmp = 1.0 - cos((-2.0 * atan((((-1.0 * (pow(z0, 2.0) * ((-1.0 * t_1) - (-0.3333333333333333 * t_1)))) + (-0.5 * (z1 / (z2 * ((double) M_PI))))) / z0))));
}
return tmp;
}
public static double code(double z1, double z2, double z0) {
double t_0 = (z0 + z0) * Math.PI;
double t_1 = (z1 * Math.PI) / z2;
double tmp;
if (Math.cos((-2.0 * Math.atan(((z1 / z2) * Math.tan((Math.PI * (0.5 + (z0 + z0)))))))) <= -0.999999998) {
tmp = 1.0 - Math.cos((-2.0 * Math.atan(((Math.cos(t_0) * z1) / (-Math.sin(t_0) * z2)))));
} else {
tmp = 1.0 - Math.cos((-2.0 * Math.atan((((-1.0 * (Math.pow(z0, 2.0) * ((-1.0 * t_1) - (-0.3333333333333333 * t_1)))) + (-0.5 * (z1 / (z2 * Math.PI)))) / z0))));
}
return tmp;
}
def code(z1, z2, z0): t_0 = (z0 + z0) * math.pi t_1 = (z1 * math.pi) / z2 tmp = 0 if math.cos((-2.0 * math.atan(((z1 / z2) * math.tan((math.pi * (0.5 + (z0 + z0)))))))) <= -0.999999998: tmp = 1.0 - math.cos((-2.0 * math.atan(((math.cos(t_0) * z1) / (-math.sin(t_0) * z2))))) else: tmp = 1.0 - math.cos((-2.0 * math.atan((((-1.0 * (math.pow(z0, 2.0) * ((-1.0 * t_1) - (-0.3333333333333333 * t_1)))) + (-0.5 * (z1 / (z2 * math.pi)))) / z0)))) return tmp
function code(z1, z2, z0) t_0 = Float64(Float64(z0 + z0) * pi) t_1 = Float64(Float64(z1 * pi) / z2) tmp = 0.0 if (cos(Float64(-2.0 * atan(Float64(Float64(z1 / z2) * tan(Float64(pi * Float64(0.5 + Float64(z0 + z0)))))))) <= -0.999999998) tmp = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(cos(t_0) * z1) / Float64(Float64(-sin(t_0)) * z2)))))); else tmp = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(Float64(-1.0 * Float64((z0 ^ 2.0) * Float64(Float64(-1.0 * t_1) - Float64(-0.3333333333333333 * t_1)))) + Float64(-0.5 * Float64(z1 / Float64(z2 * pi)))) / z0))))); end return tmp end
function tmp_2 = code(z1, z2, z0) t_0 = (z0 + z0) * pi; t_1 = (z1 * pi) / z2; tmp = 0.0; if (cos((-2.0 * atan(((z1 / z2) * tan((pi * (0.5 + (z0 + z0)))))))) <= -0.999999998) tmp = 1.0 - cos((-2.0 * atan(((cos(t_0) * z1) / (-sin(t_0) * z2))))); else tmp = 1.0 - cos((-2.0 * atan((((-1.0 * ((z0 ^ 2.0) * ((-1.0 * t_1) - (-0.3333333333333333 * t_1)))) + (-0.5 * (z1 / (z2 * pi)))) / z0)))); end tmp_2 = tmp; end
code[z1_, z2_, z0_] := Block[{t$95$0 = N[(N[(z0 + z0), $MachinePrecision] * Pi), $MachinePrecision]}, Block[{t$95$1 = N[(N[(z1 * Pi), $MachinePrecision] / z2), $MachinePrecision]}, If[LessEqual[N[Cos[N[(-2.0 * N[ArcTan[N[(N[(z1 / z2), $MachinePrecision] * N[Tan[N[(Pi * N[(0.5 + N[(z0 + z0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision], -0.999999998], N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(N[Cos[t$95$0], $MachinePrecision] * z1), $MachinePrecision] / N[((-N[Sin[t$95$0], $MachinePrecision]) * z2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(N[(-1.0 * N[(N[Power[z0, 2.0], $MachinePrecision] * N[(N[(-1.0 * t$95$1), $MachinePrecision] - N[(-0.3333333333333333 * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(-0.5 * N[(z1 / N[(z2 * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / z0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
t_0 := \left(z0 + z0\right) \cdot \pi\\
t_1 := \frac{z1 \cdot \pi}{z2}\\
\mathbf{if}\;\cos \left(-2 \cdot \tan^{-1} \left(\frac{z1}{z2} \cdot \tan \left(\pi \cdot \left(0.5 + \left(z0 + z0\right)\right)\right)\right)\right) \leq -0.999999998:\\
\;\;\;\;1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{\cos t\_0 \cdot z1}{\left(-\sin t\_0\right) \cdot z2}\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{-1 \cdot \left({z0}^{2} \cdot \left(-1 \cdot t\_1 - -0.3333333333333333 \cdot t\_1\right)\right) + -0.5 \cdot \frac{z1}{z2 \cdot \pi}}{z0}\right)\right)\\
\end{array}
if (cos.f64 (*.f64 #s(literal -2 binary64) (atan.f64 (*.f64 (/.f64 z1 z2) (tan.f64 (*.f64 (PI.f64) (+.f64 #s(literal 1/2 binary64) (+.f64 z0 z0)))))))) < -0.99999999799999995Initial program 59.9%
lift-*.f64N/A
lift-/.f64N/A
lift-tan.f64N/A
tan-quotN/A
frac-timesN/A
*-commutativeN/A
lower-/.f64N/A
Applied rewrites69.1%
if -0.99999999799999995 < (cos.f64 (*.f64 #s(literal -2 binary64) (atan.f64 (*.f64 (/.f64 z1 z2) (tan.f64 (*.f64 (PI.f64) (+.f64 #s(literal 1/2 binary64) (+.f64 z0 z0)))))))) Initial program 59.9%
lift-*.f64N/A
lift-/.f64N/A
lift-tan.f64N/A
tan-quotN/A
frac-timesN/A
*-commutativeN/A
lower-/.f64N/A
Applied rewrites69.1%
Taylor expanded in z0 around 0
lower-/.f64N/A
Applied rewrites68.0%
(FPCore (z1 z2 z0) :precision binary64 (if (<= (tan (* PI (+ 0.5 (+ z0 z0)))) 40000000000000.0) (- 1.0 (cos (* -2.0 (atan (* (/ z1 z2) (tan (* PI 0.5))))))) (- 1.0 (cos (* -2.0 (atan (* -0.5 (/ z1 (* z0 (* z2 PI))))))))))
double code(double z1, double z2, double z0) {
double tmp;
if (tan((((double) M_PI) * (0.5 + (z0 + z0)))) <= 40000000000000.0) {
tmp = 1.0 - cos((-2.0 * atan(((z1 / z2) * tan((((double) M_PI) * 0.5))))));
} else {
tmp = 1.0 - cos((-2.0 * atan((-0.5 * (z1 / (z0 * (z2 * ((double) M_PI))))))));
}
return tmp;
}
public static double code(double z1, double z2, double z0) {
double tmp;
if (Math.tan((Math.PI * (0.5 + (z0 + z0)))) <= 40000000000000.0) {
tmp = 1.0 - Math.cos((-2.0 * Math.atan(((z1 / z2) * Math.tan((Math.PI * 0.5))))));
} else {
tmp = 1.0 - Math.cos((-2.0 * Math.atan((-0.5 * (z1 / (z0 * (z2 * Math.PI)))))));
}
return tmp;
}
def code(z1, z2, z0): tmp = 0 if math.tan((math.pi * (0.5 + (z0 + z0)))) <= 40000000000000.0: tmp = 1.0 - math.cos((-2.0 * math.atan(((z1 / z2) * math.tan((math.pi * 0.5)))))) else: tmp = 1.0 - math.cos((-2.0 * math.atan((-0.5 * (z1 / (z0 * (z2 * math.pi))))))) return tmp
function code(z1, z2, z0) tmp = 0.0 if (tan(Float64(pi * Float64(0.5 + Float64(z0 + z0)))) <= 40000000000000.0) tmp = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(Float64(z1 / z2) * tan(Float64(pi * 0.5))))))); else tmp = Float64(1.0 - cos(Float64(-2.0 * atan(Float64(-0.5 * Float64(z1 / Float64(z0 * Float64(z2 * pi)))))))); end return tmp end
function tmp_2 = code(z1, z2, z0) tmp = 0.0; if (tan((pi * (0.5 + (z0 + z0)))) <= 40000000000000.0) tmp = 1.0 - cos((-2.0 * atan(((z1 / z2) * tan((pi * 0.5)))))); else tmp = 1.0 - cos((-2.0 * atan((-0.5 * (z1 / (z0 * (z2 * pi))))))); end tmp_2 = tmp; end
code[z1_, z2_, z0_] := If[LessEqual[N[Tan[N[(Pi * N[(0.5 + N[(z0 + z0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 40000000000000.0], N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(N[(z1 / z2), $MachinePrecision] * N[Tan[N[(Pi * 0.5), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(-0.5 * N[(z1 / N[(z0 * N[(z2 * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\mathbf{if}\;\tan \left(\pi \cdot \left(0.5 + \left(z0 + z0\right)\right)\right) \leq 40000000000000:\\
\;\;\;\;1 - \cos \left(-2 \cdot \tan^{-1} \left(\frac{z1}{z2} \cdot \tan \left(\pi \cdot 0.5\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;1 - \cos \left(-2 \cdot \tan^{-1} \left(-0.5 \cdot \frac{z1}{z0 \cdot \left(z2 \cdot \pi\right)}\right)\right)\\
\end{array}
if (tan.f64 (*.f64 (PI.f64) (+.f64 #s(literal 1/2 binary64) (+.f64 z0 z0)))) < 4e13Initial program 59.9%
Taylor expanded in z0 around 0
Applied rewrites61.2%
if 4e13 < (tan.f64 (*.f64 (PI.f64) (+.f64 #s(literal 1/2 binary64) (+.f64 z0 z0)))) Initial program 59.9%
lift-*.f64N/A
lift-/.f64N/A
lift-tan.f64N/A
tan-quotN/A
frac-timesN/A
*-commutativeN/A
lower-/.f64N/A
Applied rewrites69.1%
Taylor expanded in z0 around 0
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f6459.1%
Applied rewrites59.1%
(FPCore (z1 z2 z0) :precision binary64 (- 1.0 (cos (* -2.0 (atan (* -0.5 (/ z1 (* z0 (* z2 PI)))))))))
double code(double z1, double z2, double z0) {
return 1.0 - cos((-2.0 * atan((-0.5 * (z1 / (z0 * (z2 * ((double) M_PI))))))));
}
public static double code(double z1, double z2, double z0) {
return 1.0 - Math.cos((-2.0 * Math.atan((-0.5 * (z1 / (z0 * (z2 * Math.PI)))))));
}
def code(z1, z2, z0): return 1.0 - math.cos((-2.0 * math.atan((-0.5 * (z1 / (z0 * (z2 * math.pi)))))))
function code(z1, z2, z0) return Float64(1.0 - cos(Float64(-2.0 * atan(Float64(-0.5 * Float64(z1 / Float64(z0 * Float64(z2 * pi)))))))) end
function tmp = code(z1, z2, z0) tmp = 1.0 - cos((-2.0 * atan((-0.5 * (z1 / (z0 * (z2 * pi))))))); end
code[z1_, z2_, z0_] := N[(1.0 - N[Cos[N[(-2.0 * N[ArcTan[N[(-0.5 * N[(z1 / N[(z0 * N[(z2 * Pi), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
1 - \cos \left(-2 \cdot \tan^{-1} \left(-0.5 \cdot \frac{z1}{z0 \cdot \left(z2 \cdot \pi\right)}\right)\right)
Initial program 59.9%
lift-*.f64N/A
lift-/.f64N/A
lift-tan.f64N/A
tan-quotN/A
frac-timesN/A
*-commutativeN/A
lower-/.f64N/A
Applied rewrites69.1%
Taylor expanded in z0 around 0
lower-*.f64N/A
lower-/.f64N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f6459.1%
Applied rewrites59.1%
herbie shell --seed 2025250
(FPCore (z1 z2 z0)
:name "(- 1 (cos (* -2 (atan (* (/ z1 z2) (tan (* PI (+ 1/2 (+ z0 z0)))))))))"
:precision binary64
(- 1.0 (cos (* -2.0 (atan (* (/ z1 z2) (tan (* PI (+ 0.5 (+ z0 z0))))))))))