(FPCore (x) :precision binary64 (sin (cos (tan (acos (atan (asin x)))))))
double code(double x) { return sin(cos(tan(acos(atan(asin(x)))))); }
real(8) function code(x) real(8), intent (in) :: x code = sin(cos(tan(acos(atan(asin(x)))))) end function
public static double code(double x) { return Math.sin(Math.cos(Math.tan(Math.acos(Math.atan(Math.asin(x)))))); }
def code(x): return math.sin(math.cos(math.tan(math.acos(math.atan(math.asin(x))))))
function code(x) return sin(cos(tan(acos(atan(asin(x)))))) end
function tmp = code(x) tmp = sin(cos(tan(acos(atan(asin(x)))))); end
code[x_] := N[Sin[N[Cos[N[Tan[N[ArcCos[N[ArcTan[N[ArcSin[x], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]
\begin{array}{l} \\ \sin \cos \tan \cos^{-1} \tan^{-1} \sin^{-1} x \end{array}
Sampling outcomes in binary64 precision:
Herbie found 3 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (x) :precision binary64 (sin (cos (tan (acos (atan (asin x)))))))
double code(double x) { return sin(cos(tan(acos(atan(asin(x)))))); }
real(8) function code(x) real(8), intent (in) :: x code = sin(cos(tan(acos(atan(asin(x)))))) end function
public static double code(double x) { return Math.sin(Math.cos(Math.tan(Math.acos(Math.atan(Math.asin(x)))))); }
def code(x): return math.sin(math.cos(math.tan(math.acos(math.atan(math.asin(x))))))
function code(x) return sin(cos(tan(acos(atan(asin(x)))))) end
function tmp = code(x) tmp = sin(cos(tan(acos(atan(asin(x)))))); end
code[x_] := N[Sin[N[Cos[N[Tan[N[ArcCos[N[ArcTan[N[ArcSin[x], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]
\begin{array}{l} \\ \sin \cos \tan \cos^{-1} \tan^{-1} \sin^{-1} x \end{array}
(FPCore (x) :precision binary64 (let* ((t_0 (atan (asin x)))) (sin (cos (* (sin (acos t_0)) (/ -1.0 t_0))))))
double code(double x) { double t_0 = atan(asin(x)); return sin(cos((sin(acos(t_0)) * (-1.0 / t_0)))); }
real(8) function code(x) real(8), intent (in) :: x real(8) :: t_0 t_0 = atan(asin(x)) code = sin(cos((sin(acos(t_0)) * ((-1.0d0) / t_0)))) end function
public static double code(double x) { double t_0 = Math.atan(Math.asin(x)); return Math.sin(Math.cos((Math.sin(Math.acos(t_0)) * (-1.0 / t_0)))); }
def code(x): t_0 = math.atan(math.asin(x)) return math.sin(math.cos((math.sin(math.acos(t_0)) * (-1.0 / t_0))))
function code(x) t_0 = atan(asin(x)) return sin(cos(Float64(sin(acos(t_0)) * Float64(-1.0 / t_0)))) end
function tmp = code(x) t_0 = atan(asin(x)); tmp = sin(cos((sin(acos(t_0)) * (-1.0 / t_0)))); end
code[x_] := Block[{t$95$0 = N[ArcTan[N[ArcSin[x], $MachinePrecision]], $MachinePrecision]}, N[Sin[N[Cos[N[(N[Sin[N[ArcCos[t$95$0], $MachinePrecision]], $MachinePrecision] * N[(-1.0 / t$95$0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]
\begin{array}{l} \\ \begin{array}{l} t_0 := \tan^{-1} \sin^{-1} x\\ \sin \cos \left(\sin \cos^{-1} t\_0 \cdot \frac{-1}{t\_0}\right) \end{array} \end{array}
Initial program 11.0%
lift-tan.f64
N/A
tan-quot
N/A
lift-acos.f64
N/A
cos-acos
N/A
frac-2neg
N/A
div-inv
N/A
lower-*.f64
N/A
lower-neg.f64
N/A
lower-sin.f64
N/A
frac-2neg
N/A
metadata-eval
N/A
remove-double-neg
N/A
lower-/.f64
12.8
Applied rewrites12.8%
Final simplification12.8%
(FPCore (x) :precision binary64 (sin (cos (pow (tan (asin (atan (asin x)))) -1.0))))
double code(double x) { return sin(cos(pow(tan(asin(atan(asin(x)))), -1.0))); }
real(8) function code(x) real(8), intent (in) :: x code = sin(cos((tan(asin(atan(asin(x)))) ** (-1.0d0)))) end function
public static double code(double x) { return Math.sin(Math.cos(Math.pow(Math.tan(Math.asin(Math.atan(Math.asin(x)))), -1.0))); }
def code(x): return math.sin(math.cos(math.pow(math.tan(math.asin(math.atan(math.asin(x)))), -1.0)))
function code(x) return sin(cos((tan(asin(atan(asin(x)))) ^ -1.0))) end
function tmp = code(x) tmp = sin(cos((tan(asin(atan(asin(x)))) ^ -1.0))); end
code[x_] := N[Sin[N[Cos[N[Power[N[Tan[N[ArcSin[N[ArcTan[N[ArcSin[x], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], -1.0], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]
\begin{array}{l} \\ \sin \cos \left({\tan \sin^{-1} \tan^{-1} \sin^{-1} x}^{-1}\right) \end{array}
Initial program 11.0%
lift-tan.f64
N/A
tan-quot
N/A
lift-acos.f64
N/A
cos-acos
N/A
clear-num
N/A
lower-/.f64
N/A
sin-asin
N/A
lift-acos.f64
N/A
sin-acos
N/A
cos-asin
N/A
quot-tan
N/A
lower-tan.f64
N/A
lower-asin.f64
12.8
Applied rewrites12.8%
Final simplification12.8%
(FPCore (x) :precision binary64 (sin (cos (tan (acos (atan (asin x)))))))
double code(double x) { return sin(cos(tan(acos(atan(asin(x)))))); }
real(8) function code(x) real(8), intent (in) :: x code = sin(cos(tan(acos(atan(asin(x)))))) end function
public static double code(double x) { return Math.sin(Math.cos(Math.tan(Math.acos(Math.atan(Math.asin(x)))))); }
def code(x): return math.sin(math.cos(math.tan(math.acos(math.atan(math.asin(x))))))
function code(x) return sin(cos(tan(acos(atan(asin(x)))))) end
function tmp = code(x) tmp = sin(cos(tan(acos(atan(asin(x)))))); end
code[x_] := N[Sin[N[Cos[N[Tan[N[ArcCos[N[ArcTan[N[ArcSin[x], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]
\begin{array}{l} \\ \sin \cos \tan \cos^{-1} \tan^{-1} \sin^{-1} x \end{array}
Initial program 11.0%
herbie shell --seed 1
(FPCore (x)
:name "sin(cos(tan(acos(atan(asin(x))))))"
:precision binary64
:pre (and (<= -1000000000.0 x) (<= x 1000000000.0))
(sin (cos (tan (acos (atan (asin x)))))))