
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (* (- 1.0 ux) maxCos) ux))
(t_1 (sqrt (- 1.0 (* t_0 t_0))))
(t_2 (* (* uy 2.0) PI)))
(+ (+ (* (* (cos t_2) t_1) xi) (* (* (sin t_2) t_1) yi)) (* t_0 zi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = ((1.0f - ux) * maxCos) * ux;
float t_1 = sqrtf((1.0f - (t_0 * t_0)));
float t_2 = (uy * 2.0f) * ((float) M_PI);
return (((cosf(t_2) * t_1) * xi) + ((sinf(t_2) * t_1) * yi)) + (t_0 * zi);
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(Float32(Float32(1.0) - ux) * maxCos) * ux) t_1 = sqrt(Float32(Float32(1.0) - Float32(t_0 * t_0))) t_2 = Float32(Float32(uy * Float32(2.0)) * Float32(pi)) return Float32(Float32(Float32(Float32(cos(t_2) * t_1) * xi) + Float32(Float32(sin(t_2) * t_1) * yi)) + Float32(t_0 * zi)) end
function tmp = code(xi, yi, zi, ux, uy, maxCos) t_0 = ((single(1.0) - ux) * maxCos) * ux; t_1 = sqrt((single(1.0) - (t_0 * t_0))); t_2 = (uy * single(2.0)) * single(pi); tmp = (((cos(t_2) * t_1) * xi) + ((sin(t_2) * t_1) * yi)) + (t_0 * zi); end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\left(1 - ux\right) \cdot maxCos\right) \cdot ux\\
t_1 := \sqrt{1 - t\_0 \cdot t\_0}\\
t_2 := \left(uy \cdot 2\right) \cdot \pi\\
\left(\left(\cos t\_2 \cdot t\_1\right) \cdot xi + \left(\sin t\_2 \cdot t\_1\right) \cdot yi\right) + t\_0 \cdot zi
\end{array}
\end{array}
Sampling outcomes in binary32 precision:
Herbie found 21 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (* (- 1.0 ux) maxCos) ux))
(t_1 (sqrt (- 1.0 (* t_0 t_0))))
(t_2 (* (* uy 2.0) PI)))
(+ (+ (* (* (cos t_2) t_1) xi) (* (* (sin t_2) t_1) yi)) (* t_0 zi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = ((1.0f - ux) * maxCos) * ux;
float t_1 = sqrtf((1.0f - (t_0 * t_0)));
float t_2 = (uy * 2.0f) * ((float) M_PI);
return (((cosf(t_2) * t_1) * xi) + ((sinf(t_2) * t_1) * yi)) + (t_0 * zi);
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(Float32(Float32(1.0) - ux) * maxCos) * ux) t_1 = sqrt(Float32(Float32(1.0) - Float32(t_0 * t_0))) t_2 = Float32(Float32(uy * Float32(2.0)) * Float32(pi)) return Float32(Float32(Float32(Float32(cos(t_2) * t_1) * xi) + Float32(Float32(sin(t_2) * t_1) * yi)) + Float32(t_0 * zi)) end
function tmp = code(xi, yi, zi, ux, uy, maxCos) t_0 = ((single(1.0) - ux) * maxCos) * ux; t_1 = sqrt((single(1.0) - (t_0 * t_0))); t_2 = (uy * single(2.0)) * single(pi); tmp = (((cos(t_2) * t_1) * xi) + ((sin(t_2) * t_1) * yi)) + (t_0 * zi); end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(\left(1 - ux\right) \cdot maxCos\right) \cdot ux\\
t_1 := \sqrt{1 - t\_0 \cdot t\_0}\\
t_2 := \left(uy \cdot 2\right) \cdot \pi\\
\left(\left(\cos t\_2 \cdot t\_1\right) \cdot xi + \left(\sin t\_2 \cdot t\_1\right) \cdot yi\right) + t\_0 \cdot zi
\end{array}
\end{array}
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* maxCos (- 1.0 ux)))
(t_1 (sqrt (- 1.0 (* (* (* t_0 ux) ux) t_0))))
(t_2 (* (* uy 2.0) PI)))
(fma
(* (- 1.0 ux) zi)
(* maxCos ux)
(fma (* t_1 yi) (sin t_2) (* (cos t_2) (* xi t_1))))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = maxCos * (1.0f - ux);
float t_1 = sqrtf((1.0f - (((t_0 * ux) * ux) * t_0)));
float t_2 = (uy * 2.0f) * ((float) M_PI);
return fmaf(((1.0f - ux) * zi), (maxCos * ux), fmaf((t_1 * yi), sinf(t_2), (cosf(t_2) * (xi * t_1))));
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(maxCos * Float32(Float32(1.0) - ux)) t_1 = sqrt(Float32(Float32(1.0) - Float32(Float32(Float32(t_0 * ux) * ux) * t_0))) t_2 = Float32(Float32(uy * Float32(2.0)) * Float32(pi)) return fma(Float32(Float32(Float32(1.0) - ux) * zi), Float32(maxCos * ux), fma(Float32(t_1 * yi), sin(t_2), Float32(cos(t_2) * Float32(xi * t_1)))) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := maxCos \cdot \left(1 - ux\right)\\
t_1 := \sqrt{1 - \left(\left(t\_0 \cdot ux\right) \cdot ux\right) \cdot t\_0}\\
t_2 := \left(uy \cdot 2\right) \cdot \pi\\
\mathsf{fma}\left(\left(1 - ux\right) \cdot zi, maxCos \cdot ux, \mathsf{fma}\left(t\_1 \cdot yi, \sin t\_2, \cos t\_2 \cdot \left(xi \cdot t\_1\right)\right)\right)
\end{array}
\end{array}
Initial program 98.9%
lift-+.f32N/A
+-commutativeN/A
lift-*.f32N/A
*-commutativeN/A
lift-*.f32N/A
lift-*.f32N/A
associate-*l*N/A
associate-*r*N/A
Applied rewrites99.0%
Final simplification99.0%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (* uy 2.0) PI)) (t_1 (* (- 1.0 ux) ux)))
(-
(*
(*
(fma (* (sin t_0) yi) (/ 1.0 xi) (cos t_0))
(sqrt (- 1.0 (* (* maxCos maxCos) (* t_1 t_1)))))
xi)
(* (* (* (- ux 1.0) maxCos) ux) zi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (uy * 2.0f) * ((float) M_PI);
float t_1 = (1.0f - ux) * ux;
return ((fmaf((sinf(t_0) * yi), (1.0f / xi), cosf(t_0)) * sqrtf((1.0f - ((maxCos * maxCos) * (t_1 * t_1))))) * xi) - ((((ux - 1.0f) * maxCos) * ux) * zi);
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(uy * Float32(2.0)) * Float32(pi)) t_1 = Float32(Float32(Float32(1.0) - ux) * ux) return Float32(Float32(Float32(fma(Float32(sin(t_0) * yi), Float32(Float32(1.0) / xi), cos(t_0)) * sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_1 * t_1))))) * xi) - Float32(Float32(Float32(Float32(ux - Float32(1.0)) * maxCos) * ux) * zi)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(uy \cdot 2\right) \cdot \pi\\
t_1 := \left(1 - ux\right) \cdot ux\\
\left(\mathsf{fma}\left(\sin t\_0 \cdot yi, \frac{1}{xi}, \cos t\_0\right) \cdot \sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_1 \cdot t\_1\right)}\right) \cdot xi - \left(\left(\left(ux - 1\right) \cdot maxCos\right) \cdot ux\right) \cdot zi
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in xi around inf
*-commutativeN/A
lower-*.f32N/A
Applied rewrites98.0%
Applied rewrites98.7%
Final simplification98.7%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (* uy PI) 2.0)))
(-
(fma (cos t_0) xi (* (sin t_0) yi))
(* (* (* (- ux 1.0) maxCos) ux) zi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (uy * ((float) M_PI)) * 2.0f;
return fmaf(cosf(t_0), xi, (sinf(t_0) * yi)) - ((((ux - 1.0f) * maxCos) * ux) * zi);
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(uy * Float32(pi)) * Float32(2.0)) return Float32(fma(cos(t_0), xi, Float32(sin(t_0) * yi)) - Float32(Float32(Float32(Float32(ux - Float32(1.0)) * maxCos) * ux) * zi)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(uy \cdot \pi\right) \cdot 2\\
\mathsf{fma}\left(\cos t\_0, xi, \sin t\_0 \cdot yi\right) - \left(\left(\left(ux - 1\right) \cdot maxCos\right) \cdot ux\right) \cdot zi
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in maxCos around 0
*-commutativeN/A
lower-fma.f32N/A
lower-cos.f32N/A
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-PI.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-sin.f32N/A
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-PI.f3298.7
Applied rewrites98.7%
Final simplification98.7%
(FPCore (xi yi zi ux uy maxCos) :precision binary32 (let* ((t_0 (* (* uy PI) 2.0))) (fma (cos t_0) xi (fma (sin t_0) yi (* (* (* (- 1.0 ux) zi) ux) maxCos)))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (uy * ((float) M_PI)) * 2.0f;
return fmaf(cosf(t_0), xi, fmaf(sinf(t_0), yi, ((((1.0f - ux) * zi) * ux) * maxCos)));
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(uy * Float32(pi)) * Float32(2.0)) return fma(cos(t_0), xi, fma(sin(t_0), yi, Float32(Float32(Float32(Float32(Float32(1.0) - ux) * zi) * ux) * maxCos))) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(uy \cdot \pi\right) \cdot 2\\
\mathsf{fma}\left(\cos t\_0, xi, \mathsf{fma}\left(\sin t\_0, yi, \left(\left(\left(1 - ux\right) \cdot zi\right) \cdot ux\right) \cdot maxCos\right)\right)
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in maxCos around 0
+-commutativeN/A
associate-+l+N/A
*-commutativeN/A
lower-fma.f32N/A
lower-cos.f32N/A
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-PI.f32N/A
*-commutativeN/A
lower-fma.f32N/A
Applied rewrites98.7%
Final simplification98.7%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (* uy PI) 2.0))
(t_1 (* (- 1.0 ux) ux))
(t_2 (sqrt (- 1.0 (* (* maxCos maxCos) (* t_1 t_1))))))
(if (<= (* uy 2.0) 0.019500000402331352)
(-
(fma
(fma
(*
(fma
-1.3333333333333333
(* (* (* (* PI PI) PI) yi) uy)
(* (* (* PI PI) xi) -2.0))
t_2)
uy
(* (* (* PI yi) 2.0) t_2))
uy
(* t_2 xi))
(* (* (* (- ux 1.0) maxCos) ux) zi))
(fma (cos t_0) xi (* (sin t_0) yi)))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (uy * ((float) M_PI)) * 2.0f;
float t_1 = (1.0f - ux) * ux;
float t_2 = sqrtf((1.0f - ((maxCos * maxCos) * (t_1 * t_1))));
float tmp;
if ((uy * 2.0f) <= 0.019500000402331352f) {
tmp = fmaf(fmaf((fmaf(-1.3333333333333333f, ((((((float) M_PI) * ((float) M_PI)) * ((float) M_PI)) * yi) * uy), (((((float) M_PI) * ((float) M_PI)) * xi) * -2.0f)) * t_2), uy, (((((float) M_PI) * yi) * 2.0f) * t_2)), uy, (t_2 * xi)) - ((((ux - 1.0f) * maxCos) * ux) * zi);
} else {
tmp = fmaf(cosf(t_0), xi, (sinf(t_0) * yi));
}
return tmp;
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(uy * Float32(pi)) * Float32(2.0)) t_1 = Float32(Float32(Float32(1.0) - ux) * ux) t_2 = sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_1 * t_1)))) tmp = Float32(0.0) if (Float32(uy * Float32(2.0)) <= Float32(0.019500000402331352)) tmp = Float32(fma(fma(Float32(fma(Float32(-1.3333333333333333), Float32(Float32(Float32(Float32(Float32(pi) * Float32(pi)) * Float32(pi)) * yi) * uy), Float32(Float32(Float32(Float32(pi) * Float32(pi)) * xi) * Float32(-2.0))) * t_2), uy, Float32(Float32(Float32(Float32(pi) * yi) * Float32(2.0)) * t_2)), uy, Float32(t_2 * xi)) - Float32(Float32(Float32(Float32(ux - Float32(1.0)) * maxCos) * ux) * zi)); else tmp = fma(cos(t_0), xi, Float32(sin(t_0) * yi)); end return tmp end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(uy \cdot \pi\right) \cdot 2\\
t_1 := \left(1 - ux\right) \cdot ux\\
t_2 := \sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_1 \cdot t\_1\right)}\\
\mathbf{if}\;uy \cdot 2 \leq 0.019500000402331352:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(-1.3333333333333333, \left(\left(\left(\pi \cdot \pi\right) \cdot \pi\right) \cdot yi\right) \cdot uy, \left(\left(\pi \cdot \pi\right) \cdot xi\right) \cdot -2\right) \cdot t\_2, uy, \left(\left(\pi \cdot yi\right) \cdot 2\right) \cdot t\_2\right), uy, t\_2 \cdot xi\right) - \left(\left(\left(ux - 1\right) \cdot maxCos\right) \cdot ux\right) \cdot zi\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\cos t\_0, xi, \sin t\_0 \cdot yi\right)\\
\end{array}
\end{array}
if (*.f32 uy #s(literal 2 binary32)) < 0.0195000004Initial program 99.2%
Taylor expanded in uy around 0
Applied rewrites99.4%
if 0.0195000004 < (*.f32 uy #s(literal 2 binary32)) Initial program 97.8%
Taylor expanded in maxCos around 0
*-commutativeN/A
lower-fma.f32N/A
lower-cos.f32N/A
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-PI.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-sin.f32N/A
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-PI.f3293.9
Applied rewrites93.9%
Final simplification98.3%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (- 1.0 ux) ux))
(t_1 (sqrt (- 1.0 (* (* maxCos maxCos) (* t_0 t_0)))))
(t_2 (* (* uy PI) 2.0)))
(if (<= (* uy 2.0) 0.019500000402331352)
(fma
(fma
(*
(fma
-1.3333333333333333
(* (* (* (* PI PI) PI) yi) uy)
(* (* (* PI PI) xi) -2.0))
t_1)
uy
(* (* (* PI yi) 2.0) t_1))
uy
(fma xi t_1 (* (* (* (- 1.0 ux) zi) ux) maxCos)))
(fma (cos t_2) xi (* (sin t_2) yi)))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (1.0f - ux) * ux;
float t_1 = sqrtf((1.0f - ((maxCos * maxCos) * (t_0 * t_0))));
float t_2 = (uy * ((float) M_PI)) * 2.0f;
float tmp;
if ((uy * 2.0f) <= 0.019500000402331352f) {
tmp = fmaf(fmaf((fmaf(-1.3333333333333333f, ((((((float) M_PI) * ((float) M_PI)) * ((float) M_PI)) * yi) * uy), (((((float) M_PI) * ((float) M_PI)) * xi) * -2.0f)) * t_1), uy, (((((float) M_PI) * yi) * 2.0f) * t_1)), uy, fmaf(xi, t_1, ((((1.0f - ux) * zi) * ux) * maxCos)));
} else {
tmp = fmaf(cosf(t_2), xi, (sinf(t_2) * yi));
}
return tmp;
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(Float32(1.0) - ux) * ux) t_1 = sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_0 * t_0)))) t_2 = Float32(Float32(uy * Float32(pi)) * Float32(2.0)) tmp = Float32(0.0) if (Float32(uy * Float32(2.0)) <= Float32(0.019500000402331352)) tmp = fma(fma(Float32(fma(Float32(-1.3333333333333333), Float32(Float32(Float32(Float32(Float32(pi) * Float32(pi)) * Float32(pi)) * yi) * uy), Float32(Float32(Float32(Float32(pi) * Float32(pi)) * xi) * Float32(-2.0))) * t_1), uy, Float32(Float32(Float32(Float32(pi) * yi) * Float32(2.0)) * t_1)), uy, fma(xi, t_1, Float32(Float32(Float32(Float32(Float32(1.0) - ux) * zi) * ux) * maxCos))); else tmp = fma(cos(t_2), xi, Float32(sin(t_2) * yi)); end return tmp end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) \cdot ux\\
t_1 := \sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_0 \cdot t\_0\right)}\\
t_2 := \left(uy \cdot \pi\right) \cdot 2\\
\mathbf{if}\;uy \cdot 2 \leq 0.019500000402331352:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(-1.3333333333333333, \left(\left(\left(\pi \cdot \pi\right) \cdot \pi\right) \cdot yi\right) \cdot uy, \left(\left(\pi \cdot \pi\right) \cdot xi\right) \cdot -2\right) \cdot t\_1, uy, \left(\left(\pi \cdot yi\right) \cdot 2\right) \cdot t\_1\right), uy, \mathsf{fma}\left(xi, t\_1, \left(\left(\left(1 - ux\right) \cdot zi\right) \cdot ux\right) \cdot maxCos\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\cos t\_2, xi, \sin t\_2 \cdot yi\right)\\
\end{array}
\end{array}
if (*.f32 uy #s(literal 2 binary32)) < 0.0195000004Initial program 99.2%
Taylor expanded in uy around 0
Applied rewrites99.3%
if 0.0195000004 < (*.f32 uy #s(literal 2 binary32)) Initial program 97.8%
Taylor expanded in maxCos around 0
*-commutativeN/A
lower-fma.f32N/A
lower-cos.f32N/A
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-PI.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-sin.f32N/A
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-PI.f3293.9
Applied rewrites93.9%
Final simplification98.2%
(FPCore (xi yi zi ux uy maxCos) :precision binary32 (let* ((t_0 (* (* uy PI) 2.0))) (fma (cos t_0) xi (fma (sin t_0) yi (* (* ux zi) maxCos)))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (uy * ((float) M_PI)) * 2.0f;
return fmaf(cosf(t_0), xi, fmaf(sinf(t_0), yi, ((ux * zi) * maxCos)));
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(uy * Float32(pi)) * Float32(2.0)) return fma(cos(t_0), xi, fma(sin(t_0), yi, Float32(Float32(ux * zi) * maxCos))) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(uy \cdot \pi\right) \cdot 2\\
\mathsf{fma}\left(\cos t\_0, xi, \mathsf{fma}\left(\sin t\_0, yi, \left(ux \cdot zi\right) \cdot maxCos\right)\right)
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in ux around 0
+-commutativeN/A
associate-+l+N/A
*-commutativeN/A
lower-fma.f32N/A
lower-cos.f32N/A
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-PI.f32N/A
*-commutativeN/A
lower-fma.f32N/A
Applied rewrites97.0%
Final simplification97.0%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (* uy PI) 2.0)) (t_1 (* (- 1.0 ux) ux)))
(-
(*
(*
(fma (* t_0 yi) (/ 1.0 xi) (cos t_0))
(sqrt (- 1.0 (* (* maxCos maxCos) (* t_1 t_1)))))
xi)
(* (* (* (- ux 1.0) maxCos) ux) zi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (uy * ((float) M_PI)) * 2.0f;
float t_1 = (1.0f - ux) * ux;
return ((fmaf((t_0 * yi), (1.0f / xi), cosf(t_0)) * sqrtf((1.0f - ((maxCos * maxCos) * (t_1 * t_1))))) * xi) - ((((ux - 1.0f) * maxCos) * ux) * zi);
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(uy * Float32(pi)) * Float32(2.0)) t_1 = Float32(Float32(Float32(1.0) - ux) * ux) return Float32(Float32(Float32(fma(Float32(t_0 * yi), Float32(Float32(1.0) / xi), cos(t_0)) * sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_1 * t_1))))) * xi) - Float32(Float32(Float32(Float32(ux - Float32(1.0)) * maxCos) * ux) * zi)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(uy \cdot \pi\right) \cdot 2\\
t_1 := \left(1 - ux\right) \cdot ux\\
\left(\mathsf{fma}\left(t\_0 \cdot yi, \frac{1}{xi}, \cos t\_0\right) \cdot \sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_1 \cdot t\_1\right)}\right) \cdot xi - \left(\left(\left(ux - 1\right) \cdot maxCos\right) \cdot ux\right) \cdot zi
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in xi around inf
*-commutativeN/A
lower-*.f32N/A
Applied rewrites98.0%
Taylor expanded in uy around 0
Applied rewrites89.6%
Applied rewrites90.3%
Final simplification90.3%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (* uy PI) 2.0)) (t_1 (* (- 1.0 ux) ux)))
(-
(*
(*
(fma t_0 (/ yi xi) (cos t_0))
(sqrt (- 1.0 (* (* maxCos maxCos) (* t_1 t_1)))))
xi)
(* (* (* (- ux 1.0) maxCos) ux) zi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (uy * ((float) M_PI)) * 2.0f;
float t_1 = (1.0f - ux) * ux;
return ((fmaf(t_0, (yi / xi), cosf(t_0)) * sqrtf((1.0f - ((maxCos * maxCos) * (t_1 * t_1))))) * xi) - ((((ux - 1.0f) * maxCos) * ux) * zi);
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(uy * Float32(pi)) * Float32(2.0)) t_1 = Float32(Float32(Float32(1.0) - ux) * ux) return Float32(Float32(Float32(fma(t_0, Float32(yi / xi), cos(t_0)) * sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_1 * t_1))))) * xi) - Float32(Float32(Float32(Float32(ux - Float32(1.0)) * maxCos) * ux) * zi)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(uy \cdot \pi\right) \cdot 2\\
t_1 := \left(1 - ux\right) \cdot ux\\
\left(\mathsf{fma}\left(t\_0, \frac{yi}{xi}, \cos t\_0\right) \cdot \sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_1 \cdot t\_1\right)}\right) \cdot xi - \left(\left(\left(ux - 1\right) \cdot maxCos\right) \cdot ux\right) \cdot zi
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in xi around inf
*-commutativeN/A
lower-*.f32N/A
Applied rewrites98.0%
Taylor expanded in uy around 0
Applied rewrites89.6%
Final simplification89.6%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (* uy PI) 2.0)))
(-
(* (* (sqrt 1.0) (fma t_0 (/ yi xi) (cos t_0))) xi)
(* (* (* (- ux 1.0) maxCos) ux) zi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (uy * ((float) M_PI)) * 2.0f;
return ((sqrtf(1.0f) * fmaf(t_0, (yi / xi), cosf(t_0))) * xi) - ((((ux - 1.0f) * maxCos) * ux) * zi);
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(uy * Float32(pi)) * Float32(2.0)) return Float32(Float32(Float32(sqrt(Float32(1.0)) * fma(t_0, Float32(yi / xi), cos(t_0))) * xi) - Float32(Float32(Float32(Float32(ux - Float32(1.0)) * maxCos) * ux) * zi)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(uy \cdot \pi\right) \cdot 2\\
\left(\sqrt{1} \cdot \mathsf{fma}\left(t\_0, \frac{yi}{xi}, \cos t\_0\right)\right) \cdot xi - \left(\left(\left(ux - 1\right) \cdot maxCos\right) \cdot ux\right) \cdot zi
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in xi around inf
*-commutativeN/A
lower-*.f32N/A
Applied rewrites98.0%
Taylor expanded in uy around 0
Applied rewrites89.6%
Taylor expanded in maxCos around 0
Applied rewrites89.4%
Final simplification89.4%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (- 1.0 ux) ux)))
(-
(*
(*
(fma
(fma
(fma
(/ (* (* uy yi) (* (* PI PI) PI)) xi)
-1.3333333333333333
(* -2.0 (* PI PI)))
uy
(* (/ (* PI yi) xi) 2.0))
uy
1.0)
(sqrt (- 1.0 (* (* maxCos maxCos) (* t_0 t_0)))))
xi)
(* (* (* (- ux 1.0) maxCos) ux) zi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (1.0f - ux) * ux;
return ((fmaf(fmaf(fmaf((((uy * yi) * ((((float) M_PI) * ((float) M_PI)) * ((float) M_PI))) / xi), -1.3333333333333333f, (-2.0f * (((float) M_PI) * ((float) M_PI)))), uy, (((((float) M_PI) * yi) / xi) * 2.0f)), uy, 1.0f) * sqrtf((1.0f - ((maxCos * maxCos) * (t_0 * t_0))))) * xi) - ((((ux - 1.0f) * maxCos) * ux) * zi);
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(Float32(1.0) - ux) * ux) return Float32(Float32(Float32(fma(fma(fma(Float32(Float32(Float32(uy * yi) * Float32(Float32(Float32(pi) * Float32(pi)) * Float32(pi))) / xi), Float32(-1.3333333333333333), Float32(Float32(-2.0) * Float32(Float32(pi) * Float32(pi)))), uy, Float32(Float32(Float32(Float32(pi) * yi) / xi) * Float32(2.0))), uy, Float32(1.0)) * sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_0 * t_0))))) * xi) - Float32(Float32(Float32(Float32(ux - Float32(1.0)) * maxCos) * ux) * zi)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) \cdot ux\\
\left(\mathsf{fma}\left(\mathsf{fma}\left(\mathsf{fma}\left(\frac{\left(uy \cdot yi\right) \cdot \left(\left(\pi \cdot \pi\right) \cdot \pi\right)}{xi}, -1.3333333333333333, -2 \cdot \left(\pi \cdot \pi\right)\right), uy, \frac{\pi \cdot yi}{xi} \cdot 2\right), uy, 1\right) \cdot \sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_0 \cdot t\_0\right)}\right) \cdot xi - \left(\left(\left(ux - 1\right) \cdot maxCos\right) \cdot ux\right) \cdot zi
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in xi around inf
*-commutativeN/A
lower-*.f32N/A
Applied rewrites98.0%
Taylor expanded in uy around 0
Applied rewrites88.2%
Final simplification88.2%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (- 1.0 ux) ux))
(t_1 (sqrt (- 1.0 (* (* maxCos maxCos) (* t_0 t_0))))))
(fma
(* (fma 2.0 (* PI yi) (* (* (* (* PI PI) xi) uy) -2.0)) t_1)
uy
(fma xi t_1 (* (* (* (- 1.0 ux) zi) ux) maxCos)))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (1.0f - ux) * ux;
float t_1 = sqrtf((1.0f - ((maxCos * maxCos) * (t_0 * t_0))));
return fmaf((fmaf(2.0f, (((float) M_PI) * yi), ((((((float) M_PI) * ((float) M_PI)) * xi) * uy) * -2.0f)) * t_1), uy, fmaf(xi, t_1, ((((1.0f - ux) * zi) * ux) * maxCos)));
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(Float32(1.0) - ux) * ux) t_1 = sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_0 * t_0)))) return fma(Float32(fma(Float32(2.0), Float32(Float32(pi) * yi), Float32(Float32(Float32(Float32(Float32(pi) * Float32(pi)) * xi) * uy) * Float32(-2.0))) * t_1), uy, fma(xi, t_1, Float32(Float32(Float32(Float32(Float32(1.0) - ux) * zi) * ux) * maxCos))) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) \cdot ux\\
t_1 := \sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_0 \cdot t\_0\right)}\\
\mathsf{fma}\left(\mathsf{fma}\left(2, \pi \cdot yi, \left(\left(\left(\pi \cdot \pi\right) \cdot xi\right) \cdot uy\right) \cdot -2\right) \cdot t\_1, uy, \mathsf{fma}\left(xi, t\_1, \left(\left(\left(1 - ux\right) \cdot zi\right) \cdot ux\right) \cdot maxCos\right)\right)
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in uy around 0
Applied rewrites86.4%
Final simplification86.4%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (- 1.0 ux) ux)))
(if (<= (* uy 2.0) 0.10000000149011612)
(fma
(sqrt (- 1.0 (* (* maxCos maxCos) (* t_0 t_0))))
(fma (* uy 2.0) (* PI yi) xi)
(* (* (* (- 1.0 ux) zi) ux) maxCos))
(* (cos (* (* uy PI) 2.0)) xi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (1.0f - ux) * ux;
float tmp;
if ((uy * 2.0f) <= 0.10000000149011612f) {
tmp = fmaf(sqrtf((1.0f - ((maxCos * maxCos) * (t_0 * t_0)))), fmaf((uy * 2.0f), (((float) M_PI) * yi), xi), ((((1.0f - ux) * zi) * ux) * maxCos));
} else {
tmp = cosf(((uy * ((float) M_PI)) * 2.0f)) * xi;
}
return tmp;
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(Float32(1.0) - ux) * ux) tmp = Float32(0.0) if (Float32(uy * Float32(2.0)) <= Float32(0.10000000149011612)) tmp = fma(sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_0 * t_0)))), fma(Float32(uy * Float32(2.0)), Float32(Float32(pi) * yi), xi), Float32(Float32(Float32(Float32(Float32(1.0) - ux) * zi) * ux) * maxCos)); else tmp = Float32(cos(Float32(Float32(uy * Float32(pi)) * Float32(2.0))) * xi); end return tmp end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) \cdot ux\\
\mathbf{if}\;uy \cdot 2 \leq 0.10000000149011612:\\
\;\;\;\;\mathsf{fma}\left(\sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_0 \cdot t\_0\right)}, \mathsf{fma}\left(uy \cdot 2, \pi \cdot yi, xi\right), \left(\left(\left(1 - ux\right) \cdot zi\right) \cdot ux\right) \cdot maxCos\right)\\
\mathbf{else}:\\
\;\;\;\;\cos \left(\left(uy \cdot \pi\right) \cdot 2\right) \cdot xi\\
\end{array}
\end{array}
if (*.f32 uy #s(literal 2 binary32)) < 0.100000001Initial program 99.1%
Taylor expanded in zi around inf
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-*.f32N/A
lower--.f3211.4
Applied rewrites11.4%
Taylor expanded in ux around inf
Applied rewrites8.5%
Taylor expanded in uy around 0
+-commutativeN/A
associate-+r+N/A
associate-*r*N/A
distribute-rgt-outN/A
Applied rewrites90.3%
if 0.100000001 < (*.f32 uy #s(literal 2 binary32)) Initial program 97.1%
Taylor expanded in yi around 0
+-commutativeN/A
lower-fma.f32N/A
Applied rewrites52.4%
Taylor expanded in maxCos around 0
Applied rewrites52.0%
Final simplification85.6%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (- 1.0 ux) ux)))
(-
(*
(*
(fma (fma (/ (* PI yi) xi) 2.0 (* (* (* PI PI) uy) -2.0)) uy 1.0)
(sqrt (- 1.0 (* (* maxCos maxCos) (* t_0 t_0)))))
xi)
(* (* (* (- ux 1.0) maxCos) ux) zi))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (1.0f - ux) * ux;
return ((fmaf(fmaf(((((float) M_PI) * yi) / xi), 2.0f, (((((float) M_PI) * ((float) M_PI)) * uy) * -2.0f)), uy, 1.0f) * sqrtf((1.0f - ((maxCos * maxCos) * (t_0 * t_0))))) * xi) - ((((ux - 1.0f) * maxCos) * ux) * zi);
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(Float32(1.0) - ux) * ux) return Float32(Float32(Float32(fma(fma(Float32(Float32(Float32(pi) * yi) / xi), Float32(2.0), Float32(Float32(Float32(Float32(pi) * Float32(pi)) * uy) * Float32(-2.0))), uy, Float32(1.0)) * sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_0 * t_0))))) * xi) - Float32(Float32(Float32(Float32(ux - Float32(1.0)) * maxCos) * ux) * zi)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) \cdot ux\\
\left(\mathsf{fma}\left(\mathsf{fma}\left(\frac{\pi \cdot yi}{xi}, 2, \left(\left(\pi \cdot \pi\right) \cdot uy\right) \cdot -2\right), uy, 1\right) \cdot \sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_0 \cdot t\_0\right)}\right) \cdot xi - \left(\left(\left(ux - 1\right) \cdot maxCos\right) \cdot ux\right) \cdot zi
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in xi around inf
*-commutativeN/A
lower-*.f32N/A
Applied rewrites98.0%
Taylor expanded in uy around 0
Applied rewrites85.0%
Final simplification85.0%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (- 1.0 ux) ux)))
(fma
(sqrt (- 1.0 (* (* maxCos maxCos) (* t_0 t_0))))
(fma (* uy 2.0) (* PI yi) xi)
(* (* (* (- 1.0 ux) zi) ux) maxCos))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (1.0f - ux) * ux;
return fmaf(sqrtf((1.0f - ((maxCos * maxCos) * (t_0 * t_0)))), fmaf((uy * 2.0f), (((float) M_PI) * yi), xi), ((((1.0f - ux) * zi) * ux) * maxCos));
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(Float32(1.0) - ux) * ux) return fma(sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_0 * t_0)))), fma(Float32(uy * Float32(2.0)), Float32(Float32(pi) * yi), xi), Float32(Float32(Float32(Float32(Float32(1.0) - ux) * zi) * ux) * maxCos)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) \cdot ux\\
\mathsf{fma}\left(\sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_0 \cdot t\_0\right)}, \mathsf{fma}\left(uy \cdot 2, \pi \cdot yi, xi\right), \left(\left(\left(1 - ux\right) \cdot zi\right) \cdot ux\right) \cdot maxCos\right)
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in zi around inf
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-*.f32N/A
lower--.f3211.1
Applied rewrites11.1%
Taylor expanded in ux around inf
Applied rewrites8.5%
Taylor expanded in uy around 0
+-commutativeN/A
associate-+r+N/A
associate-*r*N/A
distribute-rgt-outN/A
Applied rewrites82.2%
Final simplification82.2%
(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(let* ((t_0 (* (- 1.0 ux) ux)))
(fma
(sqrt (- 1.0 (* (* maxCos maxCos) (* t_0 t_0))))
(fma 2.0 (* (* PI yi) uy) xi)
(* (* (* (- 1.0 ux) zi) ux) maxCos))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
float t_0 = (1.0f - ux) * ux;
return fmaf(sqrtf((1.0f - ((maxCos * maxCos) * (t_0 * t_0)))), fmaf(2.0f, ((((float) M_PI) * yi) * uy), xi), ((((1.0f - ux) * zi) * ux) * maxCos));
}
function code(xi, yi, zi, ux, uy, maxCos) t_0 = Float32(Float32(Float32(1.0) - ux) * ux) return fma(sqrt(Float32(Float32(1.0) - Float32(Float32(maxCos * maxCos) * Float32(t_0 * t_0)))), fma(Float32(2.0), Float32(Float32(Float32(pi) * yi) * uy), xi), Float32(Float32(Float32(Float32(Float32(1.0) - ux) * zi) * ux) * maxCos)) end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \left(1 - ux\right) \cdot ux\\
\mathsf{fma}\left(\sqrt{1 - \left(maxCos \cdot maxCos\right) \cdot \left(t\_0 \cdot t\_0\right)}, \mathsf{fma}\left(2, \left(\pi \cdot yi\right) \cdot uy, xi\right), \left(\left(\left(1 - ux\right) \cdot zi\right) \cdot ux\right) \cdot maxCos\right)
\end{array}
\end{array}
Initial program 98.9%
Taylor expanded in uy around 0
+-commutativeN/A
associate-+r+N/A
associate-*r*N/A
distribute-rgt-outN/A
Applied rewrites82.2%
Final simplification82.2%
(FPCore (xi yi zi ux uy maxCos) :precision binary32 (fma (fma (* (* uy uy) -2.0) (* (* PI PI) xi) xi) (sqrt (- 1.0 (* (* ux ux) (* maxCos maxCos)))) (* (* (* (- 1.0 ux) zi) ux) maxCos)))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
return fmaf(fmaf(((uy * uy) * -2.0f), ((((float) M_PI) * ((float) M_PI)) * xi), xi), sqrtf((1.0f - ((ux * ux) * (maxCos * maxCos)))), ((((1.0f - ux) * zi) * ux) * maxCos));
}
function code(xi, yi, zi, ux, uy, maxCos) return fma(fma(Float32(Float32(uy * uy) * Float32(-2.0)), Float32(Float32(Float32(pi) * Float32(pi)) * xi), xi), sqrt(Float32(Float32(1.0) - Float32(Float32(ux * ux) * Float32(maxCos * maxCos)))), Float32(Float32(Float32(Float32(Float32(1.0) - ux) * zi) * ux) * maxCos)) end
\begin{array}{l}
\\
\mathsf{fma}\left(\mathsf{fma}\left(\left(uy \cdot uy\right) \cdot -2, \left(\pi \cdot \pi\right) \cdot xi, xi\right), \sqrt{1 - \left(ux \cdot ux\right) \cdot \left(maxCos \cdot maxCos\right)}, \left(\left(\left(1 - ux\right) \cdot zi\right) \cdot ux\right) \cdot maxCos\right)
\end{array}
Initial program 98.9%
Taylor expanded in yi around 0
+-commutativeN/A
lower-fma.f32N/A
Applied rewrites54.7%
Taylor expanded in uy around 0
Applied rewrites50.6%
Taylor expanded in ux around 0
Applied rewrites50.6%
Final simplification50.6%
(FPCore (xi yi zi ux uy maxCos) :precision binary32 (fma (fma (* (* uy uy) -2.0) (* (* PI PI) xi) xi) (sqrt 1.0) (* (* (* (- 1.0 ux) zi) ux) maxCos)))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
return fmaf(fmaf(((uy * uy) * -2.0f), ((((float) M_PI) * ((float) M_PI)) * xi), xi), sqrtf(1.0f), ((((1.0f - ux) * zi) * ux) * maxCos));
}
function code(xi, yi, zi, ux, uy, maxCos) return fma(fma(Float32(Float32(uy * uy) * Float32(-2.0)), Float32(Float32(Float32(pi) * Float32(pi)) * xi), xi), sqrt(Float32(1.0)), Float32(Float32(Float32(Float32(Float32(1.0) - ux) * zi) * ux) * maxCos)) end
\begin{array}{l}
\\
\mathsf{fma}\left(\mathsf{fma}\left(\left(uy \cdot uy\right) \cdot -2, \left(\pi \cdot \pi\right) \cdot xi, xi\right), \sqrt{1}, \left(\left(\left(1 - ux\right) \cdot zi\right) \cdot ux\right) \cdot maxCos\right)
\end{array}
Initial program 98.9%
Taylor expanded in yi around 0
+-commutativeN/A
lower-fma.f32N/A
Applied rewrites54.7%
Taylor expanded in uy around 0
Applied rewrites50.6%
Taylor expanded in maxCos around 0
Applied rewrites50.6%
Final simplification50.6%
(FPCore (xi yi zi ux uy maxCos) :precision binary32 (fma (fma (* (* uy uy) -2.0) (* (* xi PI) PI) xi) (sqrt 1.0) (* (* (* (- 1.0 ux) zi) ux) maxCos)))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
return fmaf(fmaf(((uy * uy) * -2.0f), ((xi * ((float) M_PI)) * ((float) M_PI)), xi), sqrtf(1.0f), ((((1.0f - ux) * zi) * ux) * maxCos));
}
function code(xi, yi, zi, ux, uy, maxCos) return fma(fma(Float32(Float32(uy * uy) * Float32(-2.0)), Float32(Float32(xi * Float32(pi)) * Float32(pi)), xi), sqrt(Float32(1.0)), Float32(Float32(Float32(Float32(Float32(1.0) - ux) * zi) * ux) * maxCos)) end
\begin{array}{l}
\\
\mathsf{fma}\left(\mathsf{fma}\left(\left(uy \cdot uy\right) \cdot -2, \left(xi \cdot \pi\right) \cdot \pi, xi\right), \sqrt{1}, \left(\left(\left(1 - ux\right) \cdot zi\right) \cdot ux\right) \cdot maxCos\right)
\end{array}
Initial program 98.9%
Taylor expanded in yi around 0
+-commutativeN/A
lower-fma.f32N/A
Applied rewrites54.7%
Taylor expanded in uy around 0
Applied rewrites50.6%
Applied rewrites50.6%
Taylor expanded in maxCos around 0
Applied rewrites50.6%
Final simplification50.6%
(FPCore (xi yi zi ux uy maxCos) :precision binary32 (* (* maxCos ux) (* (- 1.0 ux) zi)))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
return (maxCos * ux) * ((1.0f - ux) * zi);
}
real(4) function code(xi, yi, zi, ux, uy, maxcos)
real(4), intent (in) :: xi
real(4), intent (in) :: yi
real(4), intent (in) :: zi
real(4), intent (in) :: ux
real(4), intent (in) :: uy
real(4), intent (in) :: maxcos
code = (maxcos * ux) * ((1.0e0 - ux) * zi)
end function
function code(xi, yi, zi, ux, uy, maxCos) return Float32(Float32(maxCos * ux) * Float32(Float32(Float32(1.0) - ux) * zi)) end
function tmp = code(xi, yi, zi, ux, uy, maxCos) tmp = (maxCos * ux) * ((single(1.0) - ux) * zi); end
\begin{array}{l}
\\
\left(maxCos \cdot ux\right) \cdot \left(\left(1 - ux\right) \cdot zi\right)
\end{array}
Initial program 98.9%
Taylor expanded in zi around inf
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-*.f32N/A
lower--.f3211.1
Applied rewrites11.1%
Applied rewrites11.1%
Final simplification11.1%
(FPCore (xi yi zi ux uy maxCos) :precision binary32 (* (* ux zi) maxCos))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
return (ux * zi) * maxCos;
}
real(4) function code(xi, yi, zi, ux, uy, maxcos)
real(4), intent (in) :: xi
real(4), intent (in) :: yi
real(4), intent (in) :: zi
real(4), intent (in) :: ux
real(4), intent (in) :: uy
real(4), intent (in) :: maxcos
code = (ux * zi) * maxcos
end function
function code(xi, yi, zi, ux, uy, maxCos) return Float32(Float32(ux * zi) * maxCos) end
function tmp = code(xi, yi, zi, ux, uy, maxCos) tmp = (ux * zi) * maxCos; end
\begin{array}{l}
\\
\left(ux \cdot zi\right) \cdot maxCos
\end{array}
Initial program 98.9%
Taylor expanded in zi around inf
*-commutativeN/A
lower-*.f32N/A
*-commutativeN/A
lower-*.f32N/A
lower-*.f32N/A
lower--.f3211.1
Applied rewrites11.1%
Taylor expanded in ux around 0
Applied rewrites10.5%
Final simplification10.5%
herbie shell --seed 2024235
(FPCore (xi yi zi ux uy maxCos)
:name "UniformSampleCone 2"
:precision binary32
:pre (and (and (and (and (and (and (<= -10000.0 xi) (<= xi 10000.0)) (and (<= -10000.0 yi) (<= yi 10000.0))) (and (<= -10000.0 zi) (<= zi 10000.0))) (and (<= 2.328306437e-10 ux) (<= ux 1.0))) (and (<= 2.328306437e-10 uy) (<= uy 1.0))) (and (<= 0.0 maxCos) (<= maxCos 1.0)))
(+ (+ (* (* (cos (* (* uy 2.0) PI)) (sqrt (- 1.0 (* (* (* (- 1.0 ux) maxCos) ux) (* (* (- 1.0 ux) maxCos) ux))))) xi) (* (* (sin (* (* uy 2.0) PI)) (sqrt (- 1.0 (* (* (* (- 1.0 ux) maxCos) ux) (* (* (- 1.0 ux) maxCos) ux))))) yi)) (* (* (* (- 1.0 ux) maxCos) ux) zi)))