
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (- (log (- 1.0 u1)))) (cos (* (* 2.0 (PI)) u2))))
\begin{array}{l}
\\
\sqrt{-\log \left(1 - u1\right)} \cdot \cos \left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot u2\right)
\end{array}
Sampling outcomes in binary32 precision:
Herbie found 19 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (- (log (- 1.0 u1)))) (cos (* (* 2.0 (PI)) u2))))
\begin{array}{l}
\\
\sqrt{-\log \left(1 - u1\right)} \cdot \cos \left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot u2\right)
\end{array}
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (- (log1p (- u1)))) (sin (* (PI) (fma -2.0 u2 0.5)))))
\begin{array}{l}
\\
\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \sin \left(\mathsf{PI}\left(\right) \cdot \mathsf{fma}\left(-2, u2, 0.5\right)\right)
\end{array}
Initial program 59.2%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.2
Applied rewrites99.2%
lift-cos.f32N/A
cos-neg-revN/A
sin-+PI/2-revN/A
lower-sin.f32N/A
lift-*.f32N/A
lift-*.f32N/A
lift-PI.f32N/A
lift-PI.f32N/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-fma.f32N/A
metadata-evalN/A
*-commutativeN/A
lower-*.f32N/A
lift-PI.f32N/A
lower-/.f3299.2
Applied rewrites99.2%
Taylor expanded in u2 around 0
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f32N/A
lower-PI.f32N/A
lower-fma.f3299.3
Applied rewrites99.3%
(FPCore (cosTheta_i u1 u2)
:precision binary32
(let* ((t_0 (cos (* (* 2.0 (PI)) u2))))
(if (<= (* (sqrt (- (log (- 1.0 u1)))) t_0) 0.1550000011920929)
(*
(sqrt (fma (* (fma (fma 0.25 u1 0.3333333333333333) u1 0.5) u1) u1 u1))
t_0)
(*
(sqrt (- (log1p (- u1))))
(fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0)))))\begin{array}{l}
\\
\begin{array}{l}
t_0 := \cos \left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot u2\right)\\
\mathbf{if}\;\sqrt{-\log \left(1 - u1\right)} \cdot t\_0 \leq 0.1550000011920929:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.25, u1, 0.3333333333333333\right), u1, 0.5\right) \cdot u1, u1, u1\right)} \cdot t\_0\\
\mathbf{else}:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)\\
\end{array}
\end{array}
if (*.f32 (sqrt.f32 (neg.f32 (log.f32 (-.f32 #s(literal 1 binary32) u1)))) (cos.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) u2))) < 0.155000001Initial program 50.1%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3298.7
Applied rewrites98.7%
Applied rewrites99.0%
if 0.155000001 < (*.f32 (sqrt.f32 (neg.f32 (log.f32 (-.f32 #s(literal 1 binary32) u1)))) (cos.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) u2))) Initial program 96.6%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.4
Applied rewrites99.4%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3296.5
Applied rewrites96.5%
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (- (log1p (- u1)))) (cos (* (* 2.0 (PI)) u2))))
\begin{array}{l}
\\
\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \cos \left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot u2\right)
\end{array}
Initial program 59.2%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.2
Applied rewrites99.2%
(FPCore (cosTheta_i u1 u2)
:precision binary32
(if (<= u2 0.009499999694526196)
(* (sqrt (- (log1p (- u1)))) (fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0))
(*
(sqrt (* (fma (fma (fma 0.25 u1 0.3333333333333333) u1 0.5) u1 1.0) u1))
(cos (* (* 2.0 (PI)) u2)))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 0.009499999694526196:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.25, u1, 0.3333333333333333\right), u1, 0.5\right), u1, 1\right) \cdot u1} \cdot \cos \left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot u2\right)\\
\end{array}
\end{array}
if u2 < 0.00949999969Initial program 60.8%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.5
Applied rewrites99.5%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3299.4
Applied rewrites99.4%
if 0.00949999969 < u2 Initial program 52.0%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3293.4
Applied rewrites93.4%
(FPCore (cosTheta_i u1 u2)
:precision binary32
(if (<= u2 0.009499999694526196)
(* (sqrt (- (log1p (- u1)))) (fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0))
(*
(sqrt (* (fma (fma 0.3333333333333333 u1 0.5) u1 1.0) u1))
(sin (* (PI) (fma -2.0 u2 0.5))))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 0.009499999694526196:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(0.3333333333333333, u1, 0.5\right), u1, 1\right) \cdot u1} \cdot \sin \left(\mathsf{PI}\left(\right) \cdot \mathsf{fma}\left(-2, u2, 0.5\right)\right)\\
\end{array}
\end{array}
if u2 < 0.00949999969Initial program 60.8%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.5
Applied rewrites99.5%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3299.4
Applied rewrites99.4%
if 0.00949999969 < u2 Initial program 52.0%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3297.5
Applied rewrites97.5%
lift-cos.f32N/A
cos-neg-revN/A
sin-+PI/2-revN/A
lower-sin.f32N/A
lift-*.f32N/A
lift-*.f32N/A
lift-PI.f32N/A
lift-PI.f32N/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-fma.f32N/A
metadata-evalN/A
*-commutativeN/A
lower-*.f32N/A
lift-PI.f32N/A
lower-/.f3297.6
Applied rewrites97.6%
Taylor expanded in u2 around 0
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f32N/A
lower-PI.f32N/A
lower-fma.f3298.2
Applied rewrites98.2%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3292.7
Applied rewrites92.7%
(FPCore (cosTheta_i u1 u2)
:precision binary32
(if (<= u2 0.009499999694526196)
(* (sqrt (- (log1p (- u1)))) (fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0))
(*
(sqrt (fma (* (fma 0.3333333333333333 u1 0.5) u1) u1 u1))
(cos (* (* 2.0 (PI)) u2)))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 0.009499999694526196:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(0.3333333333333333, u1, 0.5\right) \cdot u1, u1, u1\right)} \cdot \cos \left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot u2\right)\\
\end{array}
\end{array}
if u2 < 0.00949999969Initial program 60.8%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.5
Applied rewrites99.5%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3299.4
Applied rewrites99.4%
if 0.00949999969 < u2 Initial program 52.0%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3292.3
Applied rewrites92.3%
Applied rewrites92.4%
(FPCore (cosTheta_i u1 u2)
:precision binary32
(if (<= u2 0.009499999694526196)
(* (sqrt (- (log1p (- u1)))) (fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0))
(*
(sqrt (* (fma (fma 0.3333333333333333 u1 0.5) u1 1.0) u1))
(cos (* (* 2.0 (PI)) u2)))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 0.009499999694526196:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(0.3333333333333333, u1, 0.5\right), u1, 1\right) \cdot u1} \cdot \cos \left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot u2\right)\\
\end{array}
\end{array}
if u2 < 0.00949999969Initial program 60.8%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.5
Applied rewrites99.5%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3299.4
Applied rewrites99.4%
if 0.00949999969 < u2 Initial program 52.0%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3292.3
Applied rewrites92.3%
(FPCore (cosTheta_i u1 u2) :precision binary32 (if (<= u2 0.013799999840557575) (* (sqrt (- (log1p (- u1)))) (fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0)) (* (sqrt (* (fma 0.5 u1 1.0) u1)) (sin (* (PI) (fma -2.0 u2 0.5))))))
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 0.013799999840557575:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(0.5, u1, 1\right) \cdot u1} \cdot \sin \left(\mathsf{PI}\left(\right) \cdot \mathsf{fma}\left(-2, u2, 0.5\right)\right)\\
\end{array}
\end{array}
if u2 < 0.0137999998Initial program 60.7%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.5
Applied rewrites99.5%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3299.1
Applied rewrites99.1%
if 0.0137999998 < u2 Initial program 51.4%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3297.2
Applied rewrites97.2%
lift-cos.f32N/A
cos-neg-revN/A
sin-+PI/2-revN/A
lower-sin.f32N/A
lift-*.f32N/A
lift-*.f32N/A
lift-PI.f32N/A
lift-PI.f32N/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-fma.f32N/A
metadata-evalN/A
*-commutativeN/A
lower-*.f32N/A
lift-PI.f32N/A
lower-/.f3297.3
Applied rewrites97.3%
Taylor expanded in u2 around 0
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f32N/A
lower-PI.f32N/A
lower-fma.f3298.0
Applied rewrites98.0%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
lower-fma.f3291.1
Applied rewrites91.1%
(FPCore (cosTheta_i u1 u2) :precision binary32 (if (<= u2 0.00024199999461416155) (* (sqrt (- (log1p (- u1)))) 1.0) (* (sqrt (* (fma 0.5 u1 1.0) u1)) (sin (* (PI) (fma -2.0 u2 0.5))))))
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 0.00024199999461416155:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot 1\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(0.5, u1, 1\right) \cdot u1} \cdot \sin \left(\mathsf{PI}\left(\right) \cdot \mathsf{fma}\left(-2, u2, 0.5\right)\right)\\
\end{array}
\end{array}
if u2 < 2.41999995e-4Initial program 58.9%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.6
Applied rewrites99.6%
Taylor expanded in u2 around 0
Applied rewrites98.9%
if 2.41999995e-4 < u2 Initial program 59.7%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3298.4
Applied rewrites98.4%
lift-cos.f32N/A
cos-neg-revN/A
sin-+PI/2-revN/A
lower-sin.f32N/A
lift-*.f32N/A
lift-*.f32N/A
lift-PI.f32N/A
lift-PI.f32N/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-fma.f32N/A
metadata-evalN/A
*-commutativeN/A
lower-*.f32N/A
lift-PI.f32N/A
lower-/.f3298.4
Applied rewrites98.4%
Taylor expanded in u2 around 0
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f32N/A
lower-PI.f32N/A
lower-fma.f3298.7
Applied rewrites98.7%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
lower-fma.f3287.6
Applied rewrites87.6%
(FPCore (cosTheta_i u1 u2)
:precision binary32
(if (<= u2 9.999999747378752e-5)
(* (sqrt (- (log1p (- u1)))) 1.0)
(if (<= u2 0.010999999940395355)
(*
(sqrt (* (fma (fma (fma 0.25 u1 0.3333333333333333) u1 0.5) u1 1.0) u1))
(fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0))
(* (sqrt (- (- u1))) (sin (* (PI) (fma -2.0 u2 0.5)))))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 9.999999747378752 \cdot 10^{-5}:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot 1\\
\mathbf{elif}\;u2 \leq 0.010999999940395355:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.25, u1, 0.3333333333333333\right), u1, 0.5\right), u1, 1\right) \cdot u1} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt{-\left(-u1\right)} \cdot \sin \left(\mathsf{PI}\left(\right) \cdot \mathsf{fma}\left(-2, u2, 0.5\right)\right)\\
\end{array}
\end{array}
if u2 < 9.99999975e-5Initial program 58.8%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.6
Applied rewrites99.6%
Taylor expanded in u2 around 0
Applied rewrites99.6%
if 9.99999975e-5 < u2 < 0.0109999999Initial program 66.3%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.3
Applied rewrites99.3%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3298.4
Applied rewrites98.4%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3293.5
Applied rewrites93.5%
if 0.0109999999 < u2 Initial program 51.2%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3297.4
Applied rewrites97.4%
lift-cos.f32N/A
cos-neg-revN/A
sin-+PI/2-revN/A
lower-sin.f32N/A
lift-*.f32N/A
lift-*.f32N/A
lift-PI.f32N/A
lift-PI.f32N/A
associate-*l*N/A
distribute-lft-neg-inN/A
lower-fma.f32N/A
metadata-evalN/A
*-commutativeN/A
lower-*.f32N/A
lift-PI.f32N/A
lower-/.f3297.5
Applied rewrites97.5%
Taylor expanded in u2 around 0
associate-*r*N/A
distribute-rgt-outN/A
lower-*.f32N/A
lower-PI.f32N/A
lower-fma.f3298.1
Applied rewrites98.1%
Taylor expanded in u1 around 0
mul-1-negN/A
lower-neg.f3280.5
Applied rewrites80.5%
(FPCore (cosTheta_i u1 u2) :precision binary32 (if (<= u2 0.00024199999461416155) (* (sqrt (- (log1p (- u1)))) 1.0) (* (sqrt (* (fma 0.5 u1 1.0) u1)) (cos (* (* 2.0 (PI)) u2)))))
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 0.00024199999461416155:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot 1\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(0.5, u1, 1\right) \cdot u1} \cdot \cos \left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot u2\right)\\
\end{array}
\end{array}
if u2 < 2.41999995e-4Initial program 58.9%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.6
Applied rewrites99.6%
Taylor expanded in u2 around 0
Applied rewrites98.9%
if 2.41999995e-4 < u2 Initial program 59.7%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
lower-fma.f3287.5
Applied rewrites87.5%
(FPCore (cosTheta_i u1 u2)
:precision binary32
(if (<= u2 9.999999747378752e-5)
(* (sqrt (- (log1p (- u1)))) 1.0)
(if (<= u2 0.010999999940395355)
(*
(sqrt (* (fma (fma (fma 0.25 u1 0.3333333333333333) u1 0.5) u1 1.0) u1))
(fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0))
(* (sqrt u1) (cos (* (* 2.0 (PI)) u2))))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 9.999999747378752 \cdot 10^{-5}:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot 1\\
\mathbf{elif}\;u2 \leq 0.010999999940395355:\\
\;\;\;\;\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.25, u1, 0.3333333333333333\right), u1, 0.5\right), u1, 1\right) \cdot u1} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;\sqrt{u1} \cdot \cos \left(\left(2 \cdot \mathsf{PI}\left(\right)\right) \cdot u2\right)\\
\end{array}
\end{array}
if u2 < 9.99999975e-5Initial program 58.8%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.6
Applied rewrites99.6%
Taylor expanded in u2 around 0
Applied rewrites99.6%
if 9.99999975e-5 < u2 < 0.0109999999Initial program 66.3%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.3
Applied rewrites99.3%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3298.4
Applied rewrites98.4%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3293.5
Applied rewrites93.5%
if 0.0109999999 < u2 Initial program 51.2%
lift-log.f32N/A
lift--.f32N/A
flip--N/A
log-divN/A
lower--.f32N/A
metadata-evalN/A
fp-cancel-sub-sign-invN/A
lower-log1p.f32N/A
lower-*.f32N/A
lower-neg.f32N/A
lower-log1p.f3297.3
Applied rewrites97.3%
Taylor expanded in u1 around 0
lower-sqrt.f3280.1
Applied rewrites80.1%
(FPCore (cosTheta_i u1 u2)
:precision binary32
(if (<= u2 9.999999747378752e-5)
(* (sqrt (- (log1p (- u1)))) 1.0)
(*
(sqrt
(-
(*
(- (* (- (* (- (* -0.25 u1) 0.3333333333333333) u1) 0.5) u1) 1.0)
u1)))
(fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0))))\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;u2 \leq 9.999999747378752 \cdot 10^{-5}:\\
\;\;\;\;\sqrt{-\mathsf{log1p}\left(-u1\right)} \cdot 1\\
\mathbf{else}:\\
\;\;\;\;\sqrt{-\left(\left(\left(-0.25 \cdot u1 - 0.3333333333333333\right) \cdot u1 - 0.5\right) \cdot u1 - 1\right) \cdot u1} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)\\
\end{array}
\end{array}
if u2 < 9.99999975e-5Initial program 58.8%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.6
Applied rewrites99.6%
Taylor expanded in u2 around 0
Applied rewrites99.6%
if 9.99999975e-5 < u2 Initial program 59.8%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3298.5
Applied rewrites98.5%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3277.3
Applied rewrites77.3%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f3274.1
Applied rewrites74.1%
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (* (fma (fma (fma 0.25 u1 0.3333333333333333) u1 0.5) u1 1.0) u1)) (fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0)))
\begin{array}{l}
\\
\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(0.25, u1, 0.3333333333333333\right), u1, 0.5\right), u1, 1\right) \cdot u1} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)
\end{array}
Initial program 59.2%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.2
Applied rewrites99.2%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3290.5
Applied rewrites90.5%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3285.7
Applied rewrites85.7%
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (* (fma (fma 0.3333333333333333 u1 0.5) u1 1.0) u1)) (fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0)))
\begin{array}{l}
\\
\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(0.3333333333333333, u1, 0.5\right), u1, 1\right) \cdot u1} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)
\end{array}
Initial program 59.2%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3291.4
Applied rewrites91.4%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3283.5
Applied rewrites83.5%
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (* (fma 0.5 u1 1.0) u1)) (fma (* -2.0 (* u2 u2)) (* (PI) (PI)) 1.0)))
\begin{array}{l}
\\
\sqrt{\mathsf{fma}\left(0.5, u1, 1\right) \cdot u1} \cdot \mathsf{fma}\left(-2 \cdot \left(u2 \cdot u2\right), \mathsf{PI}\left(\right) \cdot \mathsf{PI}\left(\right), 1\right)
\end{array}
Initial program 59.2%
lift-log.f32N/A
lift--.f32N/A
*-lft-identityN/A
fp-cancel-sub-sign-invN/A
distribute-lft-neg-inN/A
*-lft-identityN/A
lower-log1p.f32N/A
lower-neg.f3299.2
Applied rewrites99.2%
Taylor expanded in u2 around 0
+-commutativeN/A
associate-*r*N/A
lower-fma.f32N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
unpow2N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-PI.f3290.5
Applied rewrites90.5%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
lower-fma.f3279.4
Applied rewrites79.4%
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (fma (* (fma 0.3333333333333333 u1 0.5) u1) u1 u1)) 1.0))
float code(float cosTheta_i, float u1, float u2) {
return sqrtf(fmaf((fmaf(0.3333333333333333f, u1, 0.5f) * u1), u1, u1)) * 1.0f;
}
function code(cosTheta_i, u1, u2) return Float32(sqrt(fma(Float32(fma(Float32(0.3333333333333333), u1, Float32(0.5)) * u1), u1, u1)) * Float32(1.0)) end
\begin{array}{l}
\\
\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(0.3333333333333333, u1, 0.5\right) \cdot u1, u1, u1\right)} \cdot 1
\end{array}
Initial program 59.2%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3291.4
Applied rewrites91.4%
Taylor expanded in u2 around 0
Applied rewrites77.4%
Applied rewrites77.4%
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (* (fma (fma 0.3333333333333333 u1 0.5) u1 1.0) u1)) 1.0))
float code(float cosTheta_i, float u1, float u2) {
return sqrtf((fmaf(fmaf(0.3333333333333333f, u1, 0.5f), u1, 1.0f) * u1)) * 1.0f;
}
function code(cosTheta_i, u1, u2) return Float32(sqrt(Float32(fma(fma(Float32(0.3333333333333333), u1, Float32(0.5)), u1, Float32(1.0)) * u1)) * Float32(1.0)) end
\begin{array}{l}
\\
\sqrt{\mathsf{fma}\left(\mathsf{fma}\left(0.3333333333333333, u1, 0.5\right), u1, 1\right) \cdot u1} \cdot 1
\end{array}
Initial program 59.2%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3291.4
Applied rewrites91.4%
Taylor expanded in u2 around 0
Applied rewrites77.4%
(FPCore (cosTheta_i u1 u2) :precision binary32 (* (sqrt (fma (* 0.5 u1) u1 u1)) 1.0))
float code(float cosTheta_i, float u1, float u2) {
return sqrtf(fmaf((0.5f * u1), u1, u1)) * 1.0f;
}
function code(cosTheta_i, u1, u2) return Float32(sqrt(fma(Float32(Float32(0.5) * u1), u1, u1)) * Float32(1.0)) end
\begin{array}{l}
\\
\sqrt{\mathsf{fma}\left(0.5 \cdot u1, u1, u1\right)} \cdot 1
\end{array}
Initial program 59.2%
Taylor expanded in u1 around 0
*-commutativeN/A
lower-*.f32N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f32N/A
+-commutativeN/A
lower-fma.f3291.4
Applied rewrites91.4%
Taylor expanded in u2 around 0
Applied rewrites77.4%
Applied rewrites77.4%
Taylor expanded in u1 around 0
Applied rewrites74.3%
herbie shell --seed 2024364
(FPCore (cosTheta_i u1 u2)
:name "Beckmann Sample, near normal, slope_x"
:precision binary32
:pre (and (and (and (> cosTheta_i 0.9999) (<= cosTheta_i 1.0)) (and (<= 2.328306437e-10 u1) (<= u1 1.0))) (and (<= 2.328306437e-10 u2) (<= u2 1.0)))
(* (sqrt (- (log (- 1.0 u1)))) (cos (* (* 2.0 (PI)) u2))))