(FPCore (x) :precision binary64 (tan (* (PI) (* x 2.0))))
\begin{array}{l} \\ \tan \left(\mathsf{PI}\left(\right) \cdot \left(x \cdot 2\right)\right) \end{array}
Sampling outcomes in binary64 precision:
Herbie found 9 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (x) :precision binary64 (tan (* (PI) (* x 2.0))))
\begin{array}{l} \\ \tan \left(\mathsf{PI}\left(\right) \cdot \left(x \cdot 2\right)\right) \end{array}
x\_m = (fabs.f64 x) x\_s = (copysign.f64 #s(literal 1 binary64) x) (FPCore (x_s x_m) :precision binary64 (* x_s (if (<= (* x_m 2.0) 5000000000.0) (/ (sin (* (+ x_m x_m) (PI))) (cos (* (* 2.0 x_m) (PI)))) (/ (* (pow (sin (* 2.0 x_m)) 2.0) (PI)) (- (* (fma (fma (fma 1.6253968253968254 (* x_m x_m) -4.266666666666667) (* x_m x_m) 5.333333333333333) (* x_m x_m) -2.0) x_m))))))
\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;x\_m \cdot 2 \leq 5000000000:\\ \;\;\;\;\frac{\sin \left(\left(x\_m + x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}{\cos \left(\left(2 \cdot x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{{\sin \left(2 \cdot x\_m\right)}^{2} \cdot \mathsf{PI}\left(\right)}{-\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(1.6253968253968254, x\_m \cdot x\_m, -4.266666666666667\right), x\_m \cdot x\_m, 5.333333333333333\right), x\_m \cdot x\_m, -2\right) \cdot x\_m}\\ \end{array} \end{array}
if (*.f64 x #s(literal 2 binary64)) < 5e9
Initial program 64.0%
Taylor expanded in x around inf
lower-/.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-sin.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-cos.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
64.0
Applied rewrites64.0%
Applied rewrites64.0%
if 5e9 < (*.f64 x #s(literal 2 binary64))
Initial program 3.1%
Applied rewrites3.1%
Taylor expanded in x around 0
*-commutative
N/A
lower-*.f64
N/A
Applied rewrites88.1%
Final simplification69.1%
x\_m = (fabs.f64 x) x\_s = (copysign.f64 #s(literal 1 binary64) x) (FPCore (x_s x_m) :precision binary64 (* x_s (if (<= (* x_m 2.0) 5000000000.0) (/ (sin (* (+ x_m x_m) (PI))) (cos (* (* 2.0 x_m) (PI)))) (pow (tan (pow (* 2.0 x_m) -1.0)) (PI)))))
\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;x\_m \cdot 2 \leq 5000000000:\\ \;\;\;\;\frac{\sin \left(\left(x\_m + x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}{\cos \left(\left(2 \cdot x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;{\tan \left({\left(2 \cdot x\_m\right)}^{-1}\right)}^{\mathsf{PI}\left(\right)}\\ \end{array} \end{array}
if (*.f64 x #s(literal 2 binary64)) < 5e9
Initial program 64.0%
Taylor expanded in x around inf
lower-/.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-sin.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-cos.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
64.0
Applied rewrites64.0%
Applied rewrites64.0%
if 5e9 < (*.f64 x #s(literal 2 binary64))
Initial program 3.1%
Applied rewrites1.9%
lift-*.f64
N/A
count-2
N/A
flip-+
N/A
clear-num
N/A
+-inverses
N/A
+-inverses
N/A
+-inverses
N/A
+-inverses
N/A
flip-+
N/A
count-2
N/A
lift-*.f64
N/A
lower-/.f64
65.6
Applied rewrites65.6%
Final simplification64.4%
x\_m = (fabs.f64 x) x\_s = (copysign.f64 #s(literal 1 binary64) x) (FPCore (x_s x_m) :precision binary64 (* x_s (if (<= (* x_m 2.0) 5000000000.0) (tan (* (PI) (* x_m 2.0))) (pow (tan (pow (* 2.0 x_m) -1.0)) (PI)))))
\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;x\_m \cdot 2 \leq 5000000000:\\ \;\;\;\;\tan \left(\mathsf{PI}\left(\right) \cdot \left(x\_m \cdot 2\right)\right)\\ \mathbf{else}:\\ \;\;\;\;{\tan \left({\left(2 \cdot x\_m\right)}^{-1}\right)}^{\mathsf{PI}\left(\right)}\\ \end{array} \end{array}
if (*.f64 x #s(literal 2 binary64)) < 5e9
Initial program 64.0%
if 5e9 < (*.f64 x #s(literal 2 binary64))
Initial program 3.1%
Applied rewrites1.9%
lift-*.f64
N/A
count-2
N/A
flip-+
N/A
clear-num
N/A
+-inverses
N/A
+-inverses
N/A
+-inverses
N/A
+-inverses
N/A
flip-+
N/A
count-2
N/A
lift-*.f64
N/A
lower-/.f64
65.6
Applied rewrites65.6%
Final simplification64.4%
x\_m = (fabs.f64 x) x\_s = (copysign.f64 #s(literal 1 binary64) x) (FPCore (x_s x_m) :precision binary64 (* x_s (if (<= (* x_m 2.0) 5000000000.0) (/ (sin (* (+ x_m x_m) (PI))) (cos (* (* 2.0 x_m) (PI)))) (* (/ (pow (fma (fma (fma -0.08888888888888889 (* x_m x_m) 0.6666666666666666) (* x_m x_m) -2.0) (* x_m x_m) 1.0) -1.0) (PI)) (sin (* 2.0 x_m))))))
\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;x\_m \cdot 2 \leq 5000000000:\\ \;\;\;\;\frac{\sin \left(\left(x\_m + x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}{\cos \left(\left(2 \cdot x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{{\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(-0.08888888888888889, x\_m \cdot x\_m, 0.6666666666666666\right), x\_m \cdot x\_m, -2\right), x\_m \cdot x\_m, 1\right)\right)}^{-1}}{\mathsf{PI}\left(\right)} \cdot \sin \left(2 \cdot x\_m\right)\\ \end{array} \end{array}
if (*.f64 x #s(literal 2 binary64)) < 5e9
Initial program 64.0%
Taylor expanded in x around inf
lower-/.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-sin.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-cos.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
64.0
Applied rewrites64.0%
Applied rewrites64.0%
if 5e9 < (*.f64 x #s(literal 2 binary64))
Initial program 3.1%
Applied rewrites3.1%
Taylor expanded in x around 0
+-commutative
N/A
*-commutative
N/A
lower-fma.f64
N/A
sub-neg
N/A
*-commutative
N/A
metadata-eval
N/A
lower-fma.f64
N/A
+-commutative
N/A
lower-fma.f64
N/A
unpow2
N/A
lower-*.f64
N/A
unpow2
N/A
lower-*.f64
N/A
unpow2
N/A
lower-*.f64
82.7
Applied rewrites82.7%
x\_m = (fabs.f64 x) x\_s = (copysign.f64 #s(literal 1 binary64) x) (FPCore (x_s x_m) :precision binary64 (* x_s (if (<= (* x_m 2.0) 5000000000.0) (/ (sin (* (+ x_m x_m) (PI))) (cos (* (* 2.0 x_m) (PI)))) (/ (* (pow (sin (* 2.0 x_m)) 2.0) (PI)) (- (* (fma (fma -4.266666666666667 (* x_m x_m) 5.333333333333333) (* x_m x_m) -2.0) x_m))))))
\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;x\_m \cdot 2 \leq 5000000000:\\ \;\;\;\;\frac{\sin \left(\left(x\_m + x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}{\cos \left(\left(2 \cdot x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{{\sin \left(2 \cdot x\_m\right)}^{2} \cdot \mathsf{PI}\left(\right)}{-\mathsf{fma}\left(\mathsf{fma}\left(-4.266666666666667, x\_m \cdot x\_m, 5.333333333333333\right), x\_m \cdot x\_m, -2\right) \cdot x\_m}\\ \end{array} \end{array}
if (*.f64 x #s(literal 2 binary64)) < 5e9
Initial program 64.0%
Taylor expanded in x around inf
lower-/.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-sin.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-cos.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
64.0
Applied rewrites64.0%
Applied rewrites64.0%
if 5e9 < (*.f64 x #s(literal 2 binary64))
Initial program 3.1%
Applied rewrites3.1%
Taylor expanded in x around 0
*-commutative
N/A
lower-*.f64
N/A
sub-neg
N/A
*-commutative
N/A
metadata-eval
N/A
lower-fma.f64
N/A
+-commutative
N/A
lower-fma.f64
N/A
unpow2
N/A
lower-*.f64
N/A
unpow2
N/A
lower-*.f64
80.8
Applied rewrites80.8%
Final simplification67.6%
x\_m = (fabs.f64 x) x\_s = (copysign.f64 #s(literal 1 binary64) x) (FPCore (x_s x_m) :precision binary64 (* x_s (if (<= (* x_m 2.0) 5000000000.0) (/ (sin (* (+ x_m x_m) (PI))) (cos (* (* 2.0 x_m) (PI)))) (* (/ (pow (fma (fma 0.6666666666666666 (* x_m x_m) -2.0) (* x_m x_m) 1.0) -1.0) (PI)) (sin (* 2.0 x_m))))))
\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \begin{array}{l} \mathbf{if}\;x\_m \cdot 2 \leq 5000000000:\\ \;\;\;\;\frac{\sin \left(\left(x\_m + x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}{\cos \left(\left(2 \cdot x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{{\left(\mathsf{fma}\left(\mathsf{fma}\left(0.6666666666666666, x\_m \cdot x\_m, -2\right), x\_m \cdot x\_m, 1\right)\right)}^{-1}}{\mathsf{PI}\left(\right)} \cdot \sin \left(2 \cdot x\_m\right)\\ \end{array} \end{array}
if (*.f64 x #s(literal 2 binary64)) < 5e9
Initial program 64.0%
Taylor expanded in x around inf
lower-/.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-sin.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-cos.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
64.0
Applied rewrites64.0%
Applied rewrites64.0%
if 5e9 < (*.f64 x #s(literal 2 binary64))
Initial program 3.1%
Applied rewrites3.1%
Taylor expanded in x around 0
+-commutative
N/A
*-commutative
N/A
lower-fma.f64
N/A
sub-neg
N/A
metadata-eval
N/A
lower-fma.f64
N/A
unpow2
N/A
lower-*.f64
N/A
unpow2
N/A
lower-*.f64
75.6
Applied rewrites75.6%
x\_m = (fabs.f64 x) x\_s = (copysign.f64 #s(literal 1 binary64) x) (FPCore (x_s x_m) :precision binary64 (* x_s (/ (sin (* (* 2.0 x_m) (PI))) (fma (* (* (PI) (PI)) -2.0) (* x_m x_m) 1.0))))
\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \frac{\sin \left(\left(2 \cdot x\_m\right) \cdot \mathsf{PI}\left(\right)\right)}{\mathsf{fma}\left(\left(\mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right)\right) \cdot -2, x\_m \cdot x\_m, 1\right)} \end{array}
Initial program 51.2%
Taylor expanded in x around inf
lower-/.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-sin.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
N/A
*-commutative
N/A
associate-*r*
N/A
lower-cos.f64
N/A
associate-*r*
N/A
*-commutative
N/A
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
51.2
Applied rewrites51.2%
Taylor expanded in x around 0
Applied rewrites71.9%
x\_m = (fabs.f64 x) x\_s = (copysign.f64 #s(literal 1 binary64) x) (FPCore (x_s x_m) :precision binary64 (* x_s (tan (* (PI) (* x_m 2.0)))))
\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \tan \left(\mathsf{PI}\left(\right) \cdot \left(x\_m \cdot 2\right)\right) \end{array}
Initial program 51.2%
x\_m = (fabs.f64 x) x\_s = (copysign.f64 #s(literal 1 binary64) x) (FPCore (x_s x_m) :precision binary64 (* x_s (* (+ x_m x_m) (PI))))
\begin{array}{l} x\_m = \left|x\right| \\ x\_s = \mathsf{copysign}\left(1, x\right) \\ x\_s \cdot \left(\left(x\_m + x\_m\right) \cdot \mathsf{PI}\left(\right)\right) \end{array}
Initial program 51.2%
Taylor expanded in x around 0
associate-*r*
N/A
lower-*.f64
N/A
lower-*.f64
N/A
lower-PI.f64
49.6
Applied rewrites49.6%
Applied rewrites49.6%
herbie shell --seed 1
(FPCore (x)
:name "(tan (* (PI) (* x 2)))"
:precision binary64
(tan (* (PI) (* x 2.0))))