| Alternative 1 | |
|---|---|
| Error | 0.5 |
| Cost | 10304 |
\[\sqrt{ux - ux \cdot \left(\left(maxCos - 1\right) \cdot \left(\left(1 + maxCos \cdot ux\right) - ux\right) + maxCos\right)} \cdot \sin \left(2 \cdot \left(uy \cdot \pi\right)\right)
\]
(FPCore (ux uy maxCos) :precision binary32 (* (sin (* (* uy 2.0) PI)) (sqrt (- 1.0 (* (+ (- 1.0 ux) (* ux maxCos)) (+ (- 1.0 ux) (* ux maxCos)))))))
(FPCore (ux uy maxCos)
:precision binary32
(*
(sin (* (* uy 2.0) PI))
(sqrt
(+
(* (- 2.0 (* 2.0 maxCos)) ux)
(- (* (pow (+ maxCos -1.0) 2.0) (pow ux 2.0)))))))float code(float ux, float uy, float maxCos) {
return sinf(((uy * 2.0f) * ((float) M_PI))) * sqrtf((1.0f - (((1.0f - ux) + (ux * maxCos)) * ((1.0f - ux) + (ux * maxCos)))));
}
float code(float ux, float uy, float maxCos) {
return sinf(((uy * 2.0f) * ((float) M_PI))) * sqrtf((((2.0f - (2.0f * maxCos)) * ux) + -(powf((maxCos + -1.0f), 2.0f) * powf(ux, 2.0f))));
}
function code(ux, uy, maxCos) return Float32(sin(Float32(Float32(uy * Float32(2.0)) * Float32(pi))) * sqrt(Float32(Float32(1.0) - Float32(Float32(Float32(Float32(1.0) - ux) + Float32(ux * maxCos)) * Float32(Float32(Float32(1.0) - ux) + Float32(ux * maxCos)))))) end
function code(ux, uy, maxCos) return Float32(sin(Float32(Float32(uy * Float32(2.0)) * Float32(pi))) * sqrt(Float32(Float32(Float32(Float32(2.0) - Float32(Float32(2.0) * maxCos)) * ux) + Float32(-Float32((Float32(maxCos + Float32(-1.0)) ^ Float32(2.0)) * (ux ^ Float32(2.0))))))) end
function tmp = code(ux, uy, maxCos) tmp = sin(((uy * single(2.0)) * single(pi))) * sqrt((single(1.0) - (((single(1.0) - ux) + (ux * maxCos)) * ((single(1.0) - ux) + (ux * maxCos))))); end
function tmp = code(ux, uy, maxCos) tmp = sin(((uy * single(2.0)) * single(pi))) * sqrt((((single(2.0) - (single(2.0) * maxCos)) * ux) + -(((maxCos + single(-1.0)) ^ single(2.0)) * (ux ^ single(2.0))))); end
\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{1 - \left(\left(1 - ux\right) + ux \cdot maxCos\right) \cdot \left(\left(1 - ux\right) + ux \cdot maxCos\right)}
\sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{\left(2 - 2 \cdot maxCos\right) \cdot ux + \left(-{\left(maxCos + -1\right)}^{2} \cdot {ux}^{2}\right)}
Results
Initial program 13.6
Taylor expanded in ux around 0 0.5
Simplified0.5
[Start]0.5 | \[ \sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{\left(2 - 2 \cdot maxCos\right) \cdot ux + -1 \cdot \left({\left(maxCos - 1\right)}^{2} \cdot {ux}^{2}\right)}
\] |
|---|---|
rational_best_oopsla_all_46_json_45_simplify-74 [=>]0.5 | \[ \sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{\left(2 - 2 \cdot maxCos\right) \cdot ux + \color{blue}{\left({\left(maxCos - 1\right)}^{2} \cdot {ux}^{2}\right) \cdot -1}}
\] |
rational_best_oopsla_all_46_json_45_simplify-92 [=>]0.5 | \[ \sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{\left(2 - 2 \cdot maxCos\right) \cdot ux + \color{blue}{\left(-{\left(maxCos - 1\right)}^{2} \cdot {ux}^{2}\right)}}
\] |
rational_best_oopsla_all_46_json_45_simplify-45 [=>]0.5 | \[ \sin \left(\left(uy \cdot 2\right) \cdot \pi\right) \cdot \sqrt{\left(2 - 2 \cdot maxCos\right) \cdot ux + \left(-{\color{blue}{\left(maxCos + -1\right)}}^{2} \cdot {ux}^{2}\right)}
\] |
Final simplification0.5
| Alternative 1 | |
|---|---|
| Error | 0.5 |
| Cost | 10304 |
| Alternative 2 | |
|---|---|
| Error | 0.5 |
| Cost | 10272 |
| Alternative 3 | |
|---|---|
| Error | 0.5 |
| Cost | 10208 |
| Alternative 4 | |
|---|---|
| Error | 1.5 |
| Cost | 10052 |
| Alternative 5 | |
|---|---|
| Error | 3.3 |
| Cost | 9988 |
| Alternative 6 | |
|---|---|
| Error | 6.0 |
| Cost | 7104 |
| Alternative 7 | |
|---|---|
| Error | 10.9 |
| Cost | 6784 |
| Alternative 8 | |
|---|---|
| Error | 11.8 |
| Cost | 6656 |
herbie shell --seed 2023090
(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)))))))