(FPCore (xi yi zi ux uy maxCos)
:precision binary32
(+
(+
(*
(*
(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)))(FPCore (xi yi zi ux uy maxCos) :precision binary32 (fma ux (* (- 1.0 ux) (* maxCos zi)) (* (sqrt (fma (- 1.0 ux) (* (* ux (* maxCos (* ux maxCos))) (+ ux -1.0)) 1.0)) (fma (cos (* uy (* 2.0 PI))) xi (* yi (sin (* 2.0 (* uy PI))))))))
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
return (((cosf(((uy * 2.0f) * ((float) M_PI))) * sqrtf((1.0f - ((((1.0f - ux) * maxCos) * ux) * (((1.0f - ux) * maxCos) * ux))))) * xi) + ((sinf(((uy * 2.0f) * ((float) M_PI))) * sqrtf((1.0f - ((((1.0f - ux) * maxCos) * ux) * (((1.0f - ux) * maxCos) * ux))))) * yi)) + ((((1.0f - ux) * maxCos) * ux) * zi);
}
float code(float xi, float yi, float zi, float ux, float uy, float maxCos) {
return fmaf(ux, ((1.0f - ux) * (maxCos * zi)), (sqrtf(fmaf((1.0f - ux), ((ux * (maxCos * (ux * maxCos))) * (ux + -1.0f)), 1.0f)) * fmaf(cosf((uy * (2.0f * ((float) M_PI)))), xi, (yi * sinf((2.0f * (uy * ((float) M_PI))))))));
}
function code(xi, yi, zi, ux, uy, maxCos) return Float32(Float32(Float32(Float32(cos(Float32(Float32(uy * Float32(2.0)) * Float32(pi))) * sqrt(Float32(Float32(1.0) - Float32(Float32(Float32(Float32(Float32(1.0) - ux) * maxCos) * ux) * Float32(Float32(Float32(Float32(1.0) - ux) * maxCos) * ux))))) * xi) + Float32(Float32(sin(Float32(Float32(uy * Float32(2.0)) * Float32(pi))) * sqrt(Float32(Float32(1.0) - Float32(Float32(Float32(Float32(Float32(1.0) - ux) * maxCos) * ux) * Float32(Float32(Float32(Float32(1.0) - ux) * maxCos) * ux))))) * yi)) + Float32(Float32(Float32(Float32(Float32(1.0) - ux) * maxCos) * ux) * zi)) end
function code(xi, yi, zi, ux, uy, maxCos) return fma(ux, Float32(Float32(Float32(1.0) - ux) * Float32(maxCos * zi)), Float32(sqrt(fma(Float32(Float32(1.0) - ux), Float32(Float32(ux * Float32(maxCos * Float32(ux * maxCos))) * Float32(ux + Float32(-1.0))), Float32(1.0))) * fma(cos(Float32(uy * Float32(Float32(2.0) * Float32(pi)))), xi, Float32(yi * sin(Float32(Float32(2.0) * Float32(uy * Float32(pi)))))))) end
\left(\left(\cos \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - \left(\left(\left(1 - ux\right) \cdot maxCos\right) \cdot ux\right) \cdot \left(\left(\left(1 - ux\right) \cdot maxCos\right) \cdot ux\right)}\right) \cdot xi + \left(\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - \left(\left(\left(1 - ux\right) \cdot maxCos\right) \cdot ux\right) \cdot \left(\left(\left(1 - ux\right) \cdot maxCos\right) \cdot ux\right)}\right) \cdot yi\right) + \left(\left(\left(1 - ux\right) \cdot maxCos\right) \cdot ux\right) \cdot zi
\mathsf{fma}\left(ux, \left(1 - ux\right) \cdot \left(maxCos \cdot zi\right), \sqrt{\mathsf{fma}\left(1 - ux, \left(ux \cdot \left(maxCos \cdot \left(ux \cdot maxCos\right)\right)\right) \cdot \left(ux + -1\right), 1\right)} \cdot \mathsf{fma}\left(\cos \left(uy \cdot \left(2 \cdot \pi\right)\right), xi, yi \cdot \sin \left(2 \cdot \left(uy \cdot \pi\right)\right)\right)\right)



Bits error versus xi



Bits error versus yi



Bits error versus zi



Bits error versus ux



Bits error versus uy



Bits error versus maxCos
Initial program 0.3
Simplified0.3
Applied egg-rr0.3
Taylor expanded in uy around inf 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2022160
(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)))