| Alternative 1 | |
|---|---|
| Error | 0.7 |
| Cost | 13472 |
\[\frac{1}{\left(1 + c\right) + \left(\frac{1}{\sqrt{\pi}} \cdot \frac{\sqrt{\left(1 - cosTheta\right) - cosTheta}}{cosTheta}\right) \cdot e^{\left(-cosTheta\right) \cdot cosTheta}}
\]
(FPCore (cosTheta c)
:precision binary32
(/
1.0
(+
(+ 1.0 c)
(*
(* (/ 1.0 (sqrt PI)) (/ (sqrt (- (- 1.0 cosTheta) cosTheta)) cosTheta))
(exp (* (- cosTheta) cosTheta))))))(FPCore (cosTheta c)
:precision binary32
(let* ((t_0 (sqrt (/ 1.0 PI)))
(t_1 (+ (- t_0) (+ 1.0 c)))
(t_2 (sqrt (pow PI 3.0)))
(t_3 (* t_0 -1.5))
(t_4 (+ (- (* (pow t_1 2.0) t_2)) (* PI t_3))))
(+
(+
(* cosTheta (sqrt PI))
(* -1.0 (+ (* (pow cosTheta 3.0) t_4) (* (pow cosTheta 2.0) (* PI t_1)))))
(-
(*
(+
(- (* (sqrt PI) (* t_1 t_4)))
(+ (- (* t_2 (* t_1 t_3))) (* PI (* t_0 0.5))))
(pow cosTheta 4.0))))))float code(float cosTheta, float c) {
return 1.0f / ((1.0f + c) + (((1.0f / sqrtf(((float) M_PI))) * (sqrtf(((1.0f - cosTheta) - cosTheta)) / cosTheta)) * expf((-cosTheta * cosTheta))));
}
float code(float cosTheta, float c) {
float t_0 = sqrtf((1.0f / ((float) M_PI)));
float t_1 = -t_0 + (1.0f + c);
float t_2 = sqrtf(powf(((float) M_PI), 3.0f));
float t_3 = t_0 * -1.5f;
float t_4 = -(powf(t_1, 2.0f) * t_2) + (((float) M_PI) * t_3);
return ((cosTheta * sqrtf(((float) M_PI))) + (-1.0f * ((powf(cosTheta, 3.0f) * t_4) + (powf(cosTheta, 2.0f) * (((float) M_PI) * t_1))))) + -((-(sqrtf(((float) M_PI)) * (t_1 * t_4)) + (-(t_2 * (t_1 * t_3)) + (((float) M_PI) * (t_0 * 0.5f)))) * powf(cosTheta, 4.0f));
}
function code(cosTheta, c) return Float32(Float32(1.0) / Float32(Float32(Float32(1.0) + c) + Float32(Float32(Float32(Float32(1.0) / sqrt(Float32(pi))) * Float32(sqrt(Float32(Float32(Float32(1.0) - cosTheta) - cosTheta)) / cosTheta)) * exp(Float32(Float32(-cosTheta) * cosTheta))))) end
function code(cosTheta, c) t_0 = sqrt(Float32(Float32(1.0) / Float32(pi))) t_1 = Float32(Float32(-t_0) + Float32(Float32(1.0) + c)) t_2 = sqrt((Float32(pi) ^ Float32(3.0))) t_3 = Float32(t_0 * Float32(-1.5)) t_4 = Float32(Float32(-Float32((t_1 ^ Float32(2.0)) * t_2)) + Float32(Float32(pi) * t_3)) return Float32(Float32(Float32(cosTheta * sqrt(Float32(pi))) + Float32(Float32(-1.0) * Float32(Float32((cosTheta ^ Float32(3.0)) * t_4) + Float32((cosTheta ^ Float32(2.0)) * Float32(Float32(pi) * t_1))))) + Float32(-Float32(Float32(Float32(-Float32(sqrt(Float32(pi)) * Float32(t_1 * t_4))) + Float32(Float32(-Float32(t_2 * Float32(t_1 * t_3))) + Float32(Float32(pi) * Float32(t_0 * Float32(0.5))))) * (cosTheta ^ Float32(4.0))))) end
function tmp = code(cosTheta, c) tmp = single(1.0) / ((single(1.0) + c) + (((single(1.0) / sqrt(single(pi))) * (sqrt(((single(1.0) - cosTheta) - cosTheta)) / cosTheta)) * exp((-cosTheta * cosTheta)))); end
function tmp = code(cosTheta, c) t_0 = sqrt((single(1.0) / single(pi))); t_1 = -t_0 + (single(1.0) + c); t_2 = sqrt((single(pi) ^ single(3.0))); t_3 = t_0 * single(-1.5); t_4 = -((t_1 ^ single(2.0)) * t_2) + (single(pi) * t_3); tmp = ((cosTheta * sqrt(single(pi))) + (single(-1.0) * (((cosTheta ^ single(3.0)) * t_4) + ((cosTheta ^ single(2.0)) * (single(pi) * t_1))))) + -((-(sqrt(single(pi)) * (t_1 * t_4)) + (-(t_2 * (t_1 * t_3)) + (single(pi) * (t_0 * single(0.5))))) * (cosTheta ^ single(4.0))); end
\frac{1}{\left(1 + c\right) + \left(\frac{1}{\sqrt{\pi}} \cdot \frac{\sqrt{\left(1 - cosTheta\right) - cosTheta}}{cosTheta}\right) \cdot e^{\left(-cosTheta\right) \cdot cosTheta}}
\begin{array}{l}
t_0 := \sqrt{\frac{1}{\pi}}\\
t_1 := \left(-t_0\right) + \left(1 + c\right)\\
t_2 := \sqrt{{\pi}^{3}}\\
t_3 := t_0 \cdot -1.5\\
t_4 := \left(-{t_1}^{2} \cdot t_2\right) + \pi \cdot t_3\\
\left(cosTheta \cdot \sqrt{\pi} + -1 \cdot \left({cosTheta}^{3} \cdot t_4 + {cosTheta}^{2} \cdot \left(\pi \cdot t_1\right)\right)\right) + \left(-\left(\left(-\sqrt{\pi} \cdot \left(t_1 \cdot t_4\right)\right) + \left(\left(-t_2 \cdot \left(t_1 \cdot t_3\right)\right) + \pi \cdot \left(t_0 \cdot 0.5\right)\right)\right) \cdot {cosTheta}^{4}\right)
\end{array}
Results
Initial program 0.7
Taylor expanded in cosTheta around 0 0.8
Simplified0.8
[Start]0.8 | \[ -1 \cdot \left(\left(-1 \cdot \left(\left(\left(-1 \cdot \left({\left(c + \left(1 + -1 \cdot \sqrt{\frac{1}{\pi}}\right)\right)}^{2} \cdot \sqrt{{\pi}^{3}}\right) + \left(-0.5 \cdot \sqrt{\frac{1}{\pi}} + -1 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \pi\right) \cdot \left(c + \left(1 + -1 \cdot \sqrt{\frac{1}{\pi}}\right)\right)\right) \cdot \sqrt{\pi}\right) + \left(-1 \cdot \left(\left(\left(-1 \cdot \sqrt{\frac{1}{\pi}} + -0.5 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \left(c + \left(1 + -1 \cdot \sqrt{\frac{1}{\pi}}\right)\right)\right) \cdot \sqrt{{\pi}^{3}}\right) + \left(-0.5 \cdot \sqrt{\frac{1}{\pi}} + \sqrt{\frac{1}{\pi}}\right) \cdot \pi\right)\right) \cdot {cosTheta}^{4}\right) + \left(-1 \cdot \left(\left(-1 \cdot \left({\left(c + \left(1 + -1 \cdot \sqrt{\frac{1}{\pi}}\right)\right)}^{2} \cdot \sqrt{{\pi}^{3}}\right) + \left(-1 \cdot \sqrt{\frac{1}{\pi}} + -0.5 \cdot \sqrt{\frac{1}{\pi}}\right) \cdot \pi\right) \cdot {cosTheta}^{3}\right) + \left(cosTheta \cdot \sqrt{\pi} + -1 \cdot \left({cosTheta}^{2} \cdot \left(\left(c + \left(1 + -1 \cdot \sqrt{\frac{1}{\pi}}\right)\right) \cdot \pi\right)\right)\right)\right)
\] |
|---|
Applied egg-rr0.8
Simplified0.8
[Start]0.8 | \[ \left(cosTheta \cdot \sqrt{\pi} + -1 \cdot \left({cosTheta}^{3} \cdot \left(\left(-{\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right)}^{2} \cdot \sqrt{{\pi}^{3}}\right) + \pi \cdot \left(\sqrt{\frac{1}{\pi}} \cdot -1.5\right)\right) + {cosTheta}^{2} \cdot \left(\pi \cdot \left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right)\right)\right)\right) + \left(-\left(\left(-\sqrt{\pi} \cdot \left(\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right) \cdot \left(\left(-{\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right)}^{2} \cdot \sqrt{{\pi}^{3}}\right) + \pi \cdot \left(\sqrt{\frac{1}{\pi}} \cdot -1.5\right)\right)\right)\right) + \left(\left(-\sqrt{{\pi}^{3}} \cdot \left(\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right) \cdot \left(\sqrt{\frac{1}{\pi}} \cdot -1.5\right)\right)\right) + \left(\sqrt{\frac{1}{\pi}} \cdot \left(\pi \cdot 0.5\right) + 0\right)\right)\right) \cdot {cosTheta}^{4}\right)
\] |
|---|---|
rational_best_oopsla_all_46_json_45_simplify-85 [=>]0.8 | \[ \left(cosTheta \cdot \sqrt{\pi} + -1 \cdot \left({cosTheta}^{3} \cdot \left(\left(-{\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right)}^{2} \cdot \sqrt{{\pi}^{3}}\right) + \pi \cdot \left(\sqrt{\frac{1}{\pi}} \cdot -1.5\right)\right) + {cosTheta}^{2} \cdot \left(\pi \cdot \left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right)\right)\right)\right) + \left(-\left(\left(-\sqrt{\pi} \cdot \left(\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right) \cdot \left(\left(-{\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right)}^{2} \cdot \sqrt{{\pi}^{3}}\right) + \pi \cdot \left(\sqrt{\frac{1}{\pi}} \cdot -1.5\right)\right)\right)\right) + \left(\left(-\sqrt{{\pi}^{3}} \cdot \left(\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right) \cdot \left(\sqrt{\frac{1}{\pi}} \cdot -1.5\right)\right)\right) + \color{blue}{\sqrt{\frac{1}{\pi}} \cdot \left(\pi \cdot 0.5\right)}\right)\right) \cdot {cosTheta}^{4}\right)
\] |
rational_best_oopsla_all_46_json_45_simplify-7 [=>]0.8 | \[ \left(cosTheta \cdot \sqrt{\pi} + -1 \cdot \left({cosTheta}^{3} \cdot \left(\left(-{\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right)}^{2} \cdot \sqrt{{\pi}^{3}}\right) + \pi \cdot \left(\sqrt{\frac{1}{\pi}} \cdot -1.5\right)\right) + {cosTheta}^{2} \cdot \left(\pi \cdot \left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right)\right)\right)\right) + \left(-\left(\left(-\sqrt{\pi} \cdot \left(\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right) \cdot \left(\left(-{\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right)}^{2} \cdot \sqrt{{\pi}^{3}}\right) + \pi \cdot \left(\sqrt{\frac{1}{\pi}} \cdot -1.5\right)\right)\right)\right) + \left(\left(-\sqrt{{\pi}^{3}} \cdot \left(\left(\left(-\sqrt{\frac{1}{\pi}}\right) + \left(1 + c\right)\right) \cdot \left(\sqrt{\frac{1}{\pi}} \cdot -1.5\right)\right)\right) + \color{blue}{\pi \cdot \left(\sqrt{\frac{1}{\pi}} \cdot 0.5\right)}\right)\right) \cdot {cosTheta}^{4}\right)
\] |
Final simplification0.8
| Alternative 1 | |
|---|---|
| Error | 0.7 |
| Cost | 13472 |
| Alternative 2 | |
|---|---|
| Error | 0.8 |
| Cost | 13312 |
| Alternative 3 | |
|---|---|
| Error | 1.5 |
| Cost | 10208 |
| Alternative 4 | |
|---|---|
| Error | 1.6 |
| Cost | 6848 |
| Alternative 5 | |
|---|---|
| Error | 1.6 |
| Cost | 6784 |
| Alternative 6 | |
|---|---|
| Error | 2.2 |
| Cost | 6464 |
| Alternative 7 | |
|---|---|
| Error | 28.6 |
| Cost | 128 |
| Alternative 8 | |
|---|---|
| Error | 28.6 |
| Cost | 32 |
herbie shell --seed 2023090
(FPCore (cosTheta c)
:name "Beckmann Sample, normalization factor"
:precision binary32
:pre (and (and (< 0.0 cosTheta) (< cosTheta 0.9999)) (and (< -1.0 c) (< c 1.0)))
(/ 1.0 (+ (+ 1.0 c) (* (* (/ 1.0 (sqrt PI)) (/ (sqrt (- (- 1.0 cosTheta) cosTheta)) cosTheta)) (exp (* (- cosTheta) cosTheta))))))