
(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 13 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}
b_m = (fabs.f64 b)
(FPCore (a b_m angle)
:precision binary64
(let* ((t_0 (* angle (PI))))
(if (<= b_m 5e+177)
(*
(+ a b_m)
(*
(* (sin (* t_0 0.005555555555555556)) (- b_m a))
(* (cos (* -0.005555555555555556 t_0)) 2.0)))
(* (+ a b_m) (* (* (* (- b_m a) (PI)) angle) 0.011111111111111112)))))\begin{array}{l}
b_m = \left|b\right|
\\
\begin{array}{l}
t_0 := angle \cdot \mathsf{PI}\left(\right)\\
\mathbf{if}\;b\_m \leq 5 \cdot 10^{+177}:\\
\;\;\;\;\left(a + b\_m\right) \cdot \left(\left(\sin \left(t\_0 \cdot 0.005555555555555556\right) \cdot \left(b\_m - a\right)\right) \cdot \left(\cos \left(-0.005555555555555556 \cdot t\_0\right) \cdot 2\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(a + b\_m\right) \cdot \left(\left(\left(\left(b\_m - a\right) \cdot \mathsf{PI}\left(\right)\right) \cdot angle\right) \cdot 0.011111111111111112\right)\\
\end{array}
\end{array}
if b < 5.0000000000000003e177Initial program 57.7%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites62.4%
Taylor expanded in angle around 0
Applied rewrites58.2%
Applied rewrites65.1%
Taylor expanded in angle around inf
Applied rewrites66.9%
if 5.0000000000000003e177 < b Initial program 42.5%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites57.3%
Taylor expanded in angle around 0
Applied rewrites57.3%
Applied rewrites81.4%
Taylor expanded in angle around 0
Applied rewrites85.1%
b_m = (fabs.f64 b)
(FPCore (a b_m angle)
:precision binary64
(let* ((t_0 (* 2.0 (- (pow b_m 2.0) (pow a 2.0)))) (t_1 (* (* (PI) angle) a)))
(if (<= t_0 -1e-218)
(* t_1 (* a -0.011111111111111112))
(if (<= t_0 INFINITY)
(* (* (* (PI) (* b_m b_m)) angle) 0.011111111111111112)
(* (* -0.011111111111111112 t_1) a)))))\begin{array}{l}
b_m = \left|b\right|
\\
\begin{array}{l}
t_0 := 2 \cdot \left({b\_m}^{2} - {a}^{2}\right)\\
t_1 := \left(\mathsf{PI}\left(\right) \cdot angle\right) \cdot a\\
\mathbf{if}\;t\_0 \leq -1 \cdot 10^{-218}:\\
\;\;\;\;t\_1 \cdot \left(a \cdot -0.011111111111111112\right)\\
\mathbf{elif}\;t\_0 \leq \infty:\\
\;\;\;\;\left(\left(\mathsf{PI}\left(\right) \cdot \left(b\_m \cdot b\_m\right)\right) \cdot angle\right) \cdot 0.011111111111111112\\
\mathbf{else}:\\
\;\;\;\;\left(-0.011111111111111112 \cdot t\_1\right) \cdot a\\
\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)))) < -1e-218Initial program 57.7%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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
Applied rewrites66.3%
Applied rewrites66.4%
if -1e-218 < (*.f64 #s(literal 2 binary64) (-.f64 (pow.f64 b #s(literal 2 binary64)) (pow.f64 a #s(literal 2 binary64)))) < +inf.0Initial program 60.2%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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.5
Applied rewrites58.5%
Taylor expanded in a around 0
Applied rewrites58.6%
if +inf.0 < (*.f64 #s(literal 2 binary64) (-.f64 (pow.f64 b #s(literal 2 binary64)) (pow.f64 a #s(literal 2 binary64)))) Initial program 0.0%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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--.f6469.2
Applied rewrites69.2%
Taylor expanded in a around inf
Applied rewrites76.9%
Applied rewrites76.9%
b_m = (fabs.f64 b)
(FPCore (a b_m angle)
:precision binary64
(let* ((t_0 (* (* 0.005555555555555556 (PI)) angle)))
(if (<= angle 1e-69)
(* (+ a b_m) (* (* (* (- b_m a) (PI)) angle) 0.011111111111111112))
(* (* (* (cos t_0) (+ a b_m)) (* (- b_m a) 2.0)) (sin t_0)))))\begin{array}{l}
b_m = \left|b\right|
\\
\begin{array}{l}
t_0 := \left(0.005555555555555556 \cdot \mathsf{PI}\left(\right)\right) \cdot angle\\
\mathbf{if}\;angle \leq 10^{-69}:\\
\;\;\;\;\left(a + b\_m\right) \cdot \left(\left(\left(\left(b\_m - a\right) \cdot \mathsf{PI}\left(\right)\right) \cdot angle\right) \cdot 0.011111111111111112\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(\cos t\_0 \cdot \left(a + b\_m\right)\right) \cdot \left(\left(b\_m - a\right) \cdot 2\right)\right) \cdot \sin t\_0\\
\end{array}
\end{array}
if angle < 9.9999999999999996e-70Initial program 61.5%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites65.5%
Taylor expanded in angle around 0
Applied rewrites65.6%
Applied rewrites78.0%
Taylor expanded in angle around 0
Applied rewrites73.9%
if 9.9999999999999996e-70 < angle Initial program 43.2%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites53.1%
Applied rewrites53.1%
b_m = (fabs.f64 b)
(FPCore (a b_m angle)
:precision binary64
(let* ((t_0 (* (* (PI) 0.005555555555555556) angle)))
(if (<= angle 1e-69)
(* (+ a b_m) (* (* (* (- b_m a) (PI)) angle) 0.011111111111111112))
(* (* (sin t_0) (cos t_0)) (* (* (+ b_m a) (- b_m a)) 2.0)))))\begin{array}{l}
b_m = \left|b\right|
\\
\begin{array}{l}
t_0 := \left(\mathsf{PI}\left(\right) \cdot 0.005555555555555556\right) \cdot angle\\
\mathbf{if}\;angle \leq 10^{-69}:\\
\;\;\;\;\left(a + b\_m\right) \cdot \left(\left(\left(\left(b\_m - a\right) \cdot \mathsf{PI}\left(\right)\right) \cdot angle\right) \cdot 0.011111111111111112\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sin t\_0 \cdot \cos t\_0\right) \cdot \left(\left(\left(b\_m + a\right) \cdot \left(b\_m - a\right)\right) \cdot 2\right)\\
\end{array}
\end{array}
if angle < 9.9999999999999996e-70Initial program 61.5%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites65.5%
Taylor expanded in angle around 0
Applied rewrites65.6%
Applied rewrites78.0%
Taylor expanded in angle around 0
Applied rewrites73.9%
if 9.9999999999999996e-70 < angle Initial program 43.2%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites53.1%
b_m = (fabs.f64 b) (FPCore (a b_m angle) :precision binary64 (if (<= (* 2.0 (- (pow b_m 2.0) (pow a 2.0))) 2e-142) (* (* (* (PI) angle) a) (* a -0.011111111111111112)) (* (- b_m a) (* (* (* (PI) b_m) angle) 0.011111111111111112))))
\begin{array}{l}
b_m = \left|b\right|
\\
\begin{array}{l}
\mathbf{if}\;2 \cdot \left({b\_m}^{2} - {a}^{2}\right) \leq 2 \cdot 10^{-142}:\\
\;\;\;\;\left(\left(\mathsf{PI}\left(\right) \cdot angle\right) \cdot a\right) \cdot \left(a \cdot -0.011111111111111112\right)\\
\mathbf{else}:\\
\;\;\;\;\left(b\_m - a\right) \cdot \left(\left(\left(\mathsf{PI}\left(\right) \cdot b\_m\right) \cdot angle\right) \cdot 0.011111111111111112\right)\\
\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)))) < 2.0000000000000001e-142Initial program 62.3%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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.0
Applied rewrites60.0%
Taylor expanded in a around inf
Applied rewrites66.0%
Applied rewrites66.0%
if 2.0000000000000001e-142 < (*.f64 #s(literal 2 binary64) (-.f64 (pow.f64 b #s(literal 2 binary64)) (pow.f64 a #s(literal 2 binary64)))) Initial program 49.0%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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.8
Applied rewrites55.8%
Applied rewrites65.2%
Taylor expanded in a around 0
Applied rewrites62.8%
b_m = (fabs.f64 b)
(FPCore (a b_m angle)
:precision binary64
(let* ((t_0 (* angle (PI))))
(if (<= a 9.5e+231)
(*
(+ a b_m)
(* (* (- b_m a) 2.0) (* 1.0 (sin (* t_0 0.005555555555555556)))))
(* (* a (* t_0 a)) -0.011111111111111112))))\begin{array}{l}
b_m = \left|b\right|
\\
\begin{array}{l}
t_0 := angle \cdot \mathsf{PI}\left(\right)\\
\mathbf{if}\;a \leq 9.5 \cdot 10^{+231}:\\
\;\;\;\;\left(a + b\_m\right) \cdot \left(\left(\left(b\_m - a\right) \cdot 2\right) \cdot \left(1 \cdot \sin \left(t\_0 \cdot 0.005555555555555556\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(a \cdot \left(t\_0 \cdot a\right)\right) \cdot -0.011111111111111112\\
\end{array}
\end{array}
if a < 9.5000000000000002e231Initial program 56.9%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites60.6%
Taylor expanded in angle around 0
Applied rewrites58.6%
Applied rewrites67.9%
Taylor expanded in angle around inf
Applied rewrites68.3%
if 9.5000000000000002e231 < a Initial program 48.3%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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--.f6465.7
Applied rewrites65.7%
Taylor expanded in a around inf
Applied rewrites78.3%
b_m = (fabs.f64 b)
(FPCore (a b_m angle)
:precision binary64
(if (<= angle 5.8e+156)
(* (+ a b_m) (* (* (* (- b_m a) (PI)) angle) 0.011111111111111112))
(*
(* (sin (* (* (PI) 0.005555555555555556) angle)) 1.0)
(* (* (+ b_m a) (- b_m a)) 2.0))))\begin{array}{l}
b_m = \left|b\right|
\\
\begin{array}{l}
\mathbf{if}\;angle \leq 5.8 \cdot 10^{+156}:\\
\;\;\;\;\left(a + b\_m\right) \cdot \left(\left(\left(\left(b\_m - a\right) \cdot \mathsf{PI}\left(\right)\right) \cdot angle\right) \cdot 0.011111111111111112\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sin \left(\left(\mathsf{PI}\left(\right) \cdot 0.005555555555555556\right) \cdot angle\right) \cdot 1\right) \cdot \left(\left(\left(b\_m + a\right) \cdot \left(b\_m - a\right)\right) \cdot 2\right)\\
\end{array}
\end{array}
if angle < 5.80000000000000021e156Initial program 59.9%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites63.8%
Taylor expanded in angle around 0
Applied rewrites62.1%
Applied rewrites72.1%
Taylor expanded in angle around 0
Applied rewrites69.8%
if 5.80000000000000021e156 < angle Initial program 28.4%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites48.0%
Taylor expanded in angle around 0
Applied rewrites28.6%
b_m = (fabs.f64 b)
(FPCore (a b_m angle)
:precision binary64
(if (<= angle 5.8e+156)
(* (+ a b_m) (* (* (* (- b_m a) (PI)) angle) 0.011111111111111112))
(*
(* (fma (- a) a (* b_m b_m)) 2.0)
(sin (* (* 0.005555555555555556 (PI)) angle)))))\begin{array}{l}
b_m = \left|b\right|
\\
\begin{array}{l}
\mathbf{if}\;angle \leq 5.8 \cdot 10^{+156}:\\
\;\;\;\;\left(a + b\_m\right) \cdot \left(\left(\left(\left(b\_m - a\right) \cdot \mathsf{PI}\left(\right)\right) \cdot angle\right) \cdot 0.011111111111111112\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\mathsf{fma}\left(-a, a, b\_m \cdot b\_m\right) \cdot 2\right) \cdot \sin \left(\left(0.005555555555555556 \cdot \mathsf{PI}\left(\right)\right) \cdot angle\right)\\
\end{array}
\end{array}
if angle < 5.80000000000000021e156Initial program 59.9%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites63.8%
Taylor expanded in angle around 0
Applied rewrites62.1%
Applied rewrites72.1%
Taylor expanded in angle around 0
Applied rewrites69.8%
if 5.80000000000000021e156 < angle Initial program 28.4%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites48.0%
Applied rewrites48.0%
Taylor expanded in angle around 0
Applied rewrites28.6%
b_m = (fabs.f64 b) (FPCore (a b_m angle) :precision binary64 (* (+ a b_m) (* (* (* (- b_m a) (PI)) angle) 0.011111111111111112)))
\begin{array}{l}
b_m = \left|b\right|
\\
\left(a + b\_m\right) \cdot \left(\left(\left(\left(b\_m - a\right) \cdot \mathsf{PI}\left(\right)\right) \cdot angle\right) \cdot 0.011111111111111112\right)
\end{array}
Initial program 56.1%
Taylor expanded in angle around inf
*-commutativeN/A
associate-*r*N/A
associate-*l*N/A
lower-*.f64N/A
Applied rewrites61.9%
Taylor expanded in angle around 0
Applied rewrites58.1%
Applied rewrites66.8%
Taylor expanded in angle around 0
Applied rewrites65.4%
b_m = (fabs.f64 b) (FPCore (a b_m angle) :precision binary64 (* (* (* (PI) angle) a) (* a -0.011111111111111112)))
\begin{array}{l}
b_m = \left|b\right|
\\
\left(\left(\mathsf{PI}\left(\right) \cdot angle\right) \cdot a\right) \cdot \left(a \cdot -0.011111111111111112\right)
\end{array}
Initial program 56.1%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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.1
Applied rewrites58.1%
Taylor expanded in a around inf
Applied rewrites42.2%
Applied rewrites42.2%
b_m = (fabs.f64 b) (FPCore (a b_m angle) :precision binary64 (* (* a (* (* angle (PI)) a)) -0.011111111111111112))
\begin{array}{l}
b_m = \left|b\right|
\\
\left(a \cdot \left(\left(angle \cdot \mathsf{PI}\left(\right)\right) \cdot a\right)\right) \cdot -0.011111111111111112
\end{array}
Initial program 56.1%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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.1
Applied rewrites58.1%
Taylor expanded in a around inf
Applied rewrites42.2%
b_m = (fabs.f64 b) (FPCore (a b_m angle) :precision binary64 (* (* -0.011111111111111112 (* (* (PI) angle) a)) a))
\begin{array}{l}
b_m = \left|b\right|
\\
\left(-0.011111111111111112 \cdot \left(\left(\mathsf{PI}\left(\right) \cdot angle\right) \cdot a\right)\right) \cdot a
\end{array}
Initial program 56.1%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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.1
Applied rewrites58.1%
Taylor expanded in a around inf
Applied rewrites42.2%
Applied rewrites42.2%
b_m = (fabs.f64 b) (FPCore (a b_m angle) :precision binary64 (* (* -0.011111111111111112 (* a a)) (* angle (PI))))
\begin{array}{l}
b_m = \left|b\right|
\\
\left(-0.011111111111111112 \cdot \left(a \cdot a\right)\right) \cdot \left(angle \cdot \mathsf{PI}\left(\right)\right)
\end{array}
Initial program 56.1%
Taylor expanded in angle around 0
associate-*r*N/A
associate-*r*N/A
lower-*.f64N/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.1
Applied rewrites58.1%
Taylor expanded in a around inf
Applied rewrites42.2%
Applied rewrites42.2%
Taylor expanded in a around 0
Applied rewrites39.0%
herbie shell --seed 2024360
(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)))))