
(FPCore (z0) :precision binary64 (sin (* z0 PI)))
double code(double z0) {
return sin((z0 * ((double) M_PI)));
}
public static double code(double z0) {
return Math.sin((z0 * Math.PI));
}
def code(z0): return math.sin((z0 * math.pi))
function code(z0) return sin(Float64(z0 * pi)) end
function tmp = code(z0) tmp = sin((z0 * pi)); end
code[z0_] := N[Sin[N[(z0 * Pi), $MachinePrecision]], $MachinePrecision]
\sin \left(z0 \cdot \pi\right)
Herbie found 2 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (z0) :precision binary64 (sin (* z0 PI)))
double code(double z0) {
return sin((z0 * ((double) M_PI)));
}
public static double code(double z0) {
return Math.sin((z0 * Math.PI));
}
def code(z0): return math.sin((z0 * math.pi))
function code(z0) return sin(Float64(z0 * pi)) end
function tmp = code(z0) tmp = sin((z0 * pi)); end
code[z0_] := N[Sin[N[(z0 * Pi), $MachinePrecision]], $MachinePrecision]
\sin \left(z0 \cdot \pi\right)
(FPCore (z0) :precision binary64 (sin (* (* (pow PI 2/3) z0) (pow (pow PI 1/9) 3))))
double code(double z0) {
return sin(((pow(((double) M_PI), 0.6666666666666666) * z0) * pow(pow(((double) M_PI), 0.1111111111111111), 3.0)));
}
public static double code(double z0) {
return Math.sin(((Math.pow(Math.PI, 0.6666666666666666) * z0) * Math.pow(Math.pow(Math.PI, 0.1111111111111111), 3.0)));
}
def code(z0): return math.sin(((math.pow(math.pi, 0.6666666666666666) * z0) * math.pow(math.pow(math.pi, 0.1111111111111111), 3.0)))
function code(z0) return sin(Float64(Float64((pi ^ 0.6666666666666666) * z0) * ((pi ^ 0.1111111111111111) ^ 3.0))) end
function tmp = code(z0) tmp = sin((((pi ^ 0.6666666666666666) * z0) * ((pi ^ 0.1111111111111111) ^ 3.0))); end
code[z0_] := N[Sin[N[(N[(N[Power[Pi, 2/3], $MachinePrecision] * z0), $MachinePrecision] * N[Power[N[Power[Pi, 1/9], $MachinePrecision], 3], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\sin \left(\left({\pi}^{\frac{2}{3}} \cdot z0\right) \cdot {\left({\pi}^{\frac{1}{9}}\right)}^{3}\right)
Initial program 52.9%
lift-*.f64N/A
lift-PI.f64N/A
add-cube-cbrtN/A
associate-*r*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lift-PI.f64N/A
pow1/3N/A
lift-PI.f64N/A
pow1/3N/A
pow-prod-upN/A
lower-pow.f64N/A
metadata-evalN/A
lift-PI.f64N/A
lower-cbrt.f6452.3%
Applied rewrites52.3%
rem-cube-cbrtN/A
lift-cbrt.f64N/A
pow1/3N/A
cbrt-powN/A
metadata-evalN/A
lift-pow.f64N/A
lower-pow.f6452.9%
Applied rewrites52.9%
herbie shell --seed 2025277 -o generate:taylor -o generate:evaluate
(FPCore (z0)
:name "(sin (* z0 PI))"
:precision binary64
(sin (* z0 PI)))