
(FPCore (z0) :precision binary64 (cos (* -1/90 (* z0 PI))))
double code(double z0) {
return cos((-0.011111111111111112 * (z0 * ((double) M_PI))));
}
public static double code(double z0) {
return Math.cos((-0.011111111111111112 * (z0 * Math.PI)));
}
def code(z0): return math.cos((-0.011111111111111112 * (z0 * math.pi)))
function code(z0) return cos(Float64(-0.011111111111111112 * Float64(z0 * pi))) end
function tmp = code(z0) tmp = cos((-0.011111111111111112 * (z0 * pi))); end
code[z0_] := N[Cos[N[(-1/90 * N[(z0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\cos \left(\frac{-1}{90} \cdot \left(z0 \cdot \pi\right)\right)
Herbie found 4 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (z0) :precision binary64 (cos (* -1/90 (* z0 PI))))
double code(double z0) {
return cos((-0.011111111111111112 * (z0 * ((double) M_PI))));
}
public static double code(double z0) {
return Math.cos((-0.011111111111111112 * (z0 * Math.PI)));
}
def code(z0): return math.cos((-0.011111111111111112 * (z0 * math.pi)))
function code(z0) return cos(Float64(-0.011111111111111112 * Float64(z0 * pi))) end
function tmp = code(z0) tmp = cos((-0.011111111111111112 * (z0 * pi))); end
code[z0_] := N[Cos[N[(-1/90 * N[(z0 * Pi), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\cos \left(\frac{-1}{90} \cdot \left(z0 \cdot \pi\right)\right)
(FPCore (z0) :precision binary64 (sin (- (* (* (* (pow PI 2/3) 1/90) (fabs z0)) (cbrt PI)) (* PI -1/2))))
double code(double z0) {
return sin(((((pow(((double) M_PI), 0.6666666666666666) * 0.011111111111111112) * fabs(z0)) * cbrt(((double) M_PI))) - (((double) M_PI) * -0.5)));
}
public static double code(double z0) {
return Math.sin(((((Math.pow(Math.PI, 0.6666666666666666) * 0.011111111111111112) * Math.abs(z0)) * Math.cbrt(Math.PI)) - (Math.PI * -0.5)));
}
function code(z0) return sin(Float64(Float64(Float64(Float64((pi ^ 0.6666666666666666) * 0.011111111111111112) * abs(z0)) * cbrt(pi)) - Float64(pi * -0.5))) end
code[z0_] := N[Sin[N[(N[(N[(N[(N[Power[Pi, 2/3], $MachinePrecision] * 1/90), $MachinePrecision] * N[Abs[z0], $MachinePrecision]), $MachinePrecision] * N[Power[Pi, 1/3], $MachinePrecision]), $MachinePrecision] - N[(Pi * -1/2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\sin \left(\left(\left({\pi}^{\frac{2}{3}} \cdot \frac{1}{90}\right) \cdot \left|z0\right|\right) \cdot \sqrt[3]{\pi} - \pi \cdot \frac{-1}{2}\right)
Initial program 56.9%
lift-cos.f64N/A
cos-neg-revN/A
sin-+PI/2-revN/A
lower-sin.f64N/A
add-flipN/A
lower--.f64N/A
lift-*.f64N/A
distribute-lft-neg-inN/A
metadata-evalN/A
metadata-evalN/A
lower-*.f64N/A
metadata-evalN/A
lift-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lift-PI.f64N/A
mult-flipN/A
distribute-rgt-neg-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
lower-*.f64N/A
metadata-evalN/A
metadata-eval57.0%
Applied rewrites57.0%
lift-*.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-PI.f64N/A
add-cube-cbrtN/A
lift-PI.f64N/A
lift-cbrt.f64N/A
associate-*l*N/A
lift-PI.f64N/A
pow1/3N/A
lift-PI.f64N/A
pow1/3N/A
pow-prod-upN/A
metadata-evalN/A
lift-pow.f64N/A
*-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
Applied rewrites57.0%
(FPCore (z0) :precision binary64 (sin (* PI (- (* 1/90 (fabs z0)) -1/2))))
double code(double z0) {
return sin((((double) M_PI) * ((0.011111111111111112 * fabs(z0)) - -0.5)));
}
public static double code(double z0) {
return Math.sin((Math.PI * ((0.011111111111111112 * Math.abs(z0)) - -0.5)));
}
def code(z0): return math.sin((math.pi * ((0.011111111111111112 * math.fabs(z0)) - -0.5)))
function code(z0) return sin(Float64(pi * Float64(Float64(0.011111111111111112 * abs(z0)) - -0.5))) end
function tmp = code(z0) tmp = sin((pi * ((0.011111111111111112 * abs(z0)) - -0.5))); end
code[z0_] := N[Sin[N[(Pi * N[(N[(1/90 * N[Abs[z0], $MachinePrecision]), $MachinePrecision] - -1/2), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\sin \left(\pi \cdot \left(\frac{1}{90} \cdot \left|z0\right| - \frac{-1}{2}\right)\right)
Initial program 56.9%
lift-cos.f64N/A
cos-neg-revN/A
sin-+PI/2-revN/A
lower-sin.f64N/A
add-flipN/A
lower--.f64N/A
lift-*.f64N/A
distribute-lft-neg-inN/A
metadata-evalN/A
metadata-evalN/A
lower-*.f64N/A
metadata-evalN/A
lift-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lift-PI.f64N/A
mult-flipN/A
distribute-rgt-neg-inN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
lower-*.f64N/A
metadata-evalN/A
metadata-eval57.0%
Applied rewrites57.0%
lift--.f64N/A
lift-*.f64N/A
lift-*.f64N/A
*-commutativeN/A
associate-*r*N/A
metadata-evalN/A
distribute-lft-neg-outN/A
*-commutativeN/A
lift-*.f64N/A
lift-*.f64N/A
*-commutativeN/A
distribute-rgt-out--N/A
lower-*.f64N/A
lower--.f64N/A
lift-*.f64N/A
*-commutativeN/A
distribute-lft-neg-outN/A
metadata-evalN/A
lower-*.f6457.1%
Applied rewrites57.1%
(FPCore (z0) :precision binary64 (cos (* (* PI -1/90) z0)))
double code(double z0) {
return cos(((((double) M_PI) * -0.011111111111111112) * z0));
}
public static double code(double z0) {
return Math.cos(((Math.PI * -0.011111111111111112) * z0));
}
def code(z0): return math.cos(((math.pi * -0.011111111111111112) * z0))
function code(z0) return cos(Float64(Float64(pi * -0.011111111111111112) * z0)) end
function tmp = code(z0) tmp = cos(((pi * -0.011111111111111112) * z0)); end
code[z0_] := N[Cos[N[(N[(Pi * -1/90), $MachinePrecision] * z0), $MachinePrecision]], $MachinePrecision]
\cos \left(\left(\pi \cdot \frac{-1}{90}\right) \cdot z0\right)
Initial program 56.9%
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
lift-PI.f64N/A
add-cube-cbrtN/A
associate-*r*N/A
add-cube-cbrtN/A
cbrt-prodN/A
associate-*r*N/A
lower-*.f64N/A
Applied rewrites56.8%
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
lift-*.f64N/A
lift-*.f64N/A
associate-*r*N/A
*-commutativeN/A
lift-pow.f64N/A
lift-pow.f64N/A
pow-prod-upN/A
metadata-evalN/A
pow1/3N/A
lift-cbrt.f64N/A
associate-*l*N/A
Applied rewrites56.9%
herbie shell --seed 2025277 -o generate:taylor -o generate:evaluate
(FPCore (z0)
:name "(cos (* -1/90 (* z0 PI)))"
:precision binary64
(cos (* -1/90 (* z0 PI))))