
(FPCore (x) :precision binary64 (tan (acos x)))
double code(double x) {
return tan(acos(x));
}
real(8) function code(x)
real(8), intent (in) :: x
code = tan(acos(x))
end function
public static double code(double x) {
return Math.tan(Math.acos(x));
}
def code(x): return math.tan(math.acos(x))
function code(x) return tan(acos(x)) end
function tmp = code(x) tmp = tan(acos(x)); end
code[x_] := N[Tan[N[ArcCos[x], $MachinePrecision]], $MachinePrecision]
\tan \cos^{-1} x
Herbie found 4 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x) :precision binary64 (tan (acos x)))
double code(double x) {
return tan(acos(x));
}
real(8) function code(x)
real(8), intent (in) :: x
code = tan(acos(x))
end function
public static double code(double x) {
return Math.tan(Math.acos(x));
}
def code(x): return math.tan(math.acos(x))
function code(x) return tan(acos(x)) end
function tmp = code(x) tmp = tan(acos(x)); end
code[x_] := N[Tan[N[ArcCos[x], $MachinePrecision]], $MachinePrecision]
\tan \cos^{-1} x
(FPCore (x) :precision binary64 (/ (sin (acos x)) x))
double code(double x) {
return sin(acos(x)) / x;
}
real(8) function code(x)
real(8), intent (in) :: x
code = sin(acos(x)) / x
end function
public static double code(double x) {
return Math.sin(Math.acos(x)) / x;
}
def code(x): return math.sin(math.acos(x)) / x
function code(x) return Float64(sin(acos(x)) / x) end
function tmp = code(x) tmp = sin(acos(x)) / x; end
code[x_] := N[(N[Sin[N[ArcCos[x], $MachinePrecision]], $MachinePrecision] / x), $MachinePrecision]
\frac{\sin \cos^{-1} x}{x}
Initial program 6.3%
Taylor expanded in x around 0
lower-/.f64N/A
lower-sin.f64N/A
lower-acos.f64100.0%
Applied rewrites100.0%
(FPCore (x) :precision binary64 (/ (sqrt (- 1.0 (* x x))) x))
double code(double x) {
return sqrt((1.0 - (x * x))) / x;
}
real(8) function code(x)
real(8), intent (in) :: x
code = sqrt((1.0d0 - (x * x))) / x
end function
public static double code(double x) {
return Math.sqrt((1.0 - (x * x))) / x;
}
def code(x): return math.sqrt((1.0 - (x * x))) / x
function code(x) return Float64(sqrt(Float64(1.0 - Float64(x * x))) / x) end
function tmp = code(x) tmp = sqrt((1.0 - (x * x))) / x; end
code[x_] := N[(N[Sqrt[N[(1.0 - N[(x * x), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / x), $MachinePrecision]
\frac{\sqrt{1 - x \cdot x}}{x}
Initial program 6.3%
lift-tan.f64N/A
lift-acos.f64N/A
tan-acosN/A
lower-/.f64N/A
lower-sqrt.f64N/A
lower--.f64N/A
lower-*.f64100.0%
Applied rewrites100.0%
(FPCore (x) :precision binary64 (/ 1.0 x))
double code(double x) {
return 1.0 / x;
}
real(8) function code(x)
real(8), intent (in) :: x
code = 1.0d0 / x
end function
public static double code(double x) {
return 1.0 / x;
}
def code(x): return 1.0 / x
function code(x) return Float64(1.0 / x) end
function tmp = code(x) tmp = 1.0 / x; end
code[x_] := N[(1.0 / x), $MachinePrecision]
\frac{1}{x}
Initial program 6.3%
lift-tan.f64N/A
lift-acos.f64N/A
tan-acosN/A
div-flipN/A
lower-unsound-/.f64N/A
lower-unsound-/.f64N/A
lower-sqrt.f64N/A
lower--.f64N/A
lower-*.f64100.0%
Applied rewrites100.0%
Taylor expanded in x around 0
lower-/.f6499.0%
Applied rewrites99.0%
(FPCore (x) :precision binary64 (- x))
double code(double x) {
return -x;
}
real(8) function code(x)
real(8), intent (in) :: x
code = -x
end function
public static double code(double x) {
return -x;
}
def code(x): return -x
function code(x) return Float64(-x) end
function tmp = code(x) tmp = -x; end
code[x_] := (-x)
-x
Initial program 6.3%
lift-tan.f64N/A
lift-acos.f64N/A
tan-acosN/A
div-flipN/A
lower-unsound-/.f64N/A
lower-unsound-/.f64N/A
lower-sqrt.f64N/A
lower--.f64N/A
lower-*.f64100.0%
Applied rewrites100.0%
lift-/.f64N/A
lift-sqrt.f64N/A
lift--.f64N/A
lift-*.f64N/A
sinh-atanh-revN/A
lower-sinh.f64N/A
lower-atanh.f64100.0%
Applied rewrites100.0%
Taylor expanded in x around inf
lower-*.f641.6%
Applied rewrites1.6%
lift-*.f64N/A
mul-1-negN/A
lower-neg.f641.6%
Applied rewrites1.6%
herbie shell --seed 1
(FPCore (x)
:name "tan(acos(x))"
:precision binary64
(tan (acos x)))