
(FPCore (ux uy maxCos) :precision binary32 (let* ((t_0 (+ (- 1 ux) (* ux maxCos)))) (* (sin (* (* uy 2) PI)) (sqrt (- 1 (* t_0 t_0))))))
float code(float ux, float uy, float maxCos) {
float t_0 = (1.0f - ux) + (ux * maxCos);
return sinf(((uy * 2.0f) * ((float) M_PI))) * sqrtf((1.0f - (t_0 * t_0)));
}
function code(ux, uy, maxCos) t_0 = Float32(Float32(Float32(1.0) - ux) + Float32(ux * maxCos)) return Float32(sin(Float32(Float32(uy * Float32(2.0)) * Float32(pi))) * sqrt(Float32(Float32(1.0) - Float32(t_0 * t_0)))) end
function tmp = code(ux, uy, maxCos) t_0 = (single(1.0) - ux) + (ux * maxCos); tmp = sin(((uy * single(2.0)) * single(pi))) * sqrt((single(1.0) - (t_0 * t_0))); end
\begin{array}{l}
t_0 := \left(1 - ux\right) + ux \cdot maxCos\\
\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - t\_0 \cdot t\_0}
\end{array}
Herbie found 12 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (ux uy maxCos) :precision binary32 (let* ((t_0 (+ (- 1 ux) (* ux maxCos)))) (* (sin (* (* uy 2) PI)) (sqrt (- 1 (* t_0 t_0))))))
float code(float ux, float uy, float maxCos) {
float t_0 = (1.0f - ux) + (ux * maxCos);
return sinf(((uy * 2.0f) * ((float) M_PI))) * sqrtf((1.0f - (t_0 * t_0)));
}
function code(ux, uy, maxCos) t_0 = Float32(Float32(Float32(1.0) - ux) + Float32(ux * maxCos)) return Float32(sin(Float32(Float32(uy * Float32(2.0)) * Float32(pi))) * sqrt(Float32(Float32(1.0) - Float32(t_0 * t_0)))) end
function tmp = code(ux, uy, maxCos) t_0 = (single(1.0) - ux) + (ux * maxCos); tmp = sin(((uy * single(2.0)) * single(pi))) * sqrt((single(1.0) - (t_0 * t_0))); end
\begin{array}{l}
t_0 := \left(1 - ux\right) + ux \cdot maxCos\\
\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - t\_0 \cdot t\_0}
\end{array}
(FPCore (ux uy maxCos) :precision binary32 (let* ((t_0 (- (* maxCos ux) ux)) (t_1 (- ux (* maxCos ux)))) (* (sqrt (* (/ (- (* 0 0) (* t_0 t_0)) t_1) (- t_1 2))) (sin (* PI (+ uy uy))))))
float code(float ux, float uy, float maxCos) {
float t_0 = (maxCos * ux) - ux;
float t_1 = ux - (maxCos * ux);
return sqrtf(((((0.0f * 0.0f) - (t_0 * t_0)) / t_1) * (t_1 - 2.0f))) * sinf((((float) M_PI) * (uy + uy)));
}
function code(ux, uy, maxCos) t_0 = Float32(Float32(maxCos * ux) - ux) t_1 = Float32(ux - Float32(maxCos * ux)) return Float32(sqrt(Float32(Float32(Float32(Float32(Float32(0.0) * Float32(0.0)) - Float32(t_0 * t_0)) / t_1) * Float32(t_1 - Float32(2.0)))) * sin(Float32(Float32(pi) * Float32(uy + uy)))) end
function tmp = code(ux, uy, maxCos) t_0 = (maxCos * ux) - ux; t_1 = ux - (maxCos * ux); tmp = sqrt(((((single(0.0) * single(0.0)) - (t_0 * t_0)) / t_1) * (t_1 - single(2.0)))) * sin((single(pi) * (uy + uy))); end
\begin{array}{l}
t_0 := maxCos \cdot ux - ux\\
t_1 := ux - maxCos \cdot ux\\
\sqrt{\frac{0 \cdot 0 - t\_0 \cdot t\_0}{t\_1} \cdot \left(t\_1 - 2\right)} \cdot \sin \left(\pi \cdot \left(uy + uy\right)\right)
\end{array}
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
lift-neg.f32N/A
lift--.f32N/A
sub-negateN/A
flip--N/A
lower-unsound-+.f64N/A
lower-+.f64N/A
+-commutativeN/A
+-rgt-identityN/A
lower-unsound-/.f32N/A
Applied rewrites98.3%
(FPCore (ux uy maxCos)
:precision binary32
(*
(sqrt
(*
(/
(- (* (* maxCos ux) (* maxCos ux)) (* ux ux))
(+ (* maxCos ux) ux))
(- (- ux (* maxCos ux)) 2)))
(sin (* PI (+ uy uy)))))float code(float ux, float uy, float maxCos) {
return sqrtf((((((maxCos * ux) * (maxCos * ux)) - (ux * ux)) / ((maxCos * ux) + ux)) * ((ux - (maxCos * ux)) - 2.0f))) * sinf((((float) M_PI) * (uy + uy)));
}
function code(ux, uy, maxCos) return Float32(sqrt(Float32(Float32(Float32(Float32(Float32(maxCos * ux) * Float32(maxCos * ux)) - Float32(ux * ux)) / Float32(Float32(maxCos * ux) + ux)) * Float32(Float32(ux - Float32(maxCos * ux)) - Float32(2.0)))) * sin(Float32(Float32(pi) * Float32(uy + uy)))) end
function tmp = code(ux, uy, maxCos) tmp = sqrt((((((maxCos * ux) * (maxCos * ux)) - (ux * ux)) / ((maxCos * ux) + ux)) * ((ux - (maxCos * ux)) - single(2.0)))) * sin((single(pi) * (uy + uy))); end
\sqrt{\frac{\left(maxCos \cdot ux\right) \cdot \left(maxCos \cdot ux\right) - ux \cdot ux}{maxCos \cdot ux + ux} \cdot \left(\left(ux - maxCos \cdot ux\right) - 2\right)} \cdot \sin \left(\pi \cdot \left(uy + uy\right)\right)
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
lift-neg.f32N/A
lift--.f32N/A
--rgt-identityN/A
lift--.f32N/A
lift-*.f32N/A
*-commutativeN/A
lift-*.f32N/A
sub-negate-revN/A
flip--N/A
lower-unsound-/.f32N/A
lower-unsound--.f32N/A
lower-unsound-*.f32N/A
lift-*.f32N/A
*-commutativeN/A
lift-*.f32N/A
lift-*.f32N/A
*-commutativeN/A
lift-*.f32N/A
lower-unsound-*.f32N/A
lower-unsound-+.f3298.2%
lift-*.f32N/A
*-commutativeN/A
lift-*.f3298.2%
Applied rewrites98.2%
(FPCore (ux uy maxCos) :precision binary32 (* (sqrt (* (- (* maxCos ux) ux) (- (- ux (* maxCos ux)) 2))) (sin (* PI (+ uy uy)))))
float code(float ux, float uy, float maxCos) {
return sqrtf((((maxCos * ux) - ux) * ((ux - (maxCos * ux)) - 2.0f))) * sinf((((float) M_PI) * (uy + uy)));
}
function code(ux, uy, maxCos) return Float32(sqrt(Float32(Float32(Float32(maxCos * ux) - ux) * Float32(Float32(ux - Float32(maxCos * ux)) - Float32(2.0)))) * sin(Float32(Float32(pi) * Float32(uy + uy)))) end
function tmp = code(ux, uy, maxCos) tmp = sqrt((((maxCos * ux) - ux) * ((ux - (maxCos * ux)) - single(2.0)))) * sin((single(pi) * (uy + uy))); end
\sqrt{\left(maxCos \cdot ux - ux\right) \cdot \left(\left(ux - maxCos \cdot ux\right) - 2\right)} \cdot \sin \left(\pi \cdot \left(uy + uy\right)\right)
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
lift-neg.f32N/A
lift--.f32N/A
--rgt-identityN/A
lift--.f32N/A
lift-*.f32N/A
*-commutativeN/A
lift-*.f32N/A
sub-negate-revN/A
lower--.f3298.3%
lift-*.f32N/A
*-commutativeN/A
lift-*.f3298.3%
Applied rewrites98.3%
(FPCore (ux uy maxCos) :precision binary32 (* (sqrt (* (- (- (- ux (* maxCos ux)) 0)) (- ux 2))) (sin (* PI (+ uy uy)))))
float code(float ux, float uy, float maxCos) {
return sqrtf((-((ux - (maxCos * ux)) - 0.0f) * (ux - 2.0f))) * sinf((((float) M_PI) * (uy + uy)));
}
function code(ux, uy, maxCos) return Float32(sqrt(Float32(Float32(-Float32(Float32(ux - Float32(maxCos * ux)) - Float32(0.0))) * Float32(ux - Float32(2.0)))) * sin(Float32(Float32(pi) * Float32(uy + uy)))) end
function tmp = code(ux, uy, maxCos) tmp = sqrt((-((ux - (maxCos * ux)) - single(0.0)) * (ux - single(2.0)))) * sin((single(pi) * (uy + uy))); end
\sqrt{\left(-\left(\left(ux - maxCos \cdot ux\right) - 0\right)\right) \cdot \left(ux - 2\right)} \cdot \sin \left(\pi \cdot \left(uy + uy\right)\right)
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
Taylor expanded in maxCos around 0
lower--.f3297.1%
Applied rewrites97.1%
(FPCore (ux uy maxCos) :precision binary32 (* (sqrt (* -1 (* ux (- ux 2)))) (sin (* PI (+ uy uy)))))
float code(float ux, float uy, float maxCos) {
return sqrtf((-1.0f * (ux * (ux - 2.0f)))) * sinf((((float) M_PI) * (uy + uy)));
}
function code(ux, uy, maxCos) return Float32(sqrt(Float32(Float32(-1.0) * Float32(ux * Float32(ux - Float32(2.0))))) * sin(Float32(Float32(pi) * Float32(uy + uy)))) end
function tmp = code(ux, uy, maxCos) tmp = sqrt((single(-1.0) * (ux * (ux - single(2.0))))) * sin((single(pi) * (uy + uy))); end
\sqrt{-1 \cdot \left(ux \cdot \left(ux - 2\right)\right)} \cdot \sin \left(\pi \cdot \left(uy + uy\right)\right)
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
Taylor expanded in maxCos around 0
lower-*.f32N/A
lower-*.f32N/A
lower--.f3292.4%
Applied rewrites92.4%
(FPCore (ux uy maxCos) :precision binary32 (if (<= uy 13743895/8589934592) (* (* (+ uy uy) PI) (sqrt (* (- (- ux (* ux maxCos)) 2) (- (* ux maxCos) ux)))) (* (sqrt (* (- 2 (+ maxCos maxCos)) ux)) (sin (* (+ PI PI) uy)))))
float code(float ux, float uy, float maxCos) {
float tmp;
if (uy <= 0.0015999999595806003f) {
tmp = ((uy + uy) * ((float) M_PI)) * sqrtf((((ux - (ux * maxCos)) - 2.0f) * ((ux * maxCos) - ux)));
} else {
tmp = sqrtf(((2.0f - (maxCos + maxCos)) * ux)) * sinf(((((float) M_PI) + ((float) M_PI)) * uy));
}
return tmp;
}
function code(ux, uy, maxCos) tmp = Float32(0.0) if (uy <= Float32(0.0015999999595806003)) tmp = Float32(Float32(Float32(uy + uy) * Float32(pi)) * sqrt(Float32(Float32(Float32(ux - Float32(ux * maxCos)) - Float32(2.0)) * Float32(Float32(ux * maxCos) - ux)))); else tmp = Float32(sqrt(Float32(Float32(Float32(2.0) - Float32(maxCos + maxCos)) * ux)) * sin(Float32(Float32(Float32(pi) + Float32(pi)) * uy))); end return tmp end
function tmp_2 = code(ux, uy, maxCos) tmp = single(0.0); if (uy <= single(0.0015999999595806003)) tmp = ((uy + uy) * single(pi)) * sqrt((((ux - (ux * maxCos)) - single(2.0)) * ((ux * maxCos) - ux))); else tmp = sqrt(((single(2.0) - (maxCos + maxCos)) * ux)) * sin(((single(pi) + single(pi)) * uy)); end tmp_2 = tmp; end
\begin{array}{l}
\mathbf{if}\;uy \leq \frac{13743895}{8589934592}:\\
\;\;\;\;\left(\left(uy + uy\right) \cdot \pi\right) \cdot \sqrt{\left(\left(ux - ux \cdot maxCos\right) - 2\right) \cdot \left(ux \cdot maxCos - ux\right)}\\
\mathbf{else}:\\
\;\;\;\;\sqrt{\left(2 - \left(maxCos + maxCos\right)\right) \cdot ux} \cdot \sin \left(\left(\pi + \pi\right) \cdot uy\right)\\
\end{array}
if uy < 0.00159999996Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f3281.5%
Applied rewrites81.5%
Applied rewrites81.4%
if 0.00159999996 < uy Initial program 57.4%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3276.4%
Applied rewrites76.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3276.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3276.4%
lift-*.f32N/A
count-2-revN/A
lower-+.f3276.4%
lower-+.f32N/A
lower-+.f32N/A
lower-+.f32N/A
lower-+.f32N/A
lower-+.f32N/A
Applied rewrites76.4%
(FPCore (ux uy maxCos) :precision binary32 (if (<= uy 8589935/2147483648) (* (* (+ uy uy) PI) (sqrt (* (- (- ux (* ux maxCos)) 2) (- (* ux maxCos) ux)))) (* (sin (* (* uy 2) PI)) (sqrt (* ux 2)))))
float code(float ux, float uy, float maxCos) {
float tmp;
if (uy <= 0.004000000189989805f) {
tmp = ((uy + uy) * ((float) M_PI)) * sqrtf((((ux - (ux * maxCos)) - 2.0f) * ((ux * maxCos) - ux)));
} else {
tmp = sinf(((uy * 2.0f) * ((float) M_PI))) * sqrtf((ux * 2.0f));
}
return tmp;
}
function code(ux, uy, maxCos) tmp = Float32(0.0) if (uy <= Float32(0.004000000189989805)) tmp = Float32(Float32(Float32(uy + uy) * Float32(pi)) * sqrt(Float32(Float32(Float32(ux - Float32(ux * maxCos)) - Float32(2.0)) * Float32(Float32(ux * maxCos) - ux)))); else tmp = Float32(sin(Float32(Float32(uy * Float32(2.0)) * Float32(pi))) * sqrt(Float32(ux * Float32(2.0)))); end return tmp end
function tmp_2 = code(ux, uy, maxCos) tmp = single(0.0); if (uy <= single(0.004000000189989805)) tmp = ((uy + uy) * single(pi)) * sqrt((((ux - (ux * maxCos)) - single(2.0)) * ((ux * maxCos) - ux))); else tmp = sin(((uy * single(2.0)) * single(pi))) * sqrt((ux * single(2.0))); end tmp_2 = tmp; end
\begin{array}{l}
\mathbf{if}\;uy \leq \frac{8589935}{2147483648}:\\
\;\;\;\;\left(\left(uy + uy\right) \cdot \pi\right) \cdot \sqrt{\left(\left(ux - ux \cdot maxCos\right) - 2\right) \cdot \left(ux \cdot maxCos - ux\right)}\\
\mathbf{else}:\\
\;\;\;\;\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{ux \cdot 2}\\
\end{array}
if uy < 0.00400000019Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f3281.5%
Applied rewrites81.5%
Applied rewrites81.4%
if 0.00400000019 < uy Initial program 57.4%
Taylor expanded in ux around 0
lower-*.f32N/A
lower--.f32N/A
lower-*.f3276.4%
Applied rewrites76.4%
Taylor expanded in maxCos around 0
Applied rewrites72.9%
(FPCore (ux uy maxCos) :precision binary32 (* (* (+ uy uy) PI) (sqrt (* (- (- ux (* ux maxCos)) 2) (- (* ux maxCos) ux)))))
float code(float ux, float uy, float maxCos) {
return ((uy + uy) * ((float) M_PI)) * sqrtf((((ux - (ux * maxCos)) - 2.0f) * ((ux * maxCos) - ux)));
}
function code(ux, uy, maxCos) return Float32(Float32(Float32(uy + uy) * Float32(pi)) * sqrt(Float32(Float32(Float32(ux - Float32(ux * maxCos)) - Float32(2.0)) * Float32(Float32(ux * maxCos) - ux)))) end
function tmp = code(ux, uy, maxCos) tmp = ((uy + uy) * single(pi)) * sqrt((((ux - (ux * maxCos)) - single(2.0)) * ((ux * maxCos) - ux))); end
\left(\left(uy + uy\right) \cdot \pi\right) \cdot \sqrt{\left(\left(ux - ux \cdot maxCos\right) - 2\right) \cdot \left(ux \cdot maxCos - ux\right)}
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f3281.5%
Applied rewrites81.5%
Applied rewrites81.4%
(FPCore (ux uy maxCos) :precision binary32 (* 2 (* uy (* PI (sqrt (* (- ux 2) (- (* maxCos ux) ux)))))))
float code(float ux, float uy, float maxCos) {
return 2.0f * (uy * (((float) M_PI) * sqrtf(((ux - 2.0f) * ((maxCos * ux) - ux)))));
}
function code(ux, uy, maxCos) return Float32(Float32(2.0) * Float32(uy * Float32(Float32(pi) * sqrt(Float32(Float32(ux - Float32(2.0)) * Float32(Float32(maxCos * ux) - ux)))))) end
function tmp = code(ux, uy, maxCos) tmp = single(2.0) * (uy * (single(pi) * sqrt(((ux - single(2.0)) * ((maxCos * ux) - ux))))); end
2 \cdot \left(uy \cdot \left(\pi \cdot \sqrt{\left(ux - 2\right) \cdot \left(maxCos \cdot ux - ux\right)}\right)\right)
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f3281.5%
Applied rewrites81.5%
Taylor expanded in ux around 0
Applied rewrites80.7%
(FPCore (ux uy maxCos) :precision binary32 (* 2 (* uy (* PI (sqrt (* -1 (* ux (- (- ux 1) 1))))))))
float code(float ux, float uy, float maxCos) {
return 2.0f * (uy * (((float) M_PI) * sqrtf((-1.0f * (ux * ((ux - 1.0f) - 1.0f))))));
}
function code(ux, uy, maxCos) return Float32(Float32(2.0) * Float32(uy * Float32(Float32(pi) * sqrt(Float32(Float32(-1.0) * Float32(ux * Float32(Float32(ux - Float32(1.0)) - Float32(1.0)))))))) end
function tmp = code(ux, uy, maxCos) tmp = single(2.0) * (uy * (single(pi) * sqrt((single(-1.0) * (ux * ((ux - single(1.0)) - single(1.0))))))); end
2 \cdot \left(uy \cdot \left(\pi \cdot \sqrt{-1 \cdot \left(ux \cdot \left(\left(ux - 1\right) - 1\right)\right)}\right)\right)
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f3281.5%
Applied rewrites81.5%
Taylor expanded in maxCos around 0
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower--.f3277.3%
Applied rewrites77.3%
lift--.f32N/A
metadata-evalN/A
associate--r+N/A
lower--.f32N/A
lower--.f3277.3%
Applied rewrites77.3%
(FPCore (ux uy maxCos) :precision binary32 (* (+ uy uy) (* (sqrt (* (- 2 ux) ux)) PI)))
float code(float ux, float uy, float maxCos) {
return (uy + uy) * (sqrtf(((2.0f - ux) * ux)) * ((float) M_PI));
}
function code(ux, uy, maxCos) return Float32(Float32(uy + uy) * Float32(sqrt(Float32(Float32(Float32(2.0) - ux) * ux)) * Float32(pi))) end
function tmp = code(ux, uy, maxCos) tmp = (uy + uy) * (sqrt(((single(2.0) - ux) * ux)) * single(pi)); end
\left(uy + uy\right) \cdot \left(\sqrt{\left(2 - ux\right) \cdot ux} \cdot \pi\right)
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f3281.5%
Applied rewrites81.5%
Taylor expanded in maxCos around 0
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower--.f3277.3%
Applied rewrites77.3%
lift-*.f32N/A
lift-*.f32N/A
associate-*r*N/A
count-2N/A
lift-+.f32N/A
lower-*.f3277.3%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3277.3%
Applied rewrites77.3%
(FPCore (ux uy maxCos) :precision binary32 (* 2 (* uy (* PI (sqrt (* 2 ux))))))
float code(float ux, float uy, float maxCos) {
return 2.0f * (uy * (((float) M_PI) * sqrtf((2.0f * ux))));
}
function code(ux, uy, maxCos) return Float32(Float32(2.0) * Float32(uy * Float32(Float32(pi) * sqrt(Float32(Float32(2.0) * ux))))) end
function tmp = code(ux, uy, maxCos) tmp = single(2.0) * (uy * (single(pi) * sqrt((single(2.0) * ux)))); end
2 \cdot \left(uy \cdot \left(\pi \cdot \sqrt{2 \cdot ux}\right)\right)
Initial program 57.4%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3257.4%
Applied rewrites98.3%
Taylor expanded in uy around 0
lower-*.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-+.f32N/A
lower-*.f32N/A
lower--.f32N/A
lower-*.f3281.5%
Applied rewrites81.5%
Taylor expanded in maxCos around 0
lower-*.f32N/A
lower-PI.f32N/A
lower-sqrt.f32N/A
lower-*.f32N/A
lower-*.f32N/A
lower--.f3277.3%
Applied rewrites77.3%
Taylor expanded in ux around 0
lower-*.f3263.2%
Applied rewrites63.2%
herbie shell --seed 2025271 -o generate:evaluate
(FPCore (ux uy maxCos)
:name "UniformSampleCone, y"
:precision binary32
:pre (and (and (and (<= 2328306437/10000000000000000000 ux) (<= ux 1)) (and (<= 2328306437/10000000000000000000 uy) (<= uy 1))) (and (<= 0 maxCos) (<= maxCos 1)))
(* (sin (* (* uy 2) PI)) (sqrt (- 1 (* (+ (- 1 ux) (* ux maxCos)) (+ (- 1 ux) (* ux maxCos)))))))