
(FPCore (ux uy maxCos) :precision binary32 (let* ((t_0 (+ (- 1.0 ux) (* ux maxCos)))) (* (sin (* (* uy 2.0) (PI))) (sqrt (- 1.0 (* t_0 t_0))))))
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) + ux \cdot maxCos\\
\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{1 - t\_0 \cdot t\_0}
\end{array}
\end{array}
Sampling outcomes in binary32 precision:
Herbie found 18 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (ux uy maxCos) :precision binary32 (let* ((t_0 (+ (- 1.0 ux) (* ux maxCos)))) (* (sin (* (* uy 2.0) (PI))) (sqrt (- 1.0 (* t_0 t_0))))))
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) + ux \cdot maxCos\\
\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{1 - t\_0 \cdot t\_0}
\end{array}
\end{array}
(FPCore (ux uy maxCos)
:precision binary32
(*
(sin (* (* uy 2.0) (PI)))
(sqrt
(*
(-
(fma (- (pow (- maxCos 1.0) 2.0)) ux (* (* 2.0 (/ 1.0 ux)) ux))
(* maxCos 2.0))
ux))))\begin{array}{l}
\\
\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\left(\mathsf{fma}\left(-{\left(maxCos - 1\right)}^{2}, ux, \left(2 \cdot \frac{1}{ux}\right) \cdot ux\right) - maxCos \cdot 2\right) \cdot ux}
\end{array}
Initial program 61.7%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.6
Applied rewrites98.6%
Taylor expanded in ux around inf
lower-*.f32N/A
lower-fma.f32N/A
lift-pow.f32N/A
lift--.f32N/A
lower-*.f32N/A
lower-/.f3298.6
Applied rewrites98.6%
lift-*.f32N/A
lift-fma.f32N/A
lift--.f32N/A
lift-pow.f32N/A
lift-*.f32N/A
lift-/.f32N/A
distribute-rgt-inN/A
lower-fma.f32N/A
lower-*.f32N/A
lift-pow.f32N/A
lift--.f32N/A
lower-*.f32N/A
lift-/.f32N/A
lift-*.f3298.6
Applied rewrites98.6%
Final simplification98.6%
(FPCore (ux uy maxCos)
:precision binary32
(*
(sin (* (* uy 2.0) (PI)))
(sqrt
(*
(-
(* ux (fma -1.0 (pow (- maxCos 1.0) 2.0) (* 2.0 (/ 1.0 ux))))
(* maxCos 2.0))
ux))))\begin{array}{l}
\\
\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\left(ux \cdot \mathsf{fma}\left(-1, {\left(maxCos - 1\right)}^{2}, 2 \cdot \frac{1}{ux}\right) - maxCos \cdot 2\right) \cdot ux}
\end{array}
Initial program 61.7%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.6
Applied rewrites98.6%
Taylor expanded in ux around inf
lower-*.f32N/A
lower-fma.f32N/A
lift-pow.f32N/A
lift--.f32N/A
lower-*.f32N/A
lower-/.f3298.6
Applied rewrites98.6%
(FPCore (ux uy maxCos)
:precision binary32
(*
(sin (* (* uy 2.0) (PI)))
(sqrt
(*
(- (fma (- ux) (* (- maxCos 1.0) (- maxCos 1.0)) 2.0) (* maxCos 2.0))
ux))))\begin{array}{l}
\\
\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\left(\mathsf{fma}\left(-ux, \left(maxCos - 1\right) \cdot \left(maxCos - 1\right), 2\right) - maxCos \cdot 2\right) \cdot ux}
\end{array}
Initial program 61.7%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.6
Applied rewrites98.6%
lift--.f32N/A
lift-pow.f32N/A
unpow2N/A
lower-*.f32N/A
lift--.f32N/A
lift--.f3298.6
Applied rewrites98.6%
(FPCore (ux uy maxCos) :precision binary32 (* (sin (* (* uy 2.0) (PI))) (sqrt (* (- (fma (- ux) (- 1.0 (* 2.0 maxCos)) 2.0) (* maxCos 2.0)) ux))))
\begin{array}{l}
\\
\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\left(\mathsf{fma}\left(-ux, 1 - 2 \cdot maxCos, 2\right) - maxCos \cdot 2\right) \cdot ux}
\end{array}
Initial program 61.7%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.6
Applied rewrites98.6%
Taylor expanded in maxCos around 0
fp-cancel-sign-sub-invN/A
metadata-evalN/A
lower--.f32N/A
lower-*.f3297.8
Applied rewrites97.8%
(FPCore (ux uy maxCos) :precision binary32 (* (sin (* (* uy 2.0) (PI))) (sqrt (* (+ 2.0 (fma -1.0 ux (* maxCos (- (* 2.0 ux) 2.0)))) ux))))
\begin{array}{l}
\\
\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\left(2 + \mathsf{fma}\left(-1, ux, maxCos \cdot \left(2 \cdot ux - 2\right)\right)\right) \cdot ux}
\end{array}
Initial program 61.7%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.6
Applied rewrites98.6%
Taylor expanded in maxCos around 0
lower-+.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f3297.8
Applied rewrites97.8%
(FPCore (ux uy maxCos) :precision binary32 (* (sin (* (* uy 2.0) (PI))) (sqrt (* (- (fma (- ux) 1.0 2.0) (* maxCos 2.0)) ux))))
\begin{array}{l}
\\
\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\left(\mathsf{fma}\left(-ux, 1, 2\right) - maxCos \cdot 2\right) \cdot ux}
\end{array}
Initial program 61.7%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.6
Applied rewrites98.6%
Taylor expanded in maxCos around 0
Applied rewrites96.4%
(FPCore (ux uy maxCos)
:precision binary32
(if (<= uy 0.003220000071451068)
(*
(* 2.0 (* uy (PI)))
(sqrt
(*
(- (fma (- ux) (* (- maxCos 1.0) (- maxCos 1.0)) 2.0) (* maxCos 2.0))
ux)))
(* (sin (* (* uy 2.0) (PI))) (sqrt (* (fma -2.0 maxCos 2.0) ux)))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;uy \leq 0.003220000071451068:\\
\;\;\;\;\left(2 \cdot \left(uy \cdot \mathsf{PI}\left(\right)\right)\right) \cdot \sqrt{\left(\mathsf{fma}\left(-ux, \left(maxCos - 1\right) \cdot \left(maxCos - 1\right), 2\right) - maxCos \cdot 2\right) \cdot ux}\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\mathsf{fma}\left(-2, maxCos, 2\right) \cdot ux}\\
\end{array}
\end{array}
if uy < 0.00322000007Initial program 62.1%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.7
Applied rewrites98.7%
lift--.f32N/A
lift-pow.f32N/A
unpow2N/A
lower-*.f32N/A
lift--.f32N/A
lift--.f3298.7
Applied rewrites98.7%
Taylor expanded in uy around 0
lower-*.f32N/A
lift-*.f32N/A
lift-PI.f3296.1
Applied rewrites96.1%
if 0.00322000007 < uy Initial program 60.5%
Taylor expanded in ux around 0
metadata-evalN/A
fp-cancel-sign-sub-invN/A
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
lower-fma.f3276.7
Applied rewrites76.7%
(FPCore (ux uy maxCos)
:precision binary32
(if (<= uy 0.00019999999494757503)
(*
(* 2.0 (* uy (PI)))
(sqrt
(*
(- (fma (- ux) (* (- maxCos 1.0) (- maxCos 1.0)) 2.0) (* maxCos 2.0))
ux)))
(* (sin (* (* uy 2.0) (PI))) (sqrt (* (- 2.0 ux) ux)))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;uy \leq 0.00019999999494757503:\\
\;\;\;\;\left(2 \cdot \left(uy \cdot \mathsf{PI}\left(\right)\right)\right) \cdot \sqrt{\left(\mathsf{fma}\left(-ux, \left(maxCos - 1\right) \cdot \left(maxCos - 1\right), 2\right) - maxCos \cdot 2\right) \cdot ux}\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\left(uy \cdot 2\right) \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\left(2 - ux\right) \cdot ux}\\
\end{array}
\end{array}
if uy < 1.99999995e-4Initial program 61.8%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.7
Applied rewrites98.7%
lift--.f32N/A
lift-pow.f32N/A
unpow2N/A
lower-*.f32N/A
lift--.f32N/A
lift--.f3298.7
Applied rewrites98.7%
Taylor expanded in uy around 0
lower-*.f32N/A
lift-*.f32N/A
lift-PI.f3298.6
Applied rewrites98.6%
if 1.99999995e-4 < uy Initial program 61.5%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.4
Applied rewrites98.4%
Taylor expanded in maxCos around 0
lower-+.f32N/A
lower-*.f3291.1
Applied rewrites91.1%
Final simplification95.8%
(FPCore (ux uy maxCos)
:precision binary32
(let* ((t_0 (* uy (PI))) (t_1 (+ (- 1.0 ux) (* ux maxCos))))
(if (<= (* t_1 t_1) 0.9996100068092346)
(*
2.0
(*
t_0
(sqrt
(-
1.0
(* (- (+ 1.0 (* maxCos ux)) ux) (+ 1.0 (* ux (- maxCos 1.0))))))))
(* 2.0 (* t_0 (sqrt (* maxCos (fma -2.0 ux (* 2.0 (/ ux maxCos))))))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := uy \cdot \mathsf{PI}\left(\right)\\
t_1 := \left(1 - ux\right) + ux \cdot maxCos\\
\mathbf{if}\;t\_1 \cdot t\_1 \leq 0.9996100068092346:\\
\;\;\;\;2 \cdot \left(t\_0 \cdot \sqrt{1 - \left(\left(1 + maxCos \cdot ux\right) - ux\right) \cdot \left(1 + ux \cdot \left(maxCos - 1\right)\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(t\_0 \cdot \sqrt{maxCos \cdot \mathsf{fma}\left(-2, ux, 2 \cdot \frac{ux}{maxCos}\right)}\right)\\
\end{array}
\end{array}
if (*.f32 (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos)) (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos))) < 0.999610007Initial program 89.6%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3289.2
Applied rewrites89.2%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites76.3%
Taylor expanded in ux around 0
lower-+.f32N/A
lower-*.f32N/A
lift--.f3276.2
Applied rewrites76.2%
if 0.999610007 < (*.f32 (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos)) (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos))) Initial program 41.9%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3242.0
Applied rewrites42.0%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites39.3%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3278.0
Applied rewrites78.0%
Taylor expanded in maxCos around inf
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-/.f3278.0
Applied rewrites78.0%
(FPCore (ux uy maxCos)
:precision binary32
(let* ((t_0 (+ (- 1.0 ux) (* ux maxCos))))
(if (<= (* t_0 t_0) 0.9996100068092346)
(* (* (PI) (* 2.0 uy)) (sqrt (- 1.0 (* t_0 (- 1.0 ux)))))
(* 2.0 (* (* uy (PI)) (sqrt (fma -2.0 (* maxCos ux) (* 2.0 ux))))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) + ux \cdot maxCos\\
\mathbf{if}\;t\_0 \cdot t\_0 \leq 0.9996100068092346:\\
\;\;\;\;\left(\mathsf{PI}\left(\right) \cdot \left(2 \cdot uy\right)\right) \cdot \sqrt{1 - t\_0 \cdot \left(1 - ux\right)}\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(\left(uy \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\mathsf{fma}\left(-2, maxCos \cdot ux, 2 \cdot ux\right)}\right)\\
\end{array}
\end{array}
if (*.f32 (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos)) (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos))) < 0.999610007Initial program 89.6%
Taylor expanded in uy around 0
associate-*r*N/A
*-commutativeN/A
*-commutativeN/A
lower-*.f32N/A
lift-PI.f32N/A
*-commutativeN/A
lower-*.f3276.2
Applied rewrites76.2%
Taylor expanded in maxCos around 0
flip--N/A
metadata-evalN/A
lift--.f3272.0
Applied rewrites72.0%
if 0.999610007 < (*.f32 (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos)) (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos))) Initial program 41.9%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3242.0
Applied rewrites42.0%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites39.3%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3278.0
Applied rewrites78.0%
Taylor expanded in maxCos around 0
lower-fma.f32N/A
lift-*.f32N/A
lower-*.f3278.0
Applied rewrites78.0%
Final simplification75.5%
(FPCore (ux uy maxCos)
:precision binary32
(let* ((t_0 (* uy (PI))) (t_1 (+ (- 1.0 ux) (* ux maxCos))))
(if (<= (* t_1 t_1) 0.9996100068092346)
(* 2.0 (* t_0 (sqrt (- 1.0 (* (- (+ 1.0 (* maxCos ux)) ux) (- 1.0 ux))))))
(* 2.0 (* t_0 (sqrt (fma -2.0 (* maxCos ux) (* 2.0 ux))))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := uy \cdot \mathsf{PI}\left(\right)\\
t_1 := \left(1 - ux\right) + ux \cdot maxCos\\
\mathbf{if}\;t\_1 \cdot t\_1 \leq 0.9996100068092346:\\
\;\;\;\;2 \cdot \left(t\_0 \cdot \sqrt{1 - \left(\left(1 + maxCos \cdot ux\right) - ux\right) \cdot \left(1 - ux\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;2 \cdot \left(t\_0 \cdot \sqrt{\mathsf{fma}\left(-2, maxCos \cdot ux, 2 \cdot ux\right)}\right)\\
\end{array}
\end{array}
if (*.f32 (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos)) (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos))) < 0.999610007Initial program 89.6%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3289.2
Applied rewrites89.2%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites76.3%
Taylor expanded in maxCos around 0
sub-divN/A
metadata-evalN/A
pow2N/A
flip--N/A
lower--.f3272.0
Applied rewrites72.0%
if 0.999610007 < (*.f32 (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos)) (+.f32 (-.f32 #s(literal 1 binary32) ux) (*.f32 ux maxCos))) Initial program 41.9%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3242.0
Applied rewrites42.0%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites39.3%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3278.0
Applied rewrites78.0%
Taylor expanded in maxCos around 0
lower-fma.f32N/A
lift-*.f32N/A
lower-*.f3278.0
Applied rewrites78.0%
(FPCore (ux uy maxCos)
:precision binary32
(let* ((t_0 (* uy (PI))) (t_1 (fma maxCos ux (- 1.0 ux))))
(if (<= ux 0.00019500000053085387)
(* 2.0 (* t_0 (sqrt (* maxCos (fma -2.0 ux (* 2.0 (/ ux maxCos)))))))
(* (* 2.0 t_0) (sqrt (- 1.0 (* t_1 t_1)))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := uy \cdot \mathsf{PI}\left(\right)\\
t_1 := \mathsf{fma}\left(maxCos, ux, 1 - ux\right)\\
\mathbf{if}\;ux \leq 0.00019500000053085387:\\
\;\;\;\;2 \cdot \left(t\_0 \cdot \sqrt{maxCos \cdot \mathsf{fma}\left(-2, ux, 2 \cdot \frac{ux}{maxCos}\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(2 \cdot t\_0\right) \cdot \sqrt{1 - t\_1 \cdot t\_1}\\
\end{array}
\end{array}
if ux < 1.95000001e-4Initial program 41.9%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3242.0
Applied rewrites42.0%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites39.3%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3278.0
Applied rewrites78.0%
Taylor expanded in maxCos around inf
lower-*.f32N/A
lower-fma.f32N/A
lower-*.f32N/A
lower-/.f3278.0
Applied rewrites78.0%
if 1.95000001e-4 < ux Initial program 89.6%
lift-+.f32N/A
lift--.f32N/A
+-commutativeN/A
lift-*.f32N/A
*-commutativeN/A
lower-fma.f32N/A
lift--.f3289.6
lift-+.f32N/A
lift--.f32N/A
+-commutativeN/A
lift-*.f32N/A
*-commutativeN/A
lower-fma.f32N/A
lift--.f3289.6
Applied rewrites89.6%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f3276.2
Applied rewrites76.2%
(FPCore (ux uy maxCos)
:precision binary32
(let* ((t_0 (fma maxCos ux (- 1.0 ux))) (t_1 (* uy (PI))))
(if (<= ux 0.00019500000053085387)
(* 2.0 (* t_1 (sqrt (fma -2.0 (* maxCos ux) (* 2.0 ux)))))
(* (* 2.0 t_1) (sqrt (- 1.0 (* t_0 t_0)))))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \mathsf{fma}\left(maxCos, ux, 1 - ux\right)\\
t_1 := uy \cdot \mathsf{PI}\left(\right)\\
\mathbf{if}\;ux \leq 0.00019500000053085387:\\
\;\;\;\;2 \cdot \left(t\_1 \cdot \sqrt{\mathsf{fma}\left(-2, maxCos \cdot ux, 2 \cdot ux\right)}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(2 \cdot t\_1\right) \cdot \sqrt{1 - t\_0 \cdot t\_0}\\
\end{array}
\end{array}
if ux < 1.95000001e-4Initial program 41.9%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3242.0
Applied rewrites42.0%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites39.3%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3278.0
Applied rewrites78.0%
Taylor expanded in maxCos around 0
lower-fma.f32N/A
lift-*.f32N/A
lower-*.f3278.0
Applied rewrites78.0%
if 1.95000001e-4 < ux Initial program 89.6%
lift-+.f32N/A
lift--.f32N/A
+-commutativeN/A
lift-*.f32N/A
*-commutativeN/A
lower-fma.f32N/A
lift--.f3289.6
lift-+.f32N/A
lift--.f32N/A
+-commutativeN/A
lift-*.f32N/A
*-commutativeN/A
lower-fma.f32N/A
lift--.f3289.6
Applied rewrites89.6%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f3276.2
Applied rewrites76.2%
(FPCore (ux uy maxCos)
:precision binary32
(*
(* 2.0 (* uy (PI)))
(sqrt
(*
(- (fma (- ux) (* (- maxCos 1.0) (- maxCos 1.0)) 2.0) (* maxCos 2.0))
ux))))\begin{array}{l}
\\
\left(2 \cdot \left(uy \cdot \mathsf{PI}\left(\right)\right)\right) \cdot \sqrt{\left(\mathsf{fma}\left(-ux, \left(maxCos - 1\right) \cdot \left(maxCos - 1\right), 2\right) - maxCos \cdot 2\right) \cdot ux}
\end{array}
Initial program 61.7%
Taylor expanded in ux around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
+-commutativeN/A
associate-*r*N/A
mul-1-negN/A
lower-fma.f32N/A
lower-neg.f32N/A
lower-pow.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f3298.6
Applied rewrites98.6%
lift--.f32N/A
lift-pow.f32N/A
unpow2N/A
lower-*.f32N/A
lift--.f32N/A
lift--.f3298.6
Applied rewrites98.6%
Taylor expanded in uy around 0
lower-*.f32N/A
lift-*.f32N/A
lift-PI.f3282.4
Applied rewrites82.4%
(FPCore (ux uy maxCos) :precision binary32 (* 2.0 (* (* uy (PI)) (sqrt (fma -2.0 (* maxCos ux) (* 2.0 ux))))))
\begin{array}{l}
\\
2 \cdot \left(\left(uy \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{\mathsf{fma}\left(-2, maxCos \cdot ux, 2 \cdot ux\right)}\right)
\end{array}
Initial program 61.7%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3261.5
Applied rewrites61.5%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites54.6%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3264.9
Applied rewrites64.9%
Taylor expanded in maxCos around 0
lower-fma.f32N/A
lift-*.f32N/A
lower-*.f3264.9
Applied rewrites64.9%
(FPCore (ux uy maxCos) :precision binary32 (* 2.0 (* (* uy (PI)) (sqrt (* ux (- 2.0 (* 2.0 maxCos)))))))
\begin{array}{l}
\\
2 \cdot \left(\left(uy \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{ux \cdot \left(2 - 2 \cdot maxCos\right)}\right)
\end{array}
Initial program 61.7%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3261.5
Applied rewrites61.5%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites54.6%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3264.9
Applied rewrites64.9%
(FPCore (ux uy maxCos) :precision binary32 (* 2.0 (* (* uy (PI)) (sqrt (* ux 2.0)))))
\begin{array}{l}
\\
2 \cdot \left(\left(uy \cdot \mathsf{PI}\left(\right)\right) \cdot \sqrt{ux \cdot 2}\right)
\end{array}
Initial program 61.7%
lift--.f32N/A
flip--N/A
lower-/.f32N/A
metadata-evalN/A
unpow2N/A
lower--.f32N/A
unpow2N/A
lower-*.f32N/A
lower-+.f3261.5
Applied rewrites61.5%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lift-PI.f32N/A
lower-sqrt.f32N/A
lower--.f32N/A
Applied rewrites54.6%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3264.9
Applied rewrites64.9%
Taylor expanded in maxCos around 0
Applied rewrites62.8%
(FPCore (ux uy maxCos) :precision binary32 (* (* (PI) (* 2.0 uy)) (sqrt (- 1.0 1.0))))
\begin{array}{l}
\\
\left(\mathsf{PI}\left(\right) \cdot \left(2 \cdot uy\right)\right) \cdot \sqrt{1 - 1}
\end{array}
Initial program 61.7%
Taylor expanded in uy around 0
associate-*r*N/A
*-commutativeN/A
*-commutativeN/A
lower-*.f32N/A
lift-PI.f32N/A
*-commutativeN/A
lower-*.f3254.5
Applied rewrites54.5%
Taylor expanded in ux around 0
flip--7.1
metadata-eval7.1
Applied rewrites7.1%
herbie shell --seed 2025051
(FPCore (ux uy maxCos)
:name "UniformSampleCone, y"
:precision binary32
:pre (and (and (and (<= 2.328306437e-10 ux) (<= ux 1.0)) (and (<= 2.328306437e-10 uy) (<= uy 1.0))) (and (<= 0.0 maxCos) (<= maxCos 1.0)))
(* (sin (* (* uy 2.0) (PI))) (sqrt (- 1.0 (* (+ (- 1.0 ux) (* ux maxCos)) (+ (- 1.0 ux) (* ux maxCos)))))))