
(FPCore (a b angle) :precision binary64 (let* ((t_0 (* (PI) (/ angle 180.0)))) (* (* (* 2.0 (- (pow b 2.0) (pow a 2.0))) (sin t_0)) (cos t_0))))
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \mathsf{PI}\left(\right) \cdot \frac{angle}{180}\\
\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin t\_0\right) \cdot \cos t\_0
\end{array}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 15 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (a b angle) :precision binary64 (let* ((t_0 (* (PI) (/ angle 180.0)))) (* (* (* 2.0 (- (pow b 2.0) (pow a 2.0))) (sin t_0)) (cos t_0))))
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \mathsf{PI}\left(\right) \cdot \frac{angle}{180}\\
\left(\left(2 \cdot \left({b}^{2} - {a}^{2}\right)\right) \cdot \sin t\_0\right) \cdot \cos t\_0
\end{array}
\end{array}
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(let* ((t_0 (- (PI))) (t_1 (/ (PI) 2.0)))
(*
angle_s
(if (<= angle_m 4.2e+154)
(*
(*
(* (cos (* (* 0.005555555555555556 (PI)) angle_m)) 2.0)
(* (sin (* (* 0.005555555555555556 angle_m) (PI))) (+ a b)))
(- b a))
(*
(* (* (+ b a) (- b a)) 2.0)
(/
(-
(sin
(+
(- (* (/ angle_m 180.0) (PI)) (fma t_0 (/ angle_m 180.0) t_1))
t_1))
(cos (fma (PI) (/ angle_m 180.0) (fma (/ angle_m 180.0) t_0 t_1))))
2.0))))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
\begin{array}{l}
t_0 := -\mathsf{PI}\left(\right)\\
t_1 := \frac{\mathsf{PI}\left(\right)}{2}\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;angle\_m \leq 4.2 \cdot 10^{+154}:\\
\;\;\;\;\left(\left(\cos \left(\left(0.005555555555555556 \cdot \mathsf{PI}\left(\right)\right) \cdot angle\_m\right) \cdot 2\right) \cdot \left(\sin \left(\left(0.005555555555555556 \cdot angle\_m\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \left(a + b\right)\right)\right) \cdot \left(b - a\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(b + a\right) \cdot \left(b - a\right)\right) \cdot 2\right) \cdot \frac{\sin \left(\left(\frac{angle\_m}{180} \cdot \mathsf{PI}\left(\right) - \mathsf{fma}\left(t\_0, \frac{angle\_m}{180}, t\_1\right)\right) + t\_1\right) - \cos \left(\mathsf{fma}\left(\mathsf{PI}\left(\right), \frac{angle\_m}{180}, \mathsf{fma}\left(\frac{angle\_m}{180}, t\_0, t\_1\right)\right)\right)}{2}\\
\end{array}
\end{array}
\end{array}
if angle < 4.19999999999999989e154Initial program 63.4%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites65.7%
Taylor expanded in angle around inf
Applied rewrites74.6%
associate-*r*N/A
lower-*.f64N/A
Applied rewrites75.8%
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f6474.6
Applied rewrites74.6%
if 4.19999999999999989e154 < angle Initial program 34.4%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites34.4%
cos-neg-revN/A
sin-+PI/2N/A
sin-multN/A
lower-/.f64N/A
Applied rewrites40.0%
sin-+PI/2-revN/A
lower-sin.f64N/A
lower-+.f64N/A
Applied rewrites42.2%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= angle_m 3.8e+154)
(*
(*
(* (cos (* (* 0.005555555555555556 (PI)) angle_m)) 2.0)
(* (sin (* (* 0.005555555555555556 angle_m) (PI))) (+ a b)))
(- b a))
(*
(* (* (+ b a) (- b a)) 2.0)
(/
(-
(cos (* -0.5 (PI)))
(cos
(fma
(PI)
(/ angle_m 180.0)
(fma (/ angle_m 180.0) (- (PI)) (/ (PI) 2.0)))))
2.0)))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;angle\_m \leq 3.8 \cdot 10^{+154}:\\
\;\;\;\;\left(\left(\cos \left(\left(0.005555555555555556 \cdot \mathsf{PI}\left(\right)\right) \cdot angle\_m\right) \cdot 2\right) \cdot \left(\sin \left(\left(0.005555555555555556 \cdot angle\_m\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \left(a + b\right)\right)\right) \cdot \left(b - a\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(b + a\right) \cdot \left(b - a\right)\right) \cdot 2\right) \cdot \frac{\cos \left(-0.5 \cdot \mathsf{PI}\left(\right)\right) - \cos \left(\mathsf{fma}\left(\mathsf{PI}\left(\right), \frac{angle\_m}{180}, \mathsf{fma}\left(\frac{angle\_m}{180}, -\mathsf{PI}\left(\right), \frac{\mathsf{PI}\left(\right)}{2}\right)\right)\right)}{2}\\
\end{array}
\end{array}
if angle < 3.7999999999999998e154Initial program 63.4%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites65.7%
Taylor expanded in angle around inf
Applied rewrites74.6%
associate-*r*N/A
lower-*.f64N/A
Applied rewrites75.8%
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f6474.6
Applied rewrites74.6%
if 3.7999999999999998e154 < angle Initial program 34.4%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites34.4%
cos-neg-revN/A
sin-+PI/2N/A
sin-multN/A
lower-/.f64N/A
Applied rewrites40.0%
Taylor expanded in angle around 0
lower-*.f64N/A
lower-PI.f6441.9
Applied rewrites41.9%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= angle_m 6e+106)
(*
(*
(* (cos (* (* 0.005555555555555556 (PI)) angle_m)) 2.0)
(* (sin (* (* 0.005555555555555556 angle_m) (PI))) (+ a b)))
(- b a))
(* (* (- b a) (+ a b)) (sin (* 2.0 (* (PI) (/ angle_m 180.0))))))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;angle\_m \leq 6 \cdot 10^{+106}:\\
\;\;\;\;\left(\left(\cos \left(\left(0.005555555555555556 \cdot \mathsf{PI}\left(\right)\right) \cdot angle\_m\right) \cdot 2\right) \cdot \left(\sin \left(\left(0.005555555555555556 \cdot angle\_m\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \left(a + b\right)\right)\right) \cdot \left(b - a\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(b - a\right) \cdot \left(a + b\right)\right) \cdot \sin \left(2 \cdot \left(\mathsf{PI}\left(\right) \cdot \frac{angle\_m}{180}\right)\right)\\
\end{array}
\end{array}
if angle < 6.0000000000000001e106Initial program 64.6%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites66.6%
Taylor expanded in angle around inf
Applied rewrites76.3%
associate-*r*N/A
lower-*.f64N/A
Applied rewrites77.5%
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f6475.7
Applied rewrites75.7%
if 6.0000000000000001e106 < angle Initial program 33.8%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites35.8%
difference-of-squares-revN/A
pow2N/A
pow2N/A
associate-*l*N/A
lower-*.f64N/A
pow2N/A
pow2N/A
difference-of-squares-revN/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
2-sinN/A
lower-sin.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f64N/A
lower-/.f6435.8
Applied rewrites35.8%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= angle_m 2e+94)
(*
(*
(* (cos (* (* 0.005555555555555556 angle_m) (PI))) 2.0)
(* (sin (* (* 0.005555555555555556 (PI)) angle_m)) (+ a b)))
(- b a))
(* (* (- b a) (+ a b)) (sin (* 2.0 (* (PI) (/ angle_m 180.0))))))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;angle\_m \leq 2 \cdot 10^{+94}:\\
\;\;\;\;\left(\left(\cos \left(\left(0.005555555555555556 \cdot angle\_m\right) \cdot \mathsf{PI}\left(\right)\right) \cdot 2\right) \cdot \left(\sin \left(\left(0.005555555555555556 \cdot \mathsf{PI}\left(\right)\right) \cdot angle\_m\right) \cdot \left(a + b\right)\right)\right) \cdot \left(b - a\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(b - a\right) \cdot \left(a + b\right)\right) \cdot \sin \left(2 \cdot \left(\mathsf{PI}\left(\right) \cdot \frac{angle\_m}{180}\right)\right)\\
\end{array}
\end{array}
if angle < 2e94Initial program 65.8%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites67.8%
Taylor expanded in angle around inf
Applied rewrites77.2%
associate-*r*N/A
lower-*.f64N/A
Applied rewrites79.0%
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f6477.5
Applied rewrites77.5%
if 2e94 < angle Initial program 31.6%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites33.5%
difference-of-squares-revN/A
pow2N/A
pow2N/A
associate-*l*N/A
lower-*.f64N/A
pow2N/A
pow2N/A
difference-of-squares-revN/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
2-sinN/A
lower-sin.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f64N/A
lower-/.f6433.5
Applied rewrites33.5%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(let* ((t_0 (* 0.005555555555555556 (* (PI) angle_m)))
(t_1 (* (* 0.005555555555555556 angle_m) (PI))))
(*
angle_s
(if (<= b 2.1e+183)
(* (* (* (cos t_1) 2.0) (* (sin t_1) (+ a b))) (- b a))
(* (* 2.0 (cos t_0)) (* (* (sin t_0) b) b))))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
\begin{array}{l}
t_0 := 0.005555555555555556 \cdot \left(\mathsf{PI}\left(\right) \cdot angle\_m\right)\\
t_1 := \left(0.005555555555555556 \cdot angle\_m\right) \cdot \mathsf{PI}\left(\right)\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;b \leq 2.1 \cdot 10^{+183}:\\
\;\;\;\;\left(\left(\cos t\_1 \cdot 2\right) \cdot \left(\sin t\_1 \cdot \left(a + b\right)\right)\right) \cdot \left(b - a\right)\\
\mathbf{else}:\\
\;\;\;\;\left(2 \cdot \cos t\_0\right) \cdot \left(\left(\sin t\_0 \cdot b\right) \cdot b\right)\\
\end{array}
\end{array}
\end{array}
if b < 2.1e183Initial program 58.9%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites60.3%
Taylor expanded in angle around inf
Applied rewrites66.2%
associate-*r*N/A
lower-*.f64N/A
Applied rewrites66.8%
if 2.1e183 < b Initial program 57.8%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites66.6%
Taylor expanded in angle around inf
Applied rewrites91.2%
Taylor expanded in a around 0
Applied rewrites91.2%
Taylor expanded in a around 0
+-commutative91.2
Applied rewrites91.2%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= angle_m 4e+114)
(*
(* 2.0 (cos (* (* 0.005555555555555556 (PI)) angle_m)))
(* (* (sin (* 0.005555555555555556 (* (PI) angle_m))) (+ a b)) (- b a)))
(* (* (- b a) (+ a b)) (sin (* 2.0 (* (PI) (/ angle_m 180.0))))))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;angle\_m \leq 4 \cdot 10^{+114}:\\
\;\;\;\;\left(2 \cdot \cos \left(\left(0.005555555555555556 \cdot \mathsf{PI}\left(\right)\right) \cdot angle\_m\right)\right) \cdot \left(\left(\sin \left(0.005555555555555556 \cdot \left(\mathsf{PI}\left(\right) \cdot angle\_m\right)\right) \cdot \left(a + b\right)\right) \cdot \left(b - a\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(b - a\right) \cdot \left(a + b\right)\right) \cdot \sin \left(2 \cdot \left(\mathsf{PI}\left(\right) \cdot \frac{angle\_m}{180}\right)\right)\\
\end{array}
\end{array}
if angle < 4e114Initial program 64.3%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites66.3%
Taylor expanded in angle around inf
Applied rewrites75.9%
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f6475.7
Applied rewrites75.7%
if 4e114 < angle Initial program 34.5%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites36.6%
difference-of-squares-revN/A
pow2N/A
pow2N/A
associate-*l*N/A
lower-*.f64N/A
pow2N/A
pow2N/A
difference-of-squares-revN/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
2-sinN/A
lower-sin.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f64N/A
lower-/.f6436.6
Applied rewrites36.6%
angle\_m = (fabs.f64 angle) angle\_s = (copysign.f64 #s(literal 1 binary64) angle) (FPCore (angle_s a b angle_m) :precision binary64 (let* ((t_0 (* 0.005555555555555556 (* (PI) angle_m)))) (* angle_s (* (* 2.0 (cos t_0)) (* (* (sin t_0) (+ a b)) (- b a))))))
\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
\begin{array}{l}
t_0 := 0.005555555555555556 \cdot \left(\mathsf{PI}\left(\right) \cdot angle\_m\right)\\
angle\_s \cdot \left(\left(2 \cdot \cos t\_0\right) \cdot \left(\left(\sin t\_0 \cdot \left(a + b\right)\right) \cdot \left(b - a\right)\right)\right)
\end{array}
\end{array}
Initial program 58.8%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites60.8%
Taylor expanded in angle around inf
Applied rewrites68.4%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= (* 2.0 (- (pow b 2.0) (pow a 2.0))) -1e-227)
(* (* -0.011111111111111112 a) (* (* angle_m a) (PI)))
(* (* (* angle_m (PI)) (* b (- b a))) 0.011111111111111112))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;2 \cdot \left({b}^{2} - {a}^{2}\right) \leq -1 \cdot 10^{-227}:\\
\;\;\;\;\left(-0.011111111111111112 \cdot a\right) \cdot \left(\left(angle\_m \cdot a\right) \cdot \mathsf{PI}\left(\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(angle\_m \cdot \mathsf{PI}\left(\right)\right) \cdot \left(b \cdot \left(b - a\right)\right)\right) \cdot 0.011111111111111112\\
\end{array}
\end{array}
if (*.f64 #s(literal 2 binary64) (-.f64 (pow.f64 b #s(literal 2 binary64)) (pow.f64 a #s(literal 2 binary64)))) < -9.99999999999999945e-228Initial program 56.3%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6453.9
Applied rewrites53.9%
Taylor expanded in a around inf
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
pow2N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6453.4
Applied rewrites53.4%
associate-*r*N/A
lower-*.f64N/A
lower-*.f6453.4
Applied rewrites53.4%
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6463.7
Applied rewrites63.7%
if -9.99999999999999945e-228 < (*.f64 #s(literal 2 binary64) (-.f64 (pow.f64 b #s(literal 2 binary64)) (pow.f64 a #s(literal 2 binary64)))) Initial program 61.0%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6458.0
Applied rewrites58.0%
Taylor expanded in a around 0
Applied rewrites56.9%
Final simplification60.0%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= (* 2.0 (- (pow b 2.0) (pow a 2.0))) -1e-227)
(* (* -0.011111111111111112 a) (* (* angle_m a) (PI)))
(* (* (* (* b b) (PI)) angle_m) 0.011111111111111112))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;2 \cdot \left({b}^{2} - {a}^{2}\right) \leq -1 \cdot 10^{-227}:\\
\;\;\;\;\left(-0.011111111111111112 \cdot a\right) \cdot \left(\left(angle\_m \cdot a\right) \cdot \mathsf{PI}\left(\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\left(b \cdot b\right) \cdot \mathsf{PI}\left(\right)\right) \cdot angle\_m\right) \cdot 0.011111111111111112\\
\end{array}
\end{array}
if (*.f64 #s(literal 2 binary64) (-.f64 (pow.f64 b #s(literal 2 binary64)) (pow.f64 a #s(literal 2 binary64)))) < -9.99999999999999945e-228Initial program 56.3%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6453.9
Applied rewrites53.9%
Taylor expanded in a around inf
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
pow2N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6453.4
Applied rewrites53.4%
associate-*r*N/A
lower-*.f64N/A
lower-*.f6453.4
Applied rewrites53.4%
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6463.7
Applied rewrites63.7%
if -9.99999999999999945e-228 < (*.f64 #s(literal 2 binary64) (-.f64 (pow.f64 b #s(literal 2 binary64)) (pow.f64 a #s(literal 2 binary64)))) Initial program 61.0%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6458.0
Applied rewrites58.0%
Taylor expanded in a around 0
*-commutativeN/A
lower-*.f64N/A
lower-*.f64N/A
pow2N/A
lower-*.f64N/A
lower-PI.f6457.2
Applied rewrites57.2%
Final simplification60.2%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= angle_m 9.5e-120)
(* (* (* (* (+ a b) (PI)) angle_m) 0.011111111111111112) (- b a))
(* (* (- b a) (+ a b)) (sin (* 2.0 (* (PI) (/ angle_m 180.0))))))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;angle\_m \leq 9.5 \cdot 10^{-120}:\\
\;\;\;\;\left(\left(\left(\left(a + b\right) \cdot \mathsf{PI}\left(\right)\right) \cdot angle\_m\right) \cdot 0.011111111111111112\right) \cdot \left(b - a\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(b - a\right) \cdot \left(a + b\right)\right) \cdot \sin \left(2 \cdot \left(\mathsf{PI}\left(\right) \cdot \frac{angle\_m}{180}\right)\right)\\
\end{array}
\end{array}
if angle < 9.49999999999999937e-120Initial program 62.6%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites65.1%
Taylor expanded in angle around inf
Applied rewrites76.9%
associate-*r*N/A
lower-*.f64N/A
Applied rewrites79.2%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-+.f64N/A
lower-PI.f6474.6
Applied rewrites74.6%
if 9.49999999999999937e-120 < angle Initial program 52.2%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites53.3%
difference-of-squares-revN/A
pow2N/A
pow2N/A
associate-*l*N/A
lower-*.f64N/A
pow2N/A
pow2N/A
difference-of-squares-revN/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f64N/A
2-sinN/A
lower-sin.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f64N/A
lower-/.f6453.3
Applied rewrites53.3%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= (pow a 2.0) 2e+302)
(* (* (PI) angle_m) (* (* (- b a) (+ a b)) 0.011111111111111112))
(* (* -0.011111111111111112 a) (* (* angle_m a) (PI))))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;{a}^{2} \leq 2 \cdot 10^{+302}:\\
\;\;\;\;\left(\mathsf{PI}\left(\right) \cdot angle\_m\right) \cdot \left(\left(\left(b - a\right) \cdot \left(a + b\right)\right) \cdot 0.011111111111111112\right)\\
\mathbf{else}:\\
\;\;\;\;\left(-0.011111111111111112 \cdot a\right) \cdot \left(\left(angle\_m \cdot a\right) \cdot \mathsf{PI}\left(\right)\right)\\
\end{array}
\end{array}
if (pow.f64 a #s(literal 2 binary64)) < 2.0000000000000002e302Initial program 61.5%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6455.3
Applied rewrites55.3%
difference-of-squares-revN/A
pow2N/A
pow2N/A
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f64N/A
lower-*.f64N/A
pow2N/A
pow2N/A
difference-of-squares-revN/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6455.3
Applied rewrites55.3%
if 2.0000000000000002e302 < (pow.f64 a #s(literal 2 binary64)) Initial program 50.5%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6458.9
Applied rewrites58.9%
Taylor expanded in a around inf
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
pow2N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6458.8
Applied rewrites58.8%
associate-*r*N/A
lower-*.f64N/A
lower-*.f6458.8
Applied rewrites58.8%
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6480.2
Applied rewrites80.2%
Final simplification61.2%
angle\_m = (fabs.f64 angle) angle\_s = (copysign.f64 #s(literal 1 binary64) angle) (FPCore (angle_s a b angle_m) :precision binary64 (* angle_s (* 2.0 (* (* (sin (* 0.005555555555555556 (* (PI) angle_m))) (+ a b)) (- b a)))))
\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \left(2 \cdot \left(\left(\sin \left(0.005555555555555556 \cdot \left(\mathsf{PI}\left(\right) \cdot angle\_m\right)\right) \cdot \left(a + b\right)\right) \cdot \left(b - a\right)\right)\right)
\end{array}
Initial program 58.8%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites60.8%
Taylor expanded in angle around inf
Applied rewrites68.4%
Taylor expanded in angle around 0
Applied rewrites65.2%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= angle_m 4.1e+187)
(* (* (* (* (+ a b) (PI)) angle_m) 0.011111111111111112) (- b a))
(* (* (* angle_m (PI)) (* (+ b a) (- a))) 0.011111111111111112))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;angle\_m \leq 4.1 \cdot 10^{+187}:\\
\;\;\;\;\left(\left(\left(\left(a + b\right) \cdot \mathsf{PI}\left(\right)\right) \cdot angle\_m\right) \cdot 0.011111111111111112\right) \cdot \left(b - a\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(angle\_m \cdot \mathsf{PI}\left(\right)\right) \cdot \left(\left(b + a\right) \cdot \left(-a\right)\right)\right) \cdot 0.011111111111111112\\
\end{array}
\end{array}
if angle < 4.1e187Initial program 62.4%
associate-*l*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f64N/A
lower-*.f64N/A
lower-sin.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-/.f64N/A
lower-PI.f64N/A
lower-cos.f64N/A
*-commutativeN/A
lower-*.f64N/A
Applied rewrites64.7%
Taylor expanded in angle around inf
Applied rewrites73.1%
associate-*r*N/A
lower-*.f64N/A
Applied rewrites74.0%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-+.f64N/A
lower-PI.f6469.9
Applied rewrites69.9%
if 4.1e187 < angle Initial program 35.0%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6427.9
Applied rewrites27.9%
Taylor expanded in a around inf
mul-1-negN/A
lower-neg.f6437.6
Applied rewrites37.6%
Final simplification65.8%
angle\_m = (fabs.f64 angle)
angle\_s = (copysign.f64 #s(literal 1 binary64) angle)
(FPCore (angle_s a b angle_m)
:precision binary64
(*
angle_s
(if (<= angle_m 4.1e+187)
(* (* (* (* (PI) angle_m) (+ a b)) (- b a)) 0.011111111111111112)
(* (* (* angle_m (PI)) (* (+ b a) (- a))) 0.011111111111111112))))\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \begin{array}{l}
\mathbf{if}\;angle\_m \leq 4.1 \cdot 10^{+187}:\\
\;\;\;\;\left(\left(\left(\mathsf{PI}\left(\right) \cdot angle\_m\right) \cdot \left(a + b\right)\right) \cdot \left(b - a\right)\right) \cdot 0.011111111111111112\\
\mathbf{else}:\\
\;\;\;\;\left(\left(angle\_m \cdot \mathsf{PI}\left(\right)\right) \cdot \left(\left(b + a\right) \cdot \left(-a\right)\right)\right) \cdot 0.011111111111111112\\
\end{array}
\end{array}
if angle < 4.1e187Initial program 62.4%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6460.3
Applied rewrites60.3%
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f64N/A
+-commutativeN/A
lower-+.f64N/A
lower--.f6469.9
Applied rewrites69.9%
if 4.1e187 < angle Initial program 35.0%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6427.9
Applied rewrites27.9%
Taylor expanded in a around inf
mul-1-negN/A
lower-neg.f6437.6
Applied rewrites37.6%
Final simplification65.7%
angle\_m = (fabs.f64 angle) angle\_s = (copysign.f64 #s(literal 1 binary64) angle) (FPCore (angle_s a b angle_m) :precision binary64 (* angle_s (* (* -0.011111111111111112 a) (* (* angle_m a) (PI)))))
\begin{array}{l}
angle\_m = \left|angle\right|
\\
angle\_s = \mathsf{copysign}\left(1, angle\right)
\\
angle\_s \cdot \left(\left(-0.011111111111111112 \cdot a\right) \cdot \left(\left(angle\_m \cdot a\right) \cdot \mathsf{PI}\left(\right)\right)\right)
\end{array}
Initial program 58.8%
Taylor expanded in angle around 0
*-commutativeN/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
lower-PI.f64N/A
unpow2N/A
unpow2N/A
difference-of-squaresN/A
lower-*.f64N/A
lower-+.f64N/A
lower--.f6456.1
Applied rewrites56.1%
Taylor expanded in a around inf
associate-*r*N/A
lower-*.f64N/A
lower-*.f64N/A
pow2N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6435.6
Applied rewrites35.6%
associate-*r*N/A
lower-*.f64N/A
lower-*.f6435.6
Applied rewrites35.6%
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
lower-*.f64N/A
associate-*r*N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
lower-PI.f6439.6
Applied rewrites39.6%
Final simplification39.6%
herbie shell --seed 2025044
(FPCore (a b angle)
:name "ab-angle->ABCF B"
:precision binary64
(* (* (* 2.0 (- (pow b 2.0) (pow a 2.0))) (sin (* (PI) (/ angle 180.0)))) (cos (* (PI) (/ angle 180.0)))))