
(FPCore (z0) :precision binary64 (tan (- (* (+ PI PI) z0) (* -1/2 PI))))
double code(double z0) {
return tan((((((double) M_PI) + ((double) M_PI)) * z0) - (-0.5 * ((double) M_PI))));
}
public static double code(double z0) {
return Math.tan((((Math.PI + Math.PI) * z0) - (-0.5 * Math.PI)));
}
def code(z0): return math.tan((((math.pi + math.pi) * z0) - (-0.5 * math.pi)))
function code(z0) return tan(Float64(Float64(Float64(pi + pi) * z0) - Float64(-0.5 * pi))) end
function tmp = code(z0) tmp = tan((((pi + pi) * z0) - (-0.5 * pi))); end
code[z0_] := N[Tan[N[(N[(N[(Pi + Pi), $MachinePrecision] * z0), $MachinePrecision] - N[(-1/2 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\tan \left(\left(\pi + \pi\right) \cdot z0 - \frac{-1}{2} \cdot \pi\right)
Herbie found 8 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (z0) :precision binary64 (tan (- (* (+ PI PI) z0) (* -1/2 PI))))
double code(double z0) {
return tan((((((double) M_PI) + ((double) M_PI)) * z0) - (-0.5 * ((double) M_PI))));
}
public static double code(double z0) {
return Math.tan((((Math.PI + Math.PI) * z0) - (-0.5 * Math.PI)));
}
def code(z0): return math.tan((((math.pi + math.pi) * z0) - (-0.5 * math.pi)))
function code(z0) return tan(Float64(Float64(Float64(pi + pi) * z0) - Float64(-0.5 * pi))) end
function tmp = code(z0) tmp = tan((((pi + pi) * z0) - (-0.5 * pi))); end
code[z0_] := N[Tan[N[(N[(N[(Pi + Pi), $MachinePrecision] * z0), $MachinePrecision] - N[(-1/2 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\tan \left(\left(\pi + \pi\right) \cdot z0 - \frac{-1}{2} \cdot \pi\right)
(FPCore (z0) :precision binary64 (/ (cos (+ (* (+ z0 z0) PI) PI)) (sin (* z0 (+ PI PI)))))
double code(double z0) {
return cos((((z0 + z0) * ((double) M_PI)) + ((double) M_PI))) / sin((z0 * (((double) M_PI) + ((double) M_PI))));
}
public static double code(double z0) {
return Math.cos((((z0 + z0) * Math.PI) + Math.PI)) / Math.sin((z0 * (Math.PI + Math.PI)));
}
def code(z0): return math.cos((((z0 + z0) * math.pi) + math.pi)) / math.sin((z0 * (math.pi + math.pi)))
function code(z0) return Float64(cos(Float64(Float64(Float64(z0 + z0) * pi) + pi)) / sin(Float64(z0 * Float64(pi + pi)))) end
function tmp = code(z0) tmp = cos((((z0 + z0) * pi) + pi)) / sin((z0 * (pi + pi))); end
code[z0_] := N[(N[Cos[N[(N[(N[(z0 + z0), $MachinePrecision] * Pi), $MachinePrecision] + Pi), $MachinePrecision]], $MachinePrecision] / N[Sin[N[(z0 * N[(Pi + Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\frac{\cos \left(\left(z0 + z0\right) \cdot \pi + \pi\right)}{\sin \left(z0 \cdot \left(\pi + \pi\right)\right)}
Initial program 8.8%
lift-tan.f64N/A
tan-quotN/A
frac-2negN/A
lower-/.f64N/A
Applied rewrites97.5%
lift-neg.f64N/A
lift-cos.f64N/A
cos-+PI-revN/A
lower-cos.f64N/A
lift-PI.f64N/A
lower-+.f6497.5%
lift-*.f64N/A
lift-+.f64N/A
count-2N/A
associate-*l*N/A
*-commutativeN/A
lift-*.f64N/A
lower-*.f6497.5%
lift-*.f64N/A
count-2-revN/A
lower-+.f6497.5%
Applied rewrites97.5%
(FPCore (z0) :precision binary64 (pow (tan (* (- z0) (+ PI PI))) -1))
double code(double z0) {
return pow(tan((-z0 * (((double) M_PI) + ((double) M_PI)))), -1.0);
}
public static double code(double z0) {
return Math.pow(Math.tan((-z0 * (Math.PI + Math.PI))), -1.0);
}
def code(z0): return math.pow(math.tan((-z0 * (math.pi + math.pi))), -1.0)
function code(z0) return tan(Float64(Float64(-z0) * Float64(pi + pi))) ^ -1.0 end
function tmp = code(z0) tmp = tan((-z0 * (pi + pi))) ^ -1.0; end
code[z0_] := N[Power[N[Tan[N[((-z0) * N[(Pi + Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision], -1], $MachinePrecision]
{\tan \left(\left(-z0\right) \cdot \left(\pi + \pi\right)\right)}^{-1}
Initial program 8.8%
lift-tan.f64N/A
tan-quotN/A
frac-2negN/A
lower-/.f64N/A
Applied rewrites97.5%
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
remove-double-negN/A
lift-sin.f64N/A
sin-neg-revN/A
lift-*.f64N/A
distribute-rgt-neg-inN/A
*-commutativeN/A
lower-*.f64N/A
lift-+.f64N/A
count-2N/A
distribute-lft-neg-outN/A
metadata-evalN/A
lift-*.f64N/A
Applied rewrites97.5%
(FPCore (z0) :precision binary64 (/ 1 (tan (* (- z0) (+ PI PI)))))
double code(double z0) {
return 1.0 / tan((-z0 * (((double) M_PI) + ((double) M_PI))));
}
public static double code(double z0) {
return 1.0 / Math.tan((-z0 * (Math.PI + Math.PI)));
}
def code(z0): return 1.0 / math.tan((-z0 * (math.pi + math.pi)))
function code(z0) return Float64(1.0 / tan(Float64(Float64(-z0) * Float64(pi + pi)))) end
function tmp = code(z0) tmp = 1.0 / tan((-z0 * (pi + pi))); end
code[z0_] := N[(1 / N[Tan[N[((-z0) * N[(Pi + Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\frac{1}{\tan \left(\left(-z0\right) \cdot \left(\pi + \pi\right)\right)}
Initial program 8.8%
lift-tan.f64N/A
tan-quotN/A
frac-2negN/A
lower-/.f64N/A
Applied rewrites97.5%
lift-/.f64N/A
lift-neg.f64N/A
distribute-frac-negN/A
distribute-neg-frac2N/A
lift-sin.f64N/A
sin-neg-revN/A
lift-*.f64N/A
distribute-rgt-neg-inN/A
*-commutativeN/A
lower-*.f64N/A
lift-+.f64N/A
count-2N/A
distribute-lft-neg-outN/A
metadata-evalN/A
lift-*.f64N/A
Applied rewrites97.5%
(FPCore (z0)
:precision binary64
(if (<=
z0
-290953239129259/12650140831706913647030959169932331690597290610258882397306334876714396222999709180747523981339820280949192366519800744461863046086612092304188337496296156870094839017285397585279181733880826021327485479904546566785125467714043293663631459728072472271300628532022423097020838413451906408261645469290375391456731733818343424)
(tan (* (+ (- (+ z0 z0) -1/2) 1) PI))
(tan (- (* (+ (- (- -1/2 z0) z0) 1) PI)))))double code(double z0) {
double tmp;
if (z0 <= -2.3e-308) {
tmp = tan(((((z0 + z0) - -0.5) + 1.0) * ((double) M_PI)));
} else {
tmp = tan(-((((-0.5 - z0) - z0) + 1.0) * ((double) M_PI)));
}
return tmp;
}
public static double code(double z0) {
double tmp;
if (z0 <= -2.3e-308) {
tmp = Math.tan(((((z0 + z0) - -0.5) + 1.0) * Math.PI));
} else {
tmp = Math.tan(-((((-0.5 - z0) - z0) + 1.0) * Math.PI));
}
return tmp;
}
def code(z0): tmp = 0 if z0 <= -2.3e-308: tmp = math.tan(((((z0 + z0) - -0.5) + 1.0) * math.pi)) else: tmp = math.tan(-((((-0.5 - z0) - z0) + 1.0) * math.pi)) return tmp
function code(z0) tmp = 0.0 if (z0 <= -2.3e-308) tmp = tan(Float64(Float64(Float64(Float64(z0 + z0) - -0.5) + 1.0) * pi)); else tmp = tan(Float64(-Float64(Float64(Float64(Float64(-0.5 - z0) - z0) + 1.0) * pi))); end return tmp end
function tmp_2 = code(z0) tmp = 0.0; if (z0 <= -2.3e-308) tmp = tan(((((z0 + z0) - -0.5) + 1.0) * pi)); else tmp = tan(-((((-0.5 - z0) - z0) + 1.0) * pi)); end tmp_2 = tmp; end
code[z0_] := If[LessEqual[z0, -290953239129259/12650140831706913647030959169932331690597290610258882397306334876714396222999709180747523981339820280949192366519800744461863046086612092304188337496296156870094839017285397585279181733880826021327485479904546566785125467714043293663631459728072472271300628532022423097020838413451906408261645469290375391456731733818343424], N[Tan[N[(N[(N[(N[(z0 + z0), $MachinePrecision] - -1/2), $MachinePrecision] + 1), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision], N[Tan[(-N[(N[(N[(N[(-1/2 - z0), $MachinePrecision] - z0), $MachinePrecision] + 1), $MachinePrecision] * Pi), $MachinePrecision])], $MachinePrecision]]
\begin{array}{l}
\mathbf{if}\;z0 \leq \frac{-290953239129259}{12650140831706913647030959169932331690597290610258882397306334876714396222999709180747523981339820280949192366519800744461863046086612092304188337496296156870094839017285397585279181733880826021327485479904546566785125467714043293663631459728072472271300628532022423097020838413451906408261645469290375391456731733818343424}:\\
\;\;\;\;\tan \left(\left(\left(\left(z0 + z0\right) - \frac{-1}{2}\right) + 1\right) \cdot \pi\right)\\
\mathbf{else}:\\
\;\;\;\;\tan \left(-\left(\left(\left(\frac{-1}{2} - z0\right) - z0\right) + 1\right) \cdot \pi\right)\\
\end{array}
if z0 < -2.2999999999999999e-308Initial program 8.8%
lift-tan.f64N/A
tan-quotN/A
frac-2negN/A
lower-/.f64N/A
Applied rewrites97.5%
Applied rewrites8.6%
if -2.2999999999999999e-308 < z0 Initial program 8.8%
lift-tan.f64N/A
lift--.f64N/A
sub-negate-revN/A
tan-negN/A
tan-+PI-revN/A
tan-neg-revN/A
lower-tan.f64N/A
lower-neg.f64N/A
lift-PI.f64N/A
lower-+.f64N/A
Applied rewrites8.8%
lift--.f64N/A
lift-*.f64N/A
count-2-revN/A
associate--r+N/A
lower--.f64N/A
lower--.f648.7%
Applied rewrites8.7%
lift-+.f64N/A
lift-*.f64N/A
*-commutativeN/A
distribute-lft1-inN/A
lower-*.f64N/A
lower-+.f648.7%
Applied rewrites8.7%
(FPCore (z0)
:precision binary64
(if (<=
z0
-290953239129259/12650140831706913647030959169932331690597290610258882397306334876714396222999709180747523981339820280949192366519800744461863046086612092304188337496296156870094839017285397585279181733880826021327485479904546566785125467714043293663631459728072472271300628532022423097020838413451906408261645469290375391456731733818343424)
(tan (* (+ (- (+ z0 z0) -1/2) 1) PI))
(tan (- (* (+ (- -1/2 (+ z0 z0)) 1) PI)))))double code(double z0) {
double tmp;
if (z0 <= -2.3e-308) {
tmp = tan(((((z0 + z0) - -0.5) + 1.0) * ((double) M_PI)));
} else {
tmp = tan(-(((-0.5 - (z0 + z0)) + 1.0) * ((double) M_PI)));
}
return tmp;
}
public static double code(double z0) {
double tmp;
if (z0 <= -2.3e-308) {
tmp = Math.tan(((((z0 + z0) - -0.5) + 1.0) * Math.PI));
} else {
tmp = Math.tan(-(((-0.5 - (z0 + z0)) + 1.0) * Math.PI));
}
return tmp;
}
def code(z0): tmp = 0 if z0 <= -2.3e-308: tmp = math.tan(((((z0 + z0) - -0.5) + 1.0) * math.pi)) else: tmp = math.tan(-(((-0.5 - (z0 + z0)) + 1.0) * math.pi)) return tmp
function code(z0) tmp = 0.0 if (z0 <= -2.3e-308) tmp = tan(Float64(Float64(Float64(Float64(z0 + z0) - -0.5) + 1.0) * pi)); else tmp = tan(Float64(-Float64(Float64(Float64(-0.5 - Float64(z0 + z0)) + 1.0) * pi))); end return tmp end
function tmp_2 = code(z0) tmp = 0.0; if (z0 <= -2.3e-308) tmp = tan(((((z0 + z0) - -0.5) + 1.0) * pi)); else tmp = tan(-(((-0.5 - (z0 + z0)) + 1.0) * pi)); end tmp_2 = tmp; end
code[z0_] := If[LessEqual[z0, -290953239129259/12650140831706913647030959169932331690597290610258882397306334876714396222999709180747523981339820280949192366519800744461863046086612092304188337496296156870094839017285397585279181733880826021327485479904546566785125467714043293663631459728072472271300628532022423097020838413451906408261645469290375391456731733818343424], N[Tan[N[(N[(N[(N[(z0 + z0), $MachinePrecision] - -1/2), $MachinePrecision] + 1), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision], N[Tan[(-N[(N[(N[(-1/2 - N[(z0 + z0), $MachinePrecision]), $MachinePrecision] + 1), $MachinePrecision] * Pi), $MachinePrecision])], $MachinePrecision]]
\begin{array}{l}
\mathbf{if}\;z0 \leq \frac{-290953239129259}{12650140831706913647030959169932331690597290610258882397306334876714396222999709180747523981339820280949192366519800744461863046086612092304188337496296156870094839017285397585279181733880826021327485479904546566785125467714043293663631459728072472271300628532022423097020838413451906408261645469290375391456731733818343424}:\\
\;\;\;\;\tan \left(\left(\left(\left(z0 + z0\right) - \frac{-1}{2}\right) + 1\right) \cdot \pi\right)\\
\mathbf{else}:\\
\;\;\;\;\tan \left(-\left(\left(\frac{-1}{2} - \left(z0 + z0\right)\right) + 1\right) \cdot \pi\right)\\
\end{array}
if z0 < -2.2999999999999999e-308Initial program 8.8%
lift-tan.f64N/A
tan-quotN/A
frac-2negN/A
lower-/.f64N/A
Applied rewrites97.5%
Applied rewrites8.6%
if -2.2999999999999999e-308 < z0 Initial program 8.8%
lift-tan.f64N/A
lift--.f64N/A
sub-negate-revN/A
tan-negN/A
tan-+PI-revN/A
tan-neg-revN/A
lower-tan.f64N/A
lower-neg.f64N/A
lift-PI.f64N/A
lower-+.f64N/A
Applied rewrites8.8%
lift-+.f64N/A
lift-*.f64N/A
*-commutativeN/A
distribute-lft1-inN/A
lower-*.f64N/A
lower-+.f648.7%
lift-*.f64N/A
count-2-revN/A
lower-+.f648.7%
Applied rewrites8.7%
(FPCore (z0)
:precision binary64
(let* ((t_0 (- (+ z0 z0) -1/2)))
(if (<=
z0
-290953239129259/12650140831706913647030959169932331690597290610258882397306334876714396222999709180747523981339820280949192366519800744461863046086612092304188337496296156870094839017285397585279181733880826021327485479904546566785125467714043293663631459728072472271300628532022423097020838413451906408261645469290375391456731733818343424)
(tan (* (+ t_0 1) PI))
(tan (- (* t_0 PI) PI)))))double code(double z0) {
double t_0 = (z0 + z0) - -0.5;
double tmp;
if (z0 <= -2.3e-308) {
tmp = tan(((t_0 + 1.0) * ((double) M_PI)));
} else {
tmp = tan(((t_0 * ((double) M_PI)) - ((double) M_PI)));
}
return tmp;
}
public static double code(double z0) {
double t_0 = (z0 + z0) - -0.5;
double tmp;
if (z0 <= -2.3e-308) {
tmp = Math.tan(((t_0 + 1.0) * Math.PI));
} else {
tmp = Math.tan(((t_0 * Math.PI) - Math.PI));
}
return tmp;
}
def code(z0): t_0 = (z0 + z0) - -0.5 tmp = 0 if z0 <= -2.3e-308: tmp = math.tan(((t_0 + 1.0) * math.pi)) else: tmp = math.tan(((t_0 * math.pi) - math.pi)) return tmp
function code(z0) t_0 = Float64(Float64(z0 + z0) - -0.5) tmp = 0.0 if (z0 <= -2.3e-308) tmp = tan(Float64(Float64(t_0 + 1.0) * pi)); else tmp = tan(Float64(Float64(t_0 * pi) - pi)); end return tmp end
function tmp_2 = code(z0) t_0 = (z0 + z0) - -0.5; tmp = 0.0; if (z0 <= -2.3e-308) tmp = tan(((t_0 + 1.0) * pi)); else tmp = tan(((t_0 * pi) - pi)); end tmp_2 = tmp; end
code[z0_] := Block[{t$95$0 = N[(N[(z0 + z0), $MachinePrecision] - -1/2), $MachinePrecision]}, If[LessEqual[z0, -290953239129259/12650140831706913647030959169932331690597290610258882397306334876714396222999709180747523981339820280949192366519800744461863046086612092304188337496296156870094839017285397585279181733880826021327485479904546566785125467714043293663631459728072472271300628532022423097020838413451906408261645469290375391456731733818343424], N[Tan[N[(N[(t$95$0 + 1), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision], N[Tan[N[(N[(t$95$0 * Pi), $MachinePrecision] - Pi), $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
t_0 := \left(z0 + z0\right) - \frac{-1}{2}\\
\mathbf{if}\;z0 \leq \frac{-290953239129259}{12650140831706913647030959169932331690597290610258882397306334876714396222999709180747523981339820280949192366519800744461863046086612092304188337496296156870094839017285397585279181733880826021327485479904546566785125467714043293663631459728072472271300628532022423097020838413451906408261645469290375391456731733818343424}:\\
\;\;\;\;\tan \left(\left(t\_0 + 1\right) \cdot \pi\right)\\
\mathbf{else}:\\
\;\;\;\;\tan \left(t\_0 \cdot \pi - \pi\right)\\
\end{array}
if z0 < -2.2999999999999999e-308Initial program 8.8%
lift-tan.f64N/A
tan-quotN/A
frac-2negN/A
lower-/.f64N/A
Applied rewrites97.5%
Applied rewrites8.6%
if -2.2999999999999999e-308 < z0 Initial program 8.8%
lift-tan.f64N/A
tan-quotN/A
frac-2negN/A
lower-/.f64N/A
Applied rewrites97.5%
Applied rewrites8.8%
(FPCore (z0) :precision binary64 (tan (* (- (+ z0 z0) -1/2) PI)))
double code(double z0) {
return tan((((z0 + z0) - -0.5) * ((double) M_PI)));
}
public static double code(double z0) {
return Math.tan((((z0 + z0) - -0.5) * Math.PI));
}
def code(z0): return math.tan((((z0 + z0) - -0.5) * math.pi))
function code(z0) return tan(Float64(Float64(Float64(z0 + z0) - -0.5) * pi)) end
function tmp = code(z0) tmp = tan((((z0 + z0) - -0.5) * pi)); end
code[z0_] := N[Tan[N[(N[(N[(z0 + z0), $MachinePrecision] - -1/2), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]
\tan \left(\left(\left(z0 + z0\right) - \frac{-1}{2}\right) \cdot \pi\right)
Initial program 8.8%
lift-tan.f64N/A
tan-quotN/A
frac-2negN/A
lower-/.f64N/A
Applied rewrites97.5%
lift-/.f64N/A
frac-2negN/A
lift-neg.f64N/A
remove-double-negN/A
Applied rewrites8.8%
(FPCore (z0) :precision binary64 (tan (* (- (+ z0 z0) -5/2) PI)))
double code(double z0) {
return tan((((z0 + z0) - -2.5) * ((double) M_PI)));
}
public static double code(double z0) {
return Math.tan((((z0 + z0) - -2.5) * Math.PI));
}
def code(z0): return math.tan((((z0 + z0) - -2.5) * math.pi))
function code(z0) return tan(Float64(Float64(Float64(z0 + z0) - -2.5) * pi)) end
function tmp = code(z0) tmp = tan((((z0 + z0) - -2.5) * pi)); end
code[z0_] := N[Tan[N[(N[(N[(z0 + z0), $MachinePrecision] - -5/2), $MachinePrecision] * Pi), $MachinePrecision]], $MachinePrecision]
\tan \left(\left(\left(z0 + z0\right) - \frac{-5}{2}\right) \cdot \pi\right)
Initial program 8.8%
lift-tan.f64N/A
tan-quotN/A
frac-2negN/A
lower-/.f64N/A
Applied rewrites97.5%
Applied rewrites8.6%
lift-*.f64N/A
*-commutativeN/A
lower-*.f648.6%
lift-+.f64N/A
lift--.f64N/A
associate-+l-N/A
lower--.f64N/A
metadata-eval8.6%
Applied rewrites8.6%
herbie shell --seed 2025277 -o generate:taylor -o generate:evaluate
(FPCore (z0)
:name "(tan (- (* (+ PI PI) z0) (* -1/2 PI)))"
:precision binary64
(tan (- (* (+ PI PI) z0) (* -1/2 PI))))