
(FPCore (pi) :precision binary64 (* (/ 4.0 3.0) (tan (/ pi 8.0))))
double code(double pi) {
return (4.0 / 3.0) * tan((pi / 8.0));
}
real(8) function code(pi)
real(8), intent (in) :: pi
code = (4.0d0 / 3.0d0) * tan((pi / 8.0d0))
end function
public static double code(double pi) {
return (4.0 / 3.0) * Math.tan((pi / 8.0));
}
def code(pi): return (4.0 / 3.0) * math.tan((pi / 8.0))
function code(pi) return Float64(Float64(4.0 / 3.0) * tan(Float64(pi / 8.0))) end
function tmp = code(pi) tmp = (4.0 / 3.0) * tan((pi / 8.0)); end
code[pi_] := N[(N[(4.0 / 3.0), $MachinePrecision] * N[Tan[N[(pi / 8.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\frac{4}{3} \cdot \tan \left(\frac{pi}{8}\right)
Herbie found 7 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (pi) :precision binary64 (* (/ 4.0 3.0) (tan (/ pi 8.0))))
double code(double pi) {
return (4.0 / 3.0) * tan((pi / 8.0));
}
real(8) function code(pi)
real(8), intent (in) :: pi
code = (4.0d0 / 3.0d0) * tan((pi / 8.0d0))
end function
public static double code(double pi) {
return (4.0 / 3.0) * Math.tan((pi / 8.0));
}
def code(pi): return (4.0 / 3.0) * math.tan((pi / 8.0))
function code(pi) return Float64(Float64(4.0 / 3.0) * tan(Float64(pi / 8.0))) end
function tmp = code(pi) tmp = (4.0 / 3.0) * tan((pi / 8.0)); end
code[pi_] := N[(N[(4.0 / 3.0), $MachinePrecision] * N[Tan[N[(pi / 8.0), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\frac{4}{3} \cdot \tan \left(\frac{pi}{8}\right)
(FPCore (pi) :precision binary64 (/ (tan (* 0.125 pi)) 0.75))
double code(double pi) {
return tan((0.125 * pi)) / 0.75;
}
real(8) function code(pi)
real(8), intent (in) :: pi
code = tan((0.125d0 * pi)) / 0.75d0
end function
public static double code(double pi) {
return Math.tan((0.125 * pi)) / 0.75;
}
def code(pi): return math.tan((0.125 * pi)) / 0.75
function code(pi) return Float64(tan(Float64(0.125 * pi)) / 0.75) end
function tmp = code(pi) tmp = tan((0.125 * pi)) / 0.75; end
code[pi_] := N[(N[Tan[N[(0.125 * pi), $MachinePrecision]], $MachinePrecision] / 0.75), $MachinePrecision]
\frac{\tan \left(0.125 \cdot pi\right)}{0.75}
Initial program 99.5%
lift-*.f64N/A
lift-tan.f64N/A
tan-quotN/A
associate-*r/N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lift-/.f64N/A
mult-flipN/A
*-commutativeN/A
lower-*.f64N/A
metadata-evalN/A
lift-/.f64N/A
metadata-evalN/A
lift-/.f64N/A
frac-2negN/A
distribute-frac-neg2N/A
cos-negN/A
lower-cos.f64N/A
frac-2negN/A
remove-double-negN/A
mult-flipN/A
*-commutativeN/A
lower-*.f64N/A
metadata-evalN/A
metadata-eval99.3%
Applied rewrites99.3%
lift-cos.f64N/A
sin-+PI/2-revN/A
lower-sin.f64N/A
lift-*.f64N/A
lower-fma.f64N/A
lift-PI.f64N/A
mult-flipN/A
lower-*.f64N/A
metadata-eval99.4%
Applied rewrites99.4%
Applied rewrites99.4%
lift-/.f64N/A
lift-/.f64N/A
associate-/r/N/A
metadata-evalN/A
metadata-evalN/A
associate-/r/N/A
div-flip-revN/A
lower-/.f6499.7%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6499.7%
Applied rewrites99.7%
(FPCore (pi) :precision binary64 (* (tan (* 0.125 pi)) 1.3333333333333333))
double code(double pi) {
return tan((0.125 * pi)) * 1.3333333333333333;
}
real(8) function code(pi)
real(8), intent (in) :: pi
code = tan((0.125d0 * pi)) * 1.3333333333333333d0
end function
public static double code(double pi) {
return Math.tan((0.125 * pi)) * 1.3333333333333333;
}
def code(pi): return math.tan((0.125 * pi)) * 1.3333333333333333
function code(pi) return Float64(tan(Float64(0.125 * pi)) * 1.3333333333333333) end
function tmp = code(pi) tmp = tan((0.125 * pi)) * 1.3333333333333333; end
code[pi_] := N[(N[Tan[N[(0.125 * pi), $MachinePrecision]], $MachinePrecision] * 1.3333333333333333), $MachinePrecision]
\tan \left(0.125 \cdot pi\right) \cdot 1.3333333333333333
Initial program 99.5%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6499.5%
lift-/.f64N/A
mult-flipN/A
*-commutativeN/A
lower-*.f64N/A
metadata-eval99.5%
lift-/.f64N/A
metadata-eval99.5%
Applied rewrites99.5%
(FPCore (pi) :precision binary64 (/ 1.0 (/ (+ 6.0 (* -0.03125 (pow pi 2.0))) pi)))
double code(double pi) {
return 1.0 / ((6.0 + (-0.03125 * pow(pi, 2.0))) / pi);
}
real(8) function code(pi)
real(8), intent (in) :: pi
code = 1.0d0 / ((6.0d0 + ((-0.03125d0) * (pi ** 2.0d0))) / pi)
end function
public static double code(double pi) {
return 1.0 / ((6.0 + (-0.03125 * Math.pow(pi, 2.0))) / pi);
}
def code(pi): return 1.0 / ((6.0 + (-0.03125 * math.pow(pi, 2.0))) / pi)
function code(pi) return Float64(1.0 / Float64(Float64(6.0 + Float64(-0.03125 * (pi ^ 2.0))) / pi)) end
function tmp = code(pi) tmp = 1.0 / ((6.0 + (-0.03125 * (pi ^ 2.0))) / pi); end
code[pi_] := N[(1.0 / N[(N[(6.0 + N[(-0.03125 * N[Power[pi, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / pi), $MachinePrecision]), $MachinePrecision]
\frac{1}{\frac{6 + -0.03125 \cdot {pi}^{2}}{pi}}
Initial program 99.5%
lift-*.f64N/A
lift-tan.f64N/A
tan-quotN/A
associate-*r/N/A
div-flipN/A
lower-unsound-/.f64N/A
lower-unsound-/.f64N/A
lift-/.f64N/A
frac-2negN/A
distribute-frac-neg2N/A
cos-negN/A
lower-cos.f64N/A
frac-2negN/A
remove-double-negN/A
mult-flipN/A
*-commutativeN/A
lower-*.f64N/A
metadata-evalN/A
metadata-evalN/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites99.3%
Taylor expanded in pi around 0
lower-/.f64N/A
lower-+.f64N/A
lower-*.f64N/A
lower-pow.f6434.1%
Applied rewrites34.1%
(FPCore (pi) :precision binary64 (/ 1.0 (* (/ (+ 8.0 (* -0.041666666666666664 (pow pi 2.0))) pi) 0.75)))
double code(double pi) {
return 1.0 / (((8.0 + (-0.041666666666666664 * pow(pi, 2.0))) / pi) * 0.75);
}
real(8) function code(pi)
real(8), intent (in) :: pi
code = 1.0d0 / (((8.0d0 + ((-0.041666666666666664d0) * (pi ** 2.0d0))) / pi) * 0.75d0)
end function
public static double code(double pi) {
return 1.0 / (((8.0 + (-0.041666666666666664 * Math.pow(pi, 2.0))) / pi) * 0.75);
}
def code(pi): return 1.0 / (((8.0 + (-0.041666666666666664 * math.pow(pi, 2.0))) / pi) * 0.75)
function code(pi) return Float64(1.0 / Float64(Float64(Float64(8.0 + Float64(-0.041666666666666664 * (pi ^ 2.0))) / pi) * 0.75)) end
function tmp = code(pi) tmp = 1.0 / (((8.0 + (-0.041666666666666664 * (pi ^ 2.0))) / pi) * 0.75); end
code[pi_] := N[(1.0 / N[(N[(N[(8.0 + N[(-0.041666666666666664 * N[Power[pi, 2.0], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / pi), $MachinePrecision] * 0.75), $MachinePrecision]), $MachinePrecision]
\frac{1}{\frac{8 + -0.041666666666666664 \cdot {pi}^{2}}{pi} \cdot 0.75}
Initial program 99.5%
lift-*.f64N/A
lift-tan.f64N/A
tan-quotN/A
associate-*r/N/A
lower-/.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-sin.f64N/A
lift-/.f64N/A
mult-flipN/A
*-commutativeN/A
lower-*.f64N/A
metadata-evalN/A
lift-/.f64N/A
metadata-evalN/A
lift-/.f64N/A
frac-2negN/A
distribute-frac-neg2N/A
cos-negN/A
lower-cos.f64N/A
frac-2negN/A
remove-double-negN/A
mult-flipN/A
*-commutativeN/A
lower-*.f64N/A
metadata-evalN/A
metadata-eval99.3%
Applied rewrites99.3%
lift-cos.f64N/A
sin-+PI/2-revN/A
lower-sin.f64N/A
lift-*.f64N/A
lower-fma.f64N/A
lift-PI.f64N/A
mult-flipN/A
lower-*.f64N/A
metadata-eval99.4%
Applied rewrites99.4%
Applied rewrites99.4%
Taylor expanded in pi around 0
lower-/.f64N/A
lower-+.f64N/A
lower-*.f64N/A
lower-pow.f6434.1%
Applied rewrites34.1%
(FPCore (pi) :precision binary64 (* pi (* (- 1.0 (/ (* -0.0008680555555555555 (* pi pi)) 0.16666666666666666)) 0.16666666666666666)))
double code(double pi) {
return pi * ((1.0 - ((-0.0008680555555555555 * (pi * pi)) / 0.16666666666666666)) * 0.16666666666666666);
}
real(8) function code(pi)
real(8), intent (in) :: pi
code = pi * ((1.0d0 - (((-0.0008680555555555555d0) * (pi * pi)) / 0.16666666666666666d0)) * 0.16666666666666666d0)
end function
public static double code(double pi) {
return pi * ((1.0 - ((-0.0008680555555555555 * (pi * pi)) / 0.16666666666666666)) * 0.16666666666666666);
}
def code(pi): return pi * ((1.0 - ((-0.0008680555555555555 * (pi * pi)) / 0.16666666666666666)) * 0.16666666666666666)
function code(pi) return Float64(pi * Float64(Float64(1.0 - Float64(Float64(-0.0008680555555555555 * Float64(pi * pi)) / 0.16666666666666666)) * 0.16666666666666666)) end
function tmp = code(pi) tmp = pi * ((1.0 - ((-0.0008680555555555555 * (pi * pi)) / 0.16666666666666666)) * 0.16666666666666666); end
code[pi_] := N[(pi * N[(N[(1.0 - N[(N[(-0.0008680555555555555 * N[(pi * pi), $MachinePrecision]), $MachinePrecision] / 0.16666666666666666), $MachinePrecision]), $MachinePrecision] * 0.16666666666666666), $MachinePrecision]), $MachinePrecision]
pi \cdot \left(\left(1 - \frac{-0.0008680555555555555 \cdot \left(pi \cdot pi\right)}{0.16666666666666666}\right) \cdot 0.16666666666666666\right)
Initial program 99.5%
Taylor expanded in pi around 0
lower-*.f64N/A
lower-+.f64N/A
lower-*.f64N/A
lower-pow.f6430.3%
Applied rewrites30.3%
lift-+.f64N/A
add-flipN/A
sub-to-multN/A
lower-unsound-*.f64N/A
lower-unsound--.f64N/A
lower-unsound-/.f64N/A
lift-*.f64N/A
distribute-lft-neg-outN/A
lower-*.f64N/A
metadata-eval30.3%
lift-pow.f64N/A
unpow2N/A
lower-*.f6430.3%
Applied rewrites30.3%
(FPCore (pi) :precision binary64 (* pi (fma (* 0.0008680555555555555 pi) pi 0.16666666666666666)))
double code(double pi) {
return pi * fma((0.0008680555555555555 * pi), pi, 0.16666666666666666);
}
function code(pi) return Float64(pi * fma(Float64(0.0008680555555555555 * pi), pi, 0.16666666666666666)) end
code[pi_] := N[(pi * N[(N[(0.0008680555555555555 * pi), $MachinePrecision] * pi + 0.16666666666666666), $MachinePrecision]), $MachinePrecision]
pi \cdot \mathsf{fma}\left(0.0008680555555555555 \cdot pi, pi, 0.16666666666666666\right)
Initial program 99.5%
Taylor expanded in pi around 0
lower-*.f64N/A
lower-+.f64N/A
lower-*.f64N/A
lower-pow.f6430.3%
Applied rewrites30.3%
lift-+.f64N/A
+-commutativeN/A
sum-to-multN/A
lower-unsound-*.f64N/A
lower-unsound-+.f64N/A
lower-unsound-/.f6430.3%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6430.3%
lift-pow.f64N/A
unpow2N/A
lower-*.f6430.3%
lift-*.f64N/A
*-commutativeN/A
lower-*.f6430.3%
lift-pow.f64N/A
unpow2N/A
lower-*.f6430.3%
Applied rewrites30.3%
lift-*.f64N/A
lift-+.f64N/A
lift-/.f64N/A
sum-to-mult-revN/A
add-flipN/A
*-lft-identityN/A
add-flipN/A
*-lft-identityN/A
lift-*.f64N/A
lift-*.f64N/A
associate-*l*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6430.3%
Applied rewrites30.3%
(FPCore (pi) :precision binary64 (* 0.16666666666666666 pi))
double code(double pi) {
return 0.16666666666666666 * pi;
}
real(8) function code(pi)
real(8), intent (in) :: pi
code = 0.16666666666666666d0 * pi
end function
public static double code(double pi) {
return 0.16666666666666666 * pi;
}
def code(pi): return 0.16666666666666666 * pi
function code(pi) return Float64(0.16666666666666666 * pi) end
function tmp = code(pi) tmp = 0.16666666666666666 * pi; end
code[pi_] := N[(0.16666666666666666 * pi), $MachinePrecision]
0.16666666666666666 \cdot pi
Initial program 99.5%
Taylor expanded in pi around 0
lower-*.f6424.5%
Applied rewrites24.5%
herbie shell --seed 1
(FPCore (pi)
:name "(4/3)*tan(pi/8)"
:precision binary64
:pre (and (<= 3.0 pi) (<= pi 4.0))
(* (/ 4.0 3.0) (tan (/ pi 8.0))))