
(FPCore (s r) :precision binary32 (+ (/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r)) (/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r))))
float code(float s, float r) {
return ((0.25f * expf((-r / s))) / (((2.0f * ((float) M_PI)) * s) * r)) + ((0.75f * expf((-r / (3.0f * s)))) / (((6.0f * ((float) M_PI)) * s) * r));
}
function code(s, r) return Float32(Float32(Float32(Float32(0.25) * exp(Float32(Float32(-r) / s))) / Float32(Float32(Float32(Float32(2.0) * Float32(pi)) * s) * r)) + Float32(Float32(Float32(0.75) * exp(Float32(Float32(-r) / Float32(Float32(3.0) * s)))) / Float32(Float32(Float32(Float32(6.0) * Float32(pi)) * s) * r))) end
function tmp = code(s, r) tmp = ((single(0.25) * exp((-r / s))) / (((single(2.0) * single(pi)) * s) * r)) + ((single(0.75) * exp((-r / (single(3.0) * s)))) / (((single(6.0) * single(pi)) * s) * r)); end
\begin{array}{l}
\\
\frac{0.25 \cdot e^{\frac{-r}{s}}}{\left(\left(2 \cdot \pi\right) \cdot s\right) \cdot r} + \frac{0.75 \cdot e^{\frac{-r}{3 \cdot s}}}{\left(\left(6 \cdot \pi\right) \cdot s\right) \cdot r}
\end{array}
Sampling outcomes in binary32 precision:
Herbie found 22 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (s r) :precision binary32 (+ (/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r)) (/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r))))
float code(float s, float r) {
return ((0.25f * expf((-r / s))) / (((2.0f * ((float) M_PI)) * s) * r)) + ((0.75f * expf((-r / (3.0f * s)))) / (((6.0f * ((float) M_PI)) * s) * r));
}
function code(s, r) return Float32(Float32(Float32(Float32(0.25) * exp(Float32(Float32(-r) / s))) / Float32(Float32(Float32(Float32(2.0) * Float32(pi)) * s) * r)) + Float32(Float32(Float32(0.75) * exp(Float32(Float32(-r) / Float32(Float32(3.0) * s)))) / Float32(Float32(Float32(Float32(6.0) * Float32(pi)) * s) * r))) end
function tmp = code(s, r) tmp = ((single(0.25) * exp((-r / s))) / (((single(2.0) * single(pi)) * s) * r)) + ((single(0.75) * exp((-r / (single(3.0) * s)))) / (((single(6.0) * single(pi)) * s) * r)); end
\begin{array}{l}
\\
\frac{0.25 \cdot e^{\frac{-r}{s}}}{\left(\left(2 \cdot \pi\right) \cdot s\right) \cdot r} + \frac{0.75 \cdot e^{\frac{-r}{3 \cdot s}}}{\left(\left(6 \cdot \pi\right) \cdot s\right) \cdot r}
\end{array}
(FPCore (s r)
:precision binary32
(/
1.0
(/
r
(+
(/ (/ 0.125 (* s PI)) (exp (/ r s)))
(* (/ 0.125 (* s (* PI (log E)))) (exp (/ (/ r s) -3.0)))))))
float code(float s, float r) {
return 1.0f / (r / (((0.125f / (s * ((float) M_PI))) / expf((r / s))) + ((0.125f / (s * (((float) M_PI) * logf(((float) M_E))))) * expf(((r / s) / -3.0f)))));
}
function code(s, r) return Float32(Float32(1.0) / Float32(r / Float32(Float32(Float32(Float32(0.125) / Float32(s * Float32(pi))) / exp(Float32(r / s))) + Float32(Float32(Float32(0.125) / Float32(s * Float32(Float32(pi) * log(Float32(exp(1)))))) * exp(Float32(Float32(r / s) / Float32(-3.0))))))) end
function tmp = code(s, r) tmp = single(1.0) / (r / (((single(0.125) / (s * single(pi))) / exp((r / s))) + ((single(0.125) / (s * (single(pi) * log(single(2.71828182845904523536))))) * exp(((r / s) / single(-3.0)))))); end
\begin{array}{l}
\\
\frac{1}{\frac{r}{\frac{\frac{0.125}{s \cdot \pi}}{e^{\frac{r}{s}}} + \frac{0.125}{s \cdot \left(\pi \cdot \log e\right)} \cdot e^{\frac{\frac{r}{s}}{-3}}}}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Applied egg-rr99.7%
add-log-expN/A
*-un-lft-identityN/A
exp-prodN/A
log-powN/A
*-lowering-*.f32N/A
PI-lowering-PI.f32N/A
log-lowering-log.f32N/A
exp-1-eN/A
E-lowering-E.f3299.7%
Applied egg-rr99.7%
(FPCore (s r) :precision binary32 (let* ((t_0 (/ 0.125 (* s PI)))) (/ 1.0 (/ r (+ (/ t_0 (exp (/ r s))) (* t_0 (exp (/ (/ r s) -3.0))))))))
float code(float s, float r) {
float t_0 = 0.125f / (s * ((float) M_PI));
return 1.0f / (r / ((t_0 / expf((r / s))) + (t_0 * expf(((r / s) / -3.0f)))));
}
function code(s, r) t_0 = Float32(Float32(0.125) / Float32(s * Float32(pi))) return Float32(Float32(1.0) / Float32(r / Float32(Float32(t_0 / exp(Float32(r / s))) + Float32(t_0 * exp(Float32(Float32(r / s) / Float32(-3.0))))))) end
function tmp = code(s, r) t_0 = single(0.125) / (s * single(pi)); tmp = single(1.0) / (r / ((t_0 / exp((r / s))) + (t_0 * exp(((r / s) / single(-3.0)))))); end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{0.125}{s \cdot \pi}\\
\frac{1}{\frac{r}{\frac{t\_0}{e^{\frac{r}{s}}} + t\_0 \cdot e^{\frac{\frac{r}{s}}{-3}}}}
\end{array}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Applied egg-rr99.7%
(FPCore (s r) :precision binary32 (+ (/ (/ (/ 0.125 (* s PI)) (exp (/ r s))) r) (* (/ (exp (* (/ r s) -0.3333333333333333)) (* r PI)) (/ 0.125 s))))
float code(float s, float r) {
return (((0.125f / (s * ((float) M_PI))) / expf((r / s))) / r) + ((expf(((r / s) * -0.3333333333333333f)) / (r * ((float) M_PI))) * (0.125f / s));
}
function code(s, r) return Float32(Float32(Float32(Float32(Float32(0.125) / Float32(s * Float32(pi))) / exp(Float32(r / s))) / r) + Float32(Float32(exp(Float32(Float32(r / s) * Float32(-0.3333333333333333))) / Float32(r * Float32(pi))) * Float32(Float32(0.125) / s))) end
function tmp = code(s, r) tmp = (((single(0.125) / (s * single(pi))) / exp((r / s))) / r) + ((exp(((r / s) * single(-0.3333333333333333))) / (r * single(pi))) * (single(0.125) / s)); end
\begin{array}{l}
\\
\frac{\frac{\frac{0.125}{s \cdot \pi}}{e^{\frac{r}{s}}}}{r} + \frac{e^{\frac{r}{s} \cdot -0.3333333333333333}}{r \cdot \pi} \cdot \frac{0.125}{s}
\end{array}
Initial program 99.6%
times-fracN/A
associate-*r/N/A
/-lowering-/.f32N/A
Applied egg-rr99.6%
Taylor expanded in r around inf
*-commutativeN/A
associate-*l/N/A
*-commutativeN/A
associate-*r*N/A
times-fracN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
exp-lowering-exp.f32N/A
*-commutativeN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f32N/A
/-lowering-/.f3299.7%
Simplified99.7%
(FPCore (s r) :precision binary32 (/ (+ (/ 0.125 (* (* s PI) (exp (/ r s)))) (* 0.125 (/ (exp (* (/ r s) -0.3333333333333333)) (* s PI)))) r))
float code(float s, float r) {
return ((0.125f / ((s * ((float) M_PI)) * expf((r / s)))) + (0.125f * (expf(((r / s) * -0.3333333333333333f)) / (s * ((float) M_PI))))) / r;
}
function code(s, r) return Float32(Float32(Float32(Float32(0.125) / Float32(Float32(s * Float32(pi)) * exp(Float32(r / s)))) + Float32(Float32(0.125) * Float32(exp(Float32(Float32(r / s) * Float32(-0.3333333333333333))) / Float32(s * Float32(pi))))) / r) end
function tmp = code(s, r) tmp = ((single(0.125) / ((s * single(pi)) * exp((r / s)))) + (single(0.125) * (exp(((r / s) * single(-0.3333333333333333))) / (s * single(pi))))) / r; end
\begin{array}{l}
\\
\frac{\frac{0.125}{\left(s \cdot \pi\right) \cdot e^{\frac{r}{s}}} + 0.125 \cdot \frac{e^{\frac{r}{s} \cdot -0.3333333333333333}}{s \cdot \pi}}{r}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Taylor expanded in s around 0
Simplified99.6%
Final simplification99.6%
(FPCore (s r) :precision binary32 (/ 1.0 (/ r (* (/ 0.125 (* s PI)) (+ (exp (/ (/ r s) -3.0)) (exp (- 0.0 (/ r s))))))))
float code(float s, float r) {
return 1.0f / (r / ((0.125f / (s * ((float) M_PI))) * (expf(((r / s) / -3.0f)) + expf((0.0f - (r / s))))));
}
function code(s, r) return Float32(Float32(1.0) / Float32(r / Float32(Float32(Float32(0.125) / Float32(s * Float32(pi))) * Float32(exp(Float32(Float32(r / s) / Float32(-3.0))) + exp(Float32(Float32(0.0) - Float32(r / s))))))) end
function tmp = code(s, r) tmp = single(1.0) / (r / ((single(0.125) / (s * single(pi))) * (exp(((r / s) / single(-3.0))) + exp((single(0.0) - (r / s)))))); end
\begin{array}{l}
\\
\frac{1}{\frac{r}{\frac{0.125}{s \cdot \pi} \cdot \left(e^{\frac{\frac{r}{s}}{-3}} + e^{0 - \frac{r}{s}}\right)}}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Applied egg-rr99.7%
+-commutativeN/A
div-invN/A
rec-expN/A
distribute-frac-negN/A
distribute-lft-outN/A
*-lowering-*.f32N/A
*-commutativeN/A
/-lowering-/.f32N/A
*-commutativeN/A
*-lowering-*.f32N/A
PI-lowering-PI.f32N/A
+-lowering-+.f32N/A
exp-lowering-exp.f32N/A
/-lowering-/.f32N/A
/-lowering-/.f32N/A
distribute-frac-negN/A
Applied egg-rr99.6%
Final simplification99.6%
(FPCore (s r) :precision binary32 (/ (* (/ 0.125 (* s PI)) (+ (exp (/ (/ r s) -3.0)) (exp (- 0.0 (/ r s))))) r))
float code(float s, float r) {
return ((0.125f / (s * ((float) M_PI))) * (expf(((r / s) / -3.0f)) + expf((0.0f - (r / s))))) / r;
}
function code(s, r) return Float32(Float32(Float32(Float32(0.125) / Float32(s * Float32(pi))) * Float32(exp(Float32(Float32(r / s) / Float32(-3.0))) + exp(Float32(Float32(0.0) - Float32(r / s))))) / r) end
function tmp = code(s, r) tmp = ((single(0.125) / (s * single(pi))) * (exp(((r / s) / single(-3.0))) + exp((single(0.0) - (r / s))))) / r; end
\begin{array}{l}
\\
\frac{\frac{0.125}{s \cdot \pi} \cdot \left(e^{\frac{\frac{r}{s}}{-3}} + e^{0 - \frac{r}{s}}\right)}{r}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Applied egg-rr99.7%
clear-numN/A
/-lowering-/.f32N/A
Applied egg-rr99.6%
Final simplification99.6%
(FPCore (s r)
:precision binary32
(let* ((t_0 (/ (* PI 0.7407407407407407) s))
(t_1 (* (/ PI s) 0.6666666666666666))
(t_2 (* (/ PI s) -0.4444444444444444))
(t_3 (* s (* PI 4.0))))
(if (<= s 4.9999998413276127e-20)
(/
1.0
(*
r
(+
t_3
(*
r
(+
(* r (+ (* r (* (/ PI (* s s)) 0.04938271604938271)) t_1))
(* PI 2.6666666666666665))))))
(/
1.0
(*
r
(+
t_3
(*
r
(+
(* PI 2.6666666666666665)
(*
r
(+
t_1
(*
r
(-
(*
(*
(+ (/ t_2 s) (/ 0.7407407407407407 (* s (/ s PI))))
(/ (- t_2 t_0) s))
(/ 1.0 (/ (- t_0 t_2) s)))
(/ (* PI -0.345679012345679) (* s s))))))))))))))
float code(float s, float r) {
float t_0 = (((float) M_PI) * 0.7407407407407407f) / s;
float t_1 = (((float) M_PI) / s) * 0.6666666666666666f;
float t_2 = (((float) M_PI) / s) * -0.4444444444444444f;
float t_3 = s * (((float) M_PI) * 4.0f);
float tmp;
if (s <= 4.9999998413276127e-20f) {
tmp = 1.0f / (r * (t_3 + (r * ((r * ((r * ((((float) M_PI) / (s * s)) * 0.04938271604938271f)) + t_1)) + (((float) M_PI) * 2.6666666666666665f)))));
} else {
tmp = 1.0f / (r * (t_3 + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (t_1 + (r * (((((t_2 / s) + (0.7407407407407407f / (s * (s / ((float) M_PI))))) * ((t_2 - t_0) / s)) * (1.0f / ((t_0 - t_2) / s))) - ((((float) M_PI) * -0.345679012345679f) / (s * s))))))))));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(Float32(pi) * Float32(0.7407407407407407)) / s) t_1 = Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)) t_2 = Float32(Float32(Float32(pi) / s) * Float32(-0.4444444444444444)) t_3 = Float32(s * Float32(Float32(pi) * Float32(4.0))) tmp = Float32(0.0) if (s <= Float32(4.9999998413276127e-20)) tmp = Float32(Float32(1.0) / Float32(r * Float32(t_3 + Float32(r * Float32(Float32(r * Float32(Float32(r * Float32(Float32(Float32(pi) / Float32(s * s)) * Float32(0.04938271604938271))) + t_1)) + Float32(Float32(pi) * Float32(2.6666666666666665))))))); else tmp = Float32(Float32(1.0) / Float32(r * Float32(t_3 + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(t_1 + Float32(r * Float32(Float32(Float32(Float32(Float32(t_2 / s) + Float32(Float32(0.7407407407407407) / Float32(s * Float32(s / Float32(pi))))) * Float32(Float32(t_2 - t_0) / s)) * Float32(Float32(1.0) / Float32(Float32(t_0 - t_2) / s))) - Float32(Float32(Float32(pi) * Float32(-0.345679012345679)) / Float32(s * s))))))))))); end return tmp end
function tmp_2 = code(s, r) t_0 = (single(pi) * single(0.7407407407407407)) / s; t_1 = (single(pi) / s) * single(0.6666666666666666); t_2 = (single(pi) / s) * single(-0.4444444444444444); t_3 = s * (single(pi) * single(4.0)); tmp = single(0.0); if (s <= single(4.9999998413276127e-20)) tmp = single(1.0) / (r * (t_3 + (r * ((r * ((r * ((single(pi) / (s * s)) * single(0.04938271604938271))) + t_1)) + (single(pi) * single(2.6666666666666665)))))); else tmp = single(1.0) / (r * (t_3 + (r * ((single(pi) * single(2.6666666666666665)) + (r * (t_1 + (r * (((((t_2 / s) + (single(0.7407407407407407) / (s * (s / single(pi))))) * ((t_2 - t_0) / s)) * (single(1.0) / ((t_0 - t_2) / s))) - ((single(pi) * single(-0.345679012345679)) / (s * s)))))))))); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi \cdot 0.7407407407407407}{s}\\
t_1 := \frac{\pi}{s} \cdot 0.6666666666666666\\
t_2 := \frac{\pi}{s} \cdot -0.4444444444444444\\
t_3 := s \cdot \left(\pi \cdot 4\right)\\
\mathbf{if}\;s \leq 4.9999998413276127 \cdot 10^{-20}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_3 + r \cdot \left(r \cdot \left(r \cdot \left(\frac{\pi}{s \cdot s} \cdot 0.04938271604938271\right) + t\_1\right) + \pi \cdot 2.6666666666666665\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_3 + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(t\_1 + r \cdot \left(\left(\left(\frac{t\_2}{s} + \frac{0.7407407407407407}{s \cdot \frac{s}{\pi}}\right) \cdot \frac{t\_2 - t\_0}{s}\right) \cdot \frac{1}{\frac{t\_0 - t\_2}{s}} - \frac{\pi \cdot -0.345679012345679}{s \cdot s}\right)\right)\right)\right)}\\
\end{array}
\end{array}
if s < 4.99999984e-20Initial program 100.0%
Applied egg-rr100.0%
Applied egg-rr100.0%
Taylor expanded in r around 0
Simplified-0.0%
Taylor expanded in r around 0
mul-1-negN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
*-commutativeN/A
distribute-rgt-outN/A
distribute-lft-outN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
unpow2N/A
*-lowering-*.f32N/A
metadata-evalN/A
metadata-evalN/A
Simplified100.0%
if 4.99999984e-20 < s Initial program 99.3%
Applied egg-rr99.3%
Applied egg-rr99.4%
Taylor expanded in r around 0
Simplified33.5%
flip-+N/A
div-invN/A
*-lowering-*.f32N/A
Applied egg-rr60.8%
Final simplification79.0%
(FPCore (s r)
:precision binary32
(let* ((t_0 (/ (* PI 0.7407407407407407) s))
(t_1 (* (/ PI s) 0.6666666666666666))
(t_2 (* (/ PI s) -0.4444444444444444))
(t_3 (* s (* PI 4.0))))
(if (<= s 4.9999998413276127e-20)
(/
1.0
(*
r
(+
t_3
(*
r
(+
(* r (+ (* r (* (/ PI (* s s)) 0.04938271604938271)) t_1))
(* PI 2.6666666666666665))))))
(/
1.0
(*
r
(+
t_3
(*
r
(+
(* PI 2.6666666666666665)
(*
r
(+
t_1
(*
r
(-
(/
(*
(+ (/ t_2 s) (/ 0.7407407407407407 (* s (/ s PI))))
(/ (- t_2 t_0) s))
(/ (- t_0 t_2) s))
(/ (* PI -0.345679012345679) (* s s))))))))))))))
float code(float s, float r) {
float t_0 = (((float) M_PI) * 0.7407407407407407f) / s;
float t_1 = (((float) M_PI) / s) * 0.6666666666666666f;
float t_2 = (((float) M_PI) / s) * -0.4444444444444444f;
float t_3 = s * (((float) M_PI) * 4.0f);
float tmp;
if (s <= 4.9999998413276127e-20f) {
tmp = 1.0f / (r * (t_3 + (r * ((r * ((r * ((((float) M_PI) / (s * s)) * 0.04938271604938271f)) + t_1)) + (((float) M_PI) * 2.6666666666666665f)))));
} else {
tmp = 1.0f / (r * (t_3 + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (t_1 + (r * (((((t_2 / s) + (0.7407407407407407f / (s * (s / ((float) M_PI))))) * ((t_2 - t_0) / s)) / ((t_0 - t_2) / s)) - ((((float) M_PI) * -0.345679012345679f) / (s * s))))))))));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(Float32(pi) * Float32(0.7407407407407407)) / s) t_1 = Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)) t_2 = Float32(Float32(Float32(pi) / s) * Float32(-0.4444444444444444)) t_3 = Float32(s * Float32(Float32(pi) * Float32(4.0))) tmp = Float32(0.0) if (s <= Float32(4.9999998413276127e-20)) tmp = Float32(Float32(1.0) / Float32(r * Float32(t_3 + Float32(r * Float32(Float32(r * Float32(Float32(r * Float32(Float32(Float32(pi) / Float32(s * s)) * Float32(0.04938271604938271))) + t_1)) + Float32(Float32(pi) * Float32(2.6666666666666665))))))); else tmp = Float32(Float32(1.0) / Float32(r * Float32(t_3 + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(t_1 + Float32(r * Float32(Float32(Float32(Float32(Float32(t_2 / s) + Float32(Float32(0.7407407407407407) / Float32(s * Float32(s / Float32(pi))))) * Float32(Float32(t_2 - t_0) / s)) / Float32(Float32(t_0 - t_2) / s)) - Float32(Float32(Float32(pi) * Float32(-0.345679012345679)) / Float32(s * s))))))))))); end return tmp end
function tmp_2 = code(s, r) t_0 = (single(pi) * single(0.7407407407407407)) / s; t_1 = (single(pi) / s) * single(0.6666666666666666); t_2 = (single(pi) / s) * single(-0.4444444444444444); t_3 = s * (single(pi) * single(4.0)); tmp = single(0.0); if (s <= single(4.9999998413276127e-20)) tmp = single(1.0) / (r * (t_3 + (r * ((r * ((r * ((single(pi) / (s * s)) * single(0.04938271604938271))) + t_1)) + (single(pi) * single(2.6666666666666665)))))); else tmp = single(1.0) / (r * (t_3 + (r * ((single(pi) * single(2.6666666666666665)) + (r * (t_1 + (r * (((((t_2 / s) + (single(0.7407407407407407) / (s * (s / single(pi))))) * ((t_2 - t_0) / s)) / ((t_0 - t_2) / s)) - ((single(pi) * single(-0.345679012345679)) / (s * s)))))))))); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi \cdot 0.7407407407407407}{s}\\
t_1 := \frac{\pi}{s} \cdot 0.6666666666666666\\
t_2 := \frac{\pi}{s} \cdot -0.4444444444444444\\
t_3 := s \cdot \left(\pi \cdot 4\right)\\
\mathbf{if}\;s \leq 4.9999998413276127 \cdot 10^{-20}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_3 + r \cdot \left(r \cdot \left(r \cdot \left(\frac{\pi}{s \cdot s} \cdot 0.04938271604938271\right) + t\_1\right) + \pi \cdot 2.6666666666666665\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_3 + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(t\_1 + r \cdot \left(\frac{\left(\frac{t\_2}{s} + \frac{0.7407407407407407}{s \cdot \frac{s}{\pi}}\right) \cdot \frac{t\_2 - t\_0}{s}}{\frac{t\_0 - t\_2}{s}} - \frac{\pi \cdot -0.345679012345679}{s \cdot s}\right)\right)\right)\right)}\\
\end{array}
\end{array}
if s < 4.99999984e-20Initial program 100.0%
Applied egg-rr100.0%
Applied egg-rr100.0%
Taylor expanded in r around 0
Simplified-0.0%
Taylor expanded in r around 0
mul-1-negN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
*-commutativeN/A
distribute-rgt-outN/A
distribute-lft-outN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
unpow2N/A
*-lowering-*.f32N/A
metadata-evalN/A
metadata-evalN/A
Simplified100.0%
if 4.99999984e-20 < s Initial program 99.3%
Applied egg-rr99.3%
Applied egg-rr99.4%
Taylor expanded in r around 0
Simplified33.5%
flip-+N/A
/-lowering-/.f32N/A
Applied egg-rr60.8%
Final simplification79.0%
(FPCore (s r)
:precision binary32
(let* ((t_0 (/ (* s s) (* PI -0.345679012345679)))
(t_1 (* s (* s s)))
(t_2 (* (/ PI s) 0.6666666666666666))
(t_3 (* s (* PI 4.0)))
(t_4
(+
(* (* s s) (* (/ PI s) -0.4444444444444444))
(* (* s PI) 0.7407407407407407))))
(if (<= s 4.9999998413276127e-20)
(/
1.0
(*
r
(+
t_3
(*
r
(+
(* r (+ (* r (* (/ PI (* s s)) 0.04938271604938271)) t_2))
(* PI 2.6666666666666665))))))
(if (<= s 1.0000000036274937e-15)
(/
1.0
(*
r
(+
t_3
(*
r
(+
(* PI 2.6666666666666665)
(*
r
(-
t_2
(*
r
(+ (/ (* PI -0.345679012345679) (* s s)) (/ t_4 t_1))))))))))
(/
1.0
(*
r
(+
t_3
(*
r
(+
(* PI 2.6666666666666665)
(* r (- t_2 (* r (/ (+ t_1 (* t_4 t_0)) (* t_1 t_0))))))))))))))
float code(float s, float r) {
float t_0 = (s * s) / (((float) M_PI) * -0.345679012345679f);
float t_1 = s * (s * s);
float t_2 = (((float) M_PI) / s) * 0.6666666666666666f;
float t_3 = s * (((float) M_PI) * 4.0f);
float t_4 = ((s * s) * ((((float) M_PI) / s) * -0.4444444444444444f)) + ((s * ((float) M_PI)) * 0.7407407407407407f);
float tmp;
if (s <= 4.9999998413276127e-20f) {
tmp = 1.0f / (r * (t_3 + (r * ((r * ((r * ((((float) M_PI) / (s * s)) * 0.04938271604938271f)) + t_2)) + (((float) M_PI) * 2.6666666666666665f)))));
} else if (s <= 1.0000000036274937e-15f) {
tmp = 1.0f / (r * (t_3 + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (t_2 - (r * (((((float) M_PI) * -0.345679012345679f) / (s * s)) + (t_4 / t_1)))))))));
} else {
tmp = 1.0f / (r * (t_3 + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (t_2 - (r * ((t_1 + (t_4 * t_0)) / (t_1 * t_0)))))))));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(s * s) / Float32(Float32(pi) * Float32(-0.345679012345679))) t_1 = Float32(s * Float32(s * s)) t_2 = Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)) t_3 = Float32(s * Float32(Float32(pi) * Float32(4.0))) t_4 = Float32(Float32(Float32(s * s) * Float32(Float32(Float32(pi) / s) * Float32(-0.4444444444444444))) + Float32(Float32(s * Float32(pi)) * Float32(0.7407407407407407))) tmp = Float32(0.0) if (s <= Float32(4.9999998413276127e-20)) tmp = Float32(Float32(1.0) / Float32(r * Float32(t_3 + Float32(r * Float32(Float32(r * Float32(Float32(r * Float32(Float32(Float32(pi) / Float32(s * s)) * Float32(0.04938271604938271))) + t_2)) + Float32(Float32(pi) * Float32(2.6666666666666665))))))); elseif (s <= Float32(1.0000000036274937e-15)) tmp = Float32(Float32(1.0) / Float32(r * Float32(t_3 + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(t_2 - Float32(r * Float32(Float32(Float32(Float32(pi) * Float32(-0.345679012345679)) / Float32(s * s)) + Float32(t_4 / t_1)))))))))); else tmp = Float32(Float32(1.0) / Float32(r * Float32(t_3 + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(t_2 - Float32(r * Float32(Float32(t_1 + Float32(t_4 * t_0)) / Float32(t_1 * t_0)))))))))); end return tmp end
function tmp_2 = code(s, r) t_0 = (s * s) / (single(pi) * single(-0.345679012345679)); t_1 = s * (s * s); t_2 = (single(pi) / s) * single(0.6666666666666666); t_3 = s * (single(pi) * single(4.0)); t_4 = ((s * s) * ((single(pi) / s) * single(-0.4444444444444444))) + ((s * single(pi)) * single(0.7407407407407407)); tmp = single(0.0); if (s <= single(4.9999998413276127e-20)) tmp = single(1.0) / (r * (t_3 + (r * ((r * ((r * ((single(pi) / (s * s)) * single(0.04938271604938271))) + t_2)) + (single(pi) * single(2.6666666666666665)))))); elseif (s <= single(1.0000000036274937e-15)) tmp = single(1.0) / (r * (t_3 + (r * ((single(pi) * single(2.6666666666666665)) + (r * (t_2 - (r * (((single(pi) * single(-0.345679012345679)) / (s * s)) + (t_4 / t_1))))))))); else tmp = single(1.0) / (r * (t_3 + (r * ((single(pi) * single(2.6666666666666665)) + (r * (t_2 - (r * ((t_1 + (t_4 * t_0)) / (t_1 * t_0))))))))); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{s \cdot s}{\pi \cdot -0.345679012345679}\\
t_1 := s \cdot \left(s \cdot s\right)\\
t_2 := \frac{\pi}{s} \cdot 0.6666666666666666\\
t_3 := s \cdot \left(\pi \cdot 4\right)\\
t_4 := \left(s \cdot s\right) \cdot \left(\frac{\pi}{s} \cdot -0.4444444444444444\right) + \left(s \cdot \pi\right) \cdot 0.7407407407407407\\
\mathbf{if}\;s \leq 4.9999998413276127 \cdot 10^{-20}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_3 + r \cdot \left(r \cdot \left(r \cdot \left(\frac{\pi}{s \cdot s} \cdot 0.04938271604938271\right) + t\_2\right) + \pi \cdot 2.6666666666666665\right)\right)}\\
\mathbf{elif}\;s \leq 1.0000000036274937 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_3 + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(t\_2 - r \cdot \left(\frac{\pi \cdot -0.345679012345679}{s \cdot s} + \frac{t\_4}{t\_1}\right)\right)\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_3 + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(t\_2 - r \cdot \frac{t\_1 + t\_4 \cdot t\_0}{t\_1 \cdot t\_0}\right)\right)\right)}\\
\end{array}
\end{array}
if s < 4.99999984e-20Initial program 100.0%
Applied egg-rr100.0%
Applied egg-rr100.0%
Taylor expanded in r around 0
Simplified-0.0%
Taylor expanded in r around 0
mul-1-negN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
*-commutativeN/A
distribute-rgt-outN/A
distribute-lft-outN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
unpow2N/A
*-lowering-*.f32N/A
metadata-evalN/A
metadata-evalN/A
Simplified100.0%
if 4.99999984e-20 < s < 1e-15Initial program 100.0%
Applied egg-rr100.0%
Applied egg-rr100.0%
Taylor expanded in r around 0
Simplified50.3%
frac-addN/A
/-lowering-/.f32N/A
Applied egg-rr100.0%
if 1e-15 < s Initial program 99.0%
Applied egg-rr99.1%
Applied egg-rr99.2%
Taylor expanded in r around 0
Simplified28.4%
+-commutativeN/A
frac-addN/A
clear-numN/A
frac-addN/A
/-lowering-/.f32N/A
Applied egg-rr52.4%
Final simplification80.5%
(FPCore (s r)
:precision binary32
(let* ((t_0 (* s (* s s)))
(t_1 (* (/ PI s) 0.6666666666666666))
(t_2 (* s (* PI 4.0)))
(t_3
(+
(* (* s s) (* (/ PI s) -0.4444444444444444))
(* (* s PI) 0.7407407407407407))))
(if (<= s 4.9999998413276127e-20)
(/
1.0
(*
r
(+
t_2
(*
r
(+
(* r (+ (* r (* (/ PI (* s s)) 0.04938271604938271)) t_1))
(* PI 2.6666666666666665))))))
(if (<= s 2.0000000072549875e-15)
(/
1.0
(*
r
(+
t_2
(*
r
(+
(* PI 2.6666666666666665)
(*
r
(-
t_1
(*
r
(+ (/ (* PI -0.345679012345679) (* s s)) (/ t_3 t_0))))))))))
(/
1.0
(*
r
(+
t_2
(*
r
(+
(* PI 2.6666666666666665)
(*
r
(-
t_1
(*
r
(/
(+ (* (* s s) t_3) (* t_0 (* PI -0.345679012345679)))
(* (* s s) t_0))))))))))))))
float code(float s, float r) {
float t_0 = s * (s * s);
float t_1 = (((float) M_PI) / s) * 0.6666666666666666f;
float t_2 = s * (((float) M_PI) * 4.0f);
float t_3 = ((s * s) * ((((float) M_PI) / s) * -0.4444444444444444f)) + ((s * ((float) M_PI)) * 0.7407407407407407f);
float tmp;
if (s <= 4.9999998413276127e-20f) {
tmp = 1.0f / (r * (t_2 + (r * ((r * ((r * ((((float) M_PI) / (s * s)) * 0.04938271604938271f)) + t_1)) + (((float) M_PI) * 2.6666666666666665f)))));
} else if (s <= 2.0000000072549875e-15f) {
tmp = 1.0f / (r * (t_2 + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (t_1 - (r * (((((float) M_PI) * -0.345679012345679f) / (s * s)) + (t_3 / t_0)))))))));
} else {
tmp = 1.0f / (r * (t_2 + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (t_1 - (r * ((((s * s) * t_3) + (t_0 * (((float) M_PI) * -0.345679012345679f))) / ((s * s) * t_0)))))))));
}
return tmp;
}
function code(s, r) t_0 = Float32(s * Float32(s * s)) t_1 = Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)) t_2 = Float32(s * Float32(Float32(pi) * Float32(4.0))) t_3 = Float32(Float32(Float32(s * s) * Float32(Float32(Float32(pi) / s) * Float32(-0.4444444444444444))) + Float32(Float32(s * Float32(pi)) * Float32(0.7407407407407407))) tmp = Float32(0.0) if (s <= Float32(4.9999998413276127e-20)) tmp = Float32(Float32(1.0) / Float32(r * Float32(t_2 + Float32(r * Float32(Float32(r * Float32(Float32(r * Float32(Float32(Float32(pi) / Float32(s * s)) * Float32(0.04938271604938271))) + t_1)) + Float32(Float32(pi) * Float32(2.6666666666666665))))))); elseif (s <= Float32(2.0000000072549875e-15)) tmp = Float32(Float32(1.0) / Float32(r * Float32(t_2 + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(t_1 - Float32(r * Float32(Float32(Float32(Float32(pi) * Float32(-0.345679012345679)) / Float32(s * s)) + Float32(t_3 / t_0)))))))))); else tmp = Float32(Float32(1.0) / Float32(r * Float32(t_2 + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(t_1 - Float32(r * Float32(Float32(Float32(Float32(s * s) * t_3) + Float32(t_0 * Float32(Float32(pi) * Float32(-0.345679012345679)))) / Float32(Float32(s * s) * t_0)))))))))); end return tmp end
function tmp_2 = code(s, r) t_0 = s * (s * s); t_1 = (single(pi) / s) * single(0.6666666666666666); t_2 = s * (single(pi) * single(4.0)); t_3 = ((s * s) * ((single(pi) / s) * single(-0.4444444444444444))) + ((s * single(pi)) * single(0.7407407407407407)); tmp = single(0.0); if (s <= single(4.9999998413276127e-20)) tmp = single(1.0) / (r * (t_2 + (r * ((r * ((r * ((single(pi) / (s * s)) * single(0.04938271604938271))) + t_1)) + (single(pi) * single(2.6666666666666665)))))); elseif (s <= single(2.0000000072549875e-15)) tmp = single(1.0) / (r * (t_2 + (r * ((single(pi) * single(2.6666666666666665)) + (r * (t_1 - (r * (((single(pi) * single(-0.345679012345679)) / (s * s)) + (t_3 / t_0))))))))); else tmp = single(1.0) / (r * (t_2 + (r * ((single(pi) * single(2.6666666666666665)) + (r * (t_1 - (r * ((((s * s) * t_3) + (t_0 * (single(pi) * single(-0.345679012345679)))) / ((s * s) * t_0))))))))); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := s \cdot \left(s \cdot s\right)\\
t_1 := \frac{\pi}{s} \cdot 0.6666666666666666\\
t_2 := s \cdot \left(\pi \cdot 4\right)\\
t_3 := \left(s \cdot s\right) \cdot \left(\frac{\pi}{s} \cdot -0.4444444444444444\right) + \left(s \cdot \pi\right) \cdot 0.7407407407407407\\
\mathbf{if}\;s \leq 4.9999998413276127 \cdot 10^{-20}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_2 + r \cdot \left(r \cdot \left(r \cdot \left(\frac{\pi}{s \cdot s} \cdot 0.04938271604938271\right) + t\_1\right) + \pi \cdot 2.6666666666666665\right)\right)}\\
\mathbf{elif}\;s \leq 2.0000000072549875 \cdot 10^{-15}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_2 + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(t\_1 - r \cdot \left(\frac{\pi \cdot -0.345679012345679}{s \cdot s} + \frac{t\_3}{t\_0}\right)\right)\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_2 + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(t\_1 - r \cdot \frac{\left(s \cdot s\right) \cdot t\_3 + t\_0 \cdot \left(\pi \cdot -0.345679012345679\right)}{\left(s \cdot s\right) \cdot t\_0}\right)\right)\right)}\\
\end{array}
\end{array}
if s < 4.99999984e-20Initial program 100.0%
Applied egg-rr100.0%
Applied egg-rr100.0%
Taylor expanded in r around 0
Simplified-0.0%
Taylor expanded in r around 0
mul-1-negN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
*-commutativeN/A
distribute-rgt-outN/A
distribute-lft-outN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
unpow2N/A
*-lowering-*.f32N/A
metadata-evalN/A
metadata-evalN/A
Simplified100.0%
if 4.99999984e-20 < s < 2.00000001e-15Initial program 100.0%
Applied egg-rr100.0%
Applied egg-rr100.0%
Taylor expanded in r around 0
Simplified51.8%
frac-addN/A
/-lowering-/.f32N/A
Applied egg-rr100.0%
if 2.00000001e-15 < s Initial program 99.0%
Applied egg-rr99.1%
Applied egg-rr99.2%
Taylor expanded in r around 0
Simplified27.7%
Applied egg-rr51.9%
Final simplification80.5%
(FPCore (s r)
:precision binary32
(let* ((t_0 (* (/ PI s) 0.6666666666666666))
(t_1 (* s (* PI 4.0)))
(t_2 (/ s (* (/ PI s) -0.4444444444444444))))
(if (<= s 4.9999998413276127e-20)
(/
1.0
(*
r
(+
t_1
(*
r
(+
(* r (+ (* r (* (/ PI (* s s)) 0.04938271604938271)) t_0))
(* PI 2.6666666666666665))))))
(/
1.0
(*
r
(+
t_1
(*
r
(+
(* PI 2.6666666666666665)
(*
r
(-
t_0
(*
r
(+
(/ (* PI -0.345679012345679) (* s s))
(/
(+ (* s s) (* (* PI 0.7407407407407407) t_2))
(* (* s s) t_2))))))))))))))
float code(float s, float r) {
float t_0 = (((float) M_PI) / s) * 0.6666666666666666f;
float t_1 = s * (((float) M_PI) * 4.0f);
float t_2 = s / ((((float) M_PI) / s) * -0.4444444444444444f);
float tmp;
if (s <= 4.9999998413276127e-20f) {
tmp = 1.0f / (r * (t_1 + (r * ((r * ((r * ((((float) M_PI) / (s * s)) * 0.04938271604938271f)) + t_0)) + (((float) M_PI) * 2.6666666666666665f)))));
} else {
tmp = 1.0f / (r * (t_1 + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (t_0 - (r * (((((float) M_PI) * -0.345679012345679f) / (s * s)) + (((s * s) + ((((float) M_PI) * 0.7407407407407407f) * t_2)) / ((s * s) * t_2))))))))));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)) t_1 = Float32(s * Float32(Float32(pi) * Float32(4.0))) t_2 = Float32(s / Float32(Float32(Float32(pi) / s) * Float32(-0.4444444444444444))) tmp = Float32(0.0) if (s <= Float32(4.9999998413276127e-20)) tmp = Float32(Float32(1.0) / Float32(r * Float32(t_1 + Float32(r * Float32(Float32(r * Float32(Float32(r * Float32(Float32(Float32(pi) / Float32(s * s)) * Float32(0.04938271604938271))) + t_0)) + Float32(Float32(pi) * Float32(2.6666666666666665))))))); else tmp = Float32(Float32(1.0) / Float32(r * Float32(t_1 + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(t_0 - Float32(r * Float32(Float32(Float32(Float32(pi) * Float32(-0.345679012345679)) / Float32(s * s)) + Float32(Float32(Float32(s * s) + Float32(Float32(Float32(pi) * Float32(0.7407407407407407)) * t_2)) / Float32(Float32(s * s) * t_2))))))))))); end return tmp end
function tmp_2 = code(s, r) t_0 = (single(pi) / s) * single(0.6666666666666666); t_1 = s * (single(pi) * single(4.0)); t_2 = s / ((single(pi) / s) * single(-0.4444444444444444)); tmp = single(0.0); if (s <= single(4.9999998413276127e-20)) tmp = single(1.0) / (r * (t_1 + (r * ((r * ((r * ((single(pi) / (s * s)) * single(0.04938271604938271))) + t_0)) + (single(pi) * single(2.6666666666666665)))))); else tmp = single(1.0) / (r * (t_1 + (r * ((single(pi) * single(2.6666666666666665)) + (r * (t_0 - (r * (((single(pi) * single(-0.345679012345679)) / (s * s)) + (((s * s) + ((single(pi) * single(0.7407407407407407)) * t_2)) / ((s * s) * t_2)))))))))); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi}{s} \cdot 0.6666666666666666\\
t_1 := s \cdot \left(\pi \cdot 4\right)\\
t_2 := \frac{s}{\frac{\pi}{s} \cdot -0.4444444444444444}\\
\mathbf{if}\;s \leq 4.9999998413276127 \cdot 10^{-20}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_1 + r \cdot \left(r \cdot \left(r \cdot \left(\frac{\pi}{s \cdot s} \cdot 0.04938271604938271\right) + t\_0\right) + \pi \cdot 2.6666666666666665\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_1 + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(t\_0 - r \cdot \left(\frac{\pi \cdot -0.345679012345679}{s \cdot s} + \frac{s \cdot s + \left(\pi \cdot 0.7407407407407407\right) \cdot t\_2}{\left(s \cdot s\right) \cdot t\_2}\right)\right)\right)\right)}\\
\end{array}
\end{array}
if s < 4.99999984e-20Initial program 100.0%
Applied egg-rr100.0%
Applied egg-rr100.0%
Taylor expanded in r around 0
Simplified-0.0%
Taylor expanded in r around 0
mul-1-negN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
*-commutativeN/A
distribute-rgt-outN/A
distribute-lft-outN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
unpow2N/A
*-lowering-*.f32N/A
metadata-evalN/A
metadata-evalN/A
Simplified100.0%
if 4.99999984e-20 < s Initial program 99.3%
Applied egg-rr99.3%
Applied egg-rr99.4%
Taylor expanded in r around 0
Simplified33.5%
+-commutativeN/A
clear-numN/A
frac-addN/A
/-lowering-/.f32N/A
Applied egg-rr52.3%
Final simplification74.5%
(FPCore (s r)
:precision binary32
(let* ((t_0 (* (/ PI s) 0.6666666666666666)) (t_1 (* s (* PI 4.0))))
(if (<= s 4.9999998413276127e-20)
(/
1.0
(*
r
(+
t_1
(*
r
(+
(* r (+ (* r (* (/ PI (* s s)) 0.04938271604938271)) t_0))
(* PI 2.6666666666666665))))))
(/
1.0
(*
r
(+
t_1
(*
r
(+
(* PI 2.6666666666666665)
(*
r
(+
t_0
(*
r
(-
(*
(+
(* (* s s) (* (/ PI s) -0.4444444444444444))
(* (* s PI) 0.7407407407407407))
(/ -1.0 (* s (* s s))))
(/ (* PI -0.345679012345679) (* s s))))))))))))))
float code(float s, float r) {
float t_0 = (((float) M_PI) / s) * 0.6666666666666666f;
float t_1 = s * (((float) M_PI) * 4.0f);
float tmp;
if (s <= 4.9999998413276127e-20f) {
tmp = 1.0f / (r * (t_1 + (r * ((r * ((r * ((((float) M_PI) / (s * s)) * 0.04938271604938271f)) + t_0)) + (((float) M_PI) * 2.6666666666666665f)))));
} else {
tmp = 1.0f / (r * (t_1 + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (t_0 + (r * (((((s * s) * ((((float) M_PI) / s) * -0.4444444444444444f)) + ((s * ((float) M_PI)) * 0.7407407407407407f)) * (-1.0f / (s * (s * s)))) - ((((float) M_PI) * -0.345679012345679f) / (s * s))))))))));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)) t_1 = Float32(s * Float32(Float32(pi) * Float32(4.0))) tmp = Float32(0.0) if (s <= Float32(4.9999998413276127e-20)) tmp = Float32(Float32(1.0) / Float32(r * Float32(t_1 + Float32(r * Float32(Float32(r * Float32(Float32(r * Float32(Float32(Float32(pi) / Float32(s * s)) * Float32(0.04938271604938271))) + t_0)) + Float32(Float32(pi) * Float32(2.6666666666666665))))))); else tmp = Float32(Float32(1.0) / Float32(r * Float32(t_1 + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(t_0 + Float32(r * Float32(Float32(Float32(Float32(Float32(s * s) * Float32(Float32(Float32(pi) / s) * Float32(-0.4444444444444444))) + Float32(Float32(s * Float32(pi)) * Float32(0.7407407407407407))) * Float32(Float32(-1.0) / Float32(s * Float32(s * s)))) - Float32(Float32(Float32(pi) * Float32(-0.345679012345679)) / Float32(s * s))))))))))); end return tmp end
function tmp_2 = code(s, r) t_0 = (single(pi) / s) * single(0.6666666666666666); t_1 = s * (single(pi) * single(4.0)); tmp = single(0.0); if (s <= single(4.9999998413276127e-20)) tmp = single(1.0) / (r * (t_1 + (r * ((r * ((r * ((single(pi) / (s * s)) * single(0.04938271604938271))) + t_0)) + (single(pi) * single(2.6666666666666665)))))); else tmp = single(1.0) / (r * (t_1 + (r * ((single(pi) * single(2.6666666666666665)) + (r * (t_0 + (r * (((((s * s) * ((single(pi) / s) * single(-0.4444444444444444))) + ((s * single(pi)) * single(0.7407407407407407))) * (single(-1.0) / (s * (s * s)))) - ((single(pi) * single(-0.345679012345679)) / (s * s)))))))))); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi}{s} \cdot 0.6666666666666666\\
t_1 := s \cdot \left(\pi \cdot 4\right)\\
\mathbf{if}\;s \leq 4.9999998413276127 \cdot 10^{-20}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_1 + r \cdot \left(r \cdot \left(r \cdot \left(\frac{\pi}{s \cdot s} \cdot 0.04938271604938271\right) + t\_0\right) + \pi \cdot 2.6666666666666665\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_1 + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(t\_0 + r \cdot \left(\left(\left(s \cdot s\right) \cdot \left(\frac{\pi}{s} \cdot -0.4444444444444444\right) + \left(s \cdot \pi\right) \cdot 0.7407407407407407\right) \cdot \frac{-1}{s \cdot \left(s \cdot s\right)} - \frac{\pi \cdot -0.345679012345679}{s \cdot s}\right)\right)\right)\right)}\\
\end{array}
\end{array}
if s < 4.99999984e-20Initial program 100.0%
Applied egg-rr100.0%
Applied egg-rr100.0%
Taylor expanded in r around 0
Simplified-0.0%
Taylor expanded in r around 0
mul-1-negN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
*-commutativeN/A
distribute-rgt-outN/A
distribute-lft-outN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
unpow2N/A
*-lowering-*.f32N/A
metadata-evalN/A
metadata-evalN/A
Simplified100.0%
if 4.99999984e-20 < s Initial program 99.3%
Applied egg-rr99.3%
Applied egg-rr99.4%
Taylor expanded in r around 0
Simplified33.5%
frac-addN/A
div-invN/A
metadata-evalN/A
cube-unmultN/A
cube-divN/A
metadata-evalN/A
*-lowering-*.f32N/A
Applied egg-rr49.7%
Final simplification73.1%
(FPCore (s r)
:precision binary32
(let* ((t_0 (* (/ PI s) 0.6666666666666666)) (t_1 (* s (* PI 4.0))))
(if (<= s 4.9999998413276127e-20)
(/
1.0
(*
r
(+
t_1
(*
r
(+
(* r (+ (* r (* (/ PI (* s s)) 0.04938271604938271)) t_0))
(* PI 2.6666666666666665))))))
(/
1.0
(*
r
(+
t_1
(*
r
(+
(* PI 2.6666666666666665)
(*
r
(-
t_0
(*
r
(+
(/ (* PI -0.345679012345679) (* s s))
(/
(+
(* (* s s) (* (/ PI s) -0.4444444444444444))
(* (* s PI) 0.7407407407407407))
(* s (* s s)))))))))))))))
float code(float s, float r) {
float t_0 = (((float) M_PI) / s) * 0.6666666666666666f;
float t_1 = s * (((float) M_PI) * 4.0f);
float tmp;
if (s <= 4.9999998413276127e-20f) {
tmp = 1.0f / (r * (t_1 + (r * ((r * ((r * ((((float) M_PI) / (s * s)) * 0.04938271604938271f)) + t_0)) + (((float) M_PI) * 2.6666666666666665f)))));
} else {
tmp = 1.0f / (r * (t_1 + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (t_0 - (r * (((((float) M_PI) * -0.345679012345679f) / (s * s)) + ((((s * s) * ((((float) M_PI) / s) * -0.4444444444444444f)) + ((s * ((float) M_PI)) * 0.7407407407407407f)) / (s * (s * s)))))))))));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)) t_1 = Float32(s * Float32(Float32(pi) * Float32(4.0))) tmp = Float32(0.0) if (s <= Float32(4.9999998413276127e-20)) tmp = Float32(Float32(1.0) / Float32(r * Float32(t_1 + Float32(r * Float32(Float32(r * Float32(Float32(r * Float32(Float32(Float32(pi) / Float32(s * s)) * Float32(0.04938271604938271))) + t_0)) + Float32(Float32(pi) * Float32(2.6666666666666665))))))); else tmp = Float32(Float32(1.0) / Float32(r * Float32(t_1 + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(t_0 - Float32(r * Float32(Float32(Float32(Float32(pi) * Float32(-0.345679012345679)) / Float32(s * s)) + Float32(Float32(Float32(Float32(s * s) * Float32(Float32(Float32(pi) / s) * Float32(-0.4444444444444444))) + Float32(Float32(s * Float32(pi)) * Float32(0.7407407407407407))) / Float32(s * Float32(s * s)))))))))))); end return tmp end
function tmp_2 = code(s, r) t_0 = (single(pi) / s) * single(0.6666666666666666); t_1 = s * (single(pi) * single(4.0)); tmp = single(0.0); if (s <= single(4.9999998413276127e-20)) tmp = single(1.0) / (r * (t_1 + (r * ((r * ((r * ((single(pi) / (s * s)) * single(0.04938271604938271))) + t_0)) + (single(pi) * single(2.6666666666666665)))))); else tmp = single(1.0) / (r * (t_1 + (r * ((single(pi) * single(2.6666666666666665)) + (r * (t_0 - (r * (((single(pi) * single(-0.345679012345679)) / (s * s)) + ((((s * s) * ((single(pi) / s) * single(-0.4444444444444444))) + ((s * single(pi)) * single(0.7407407407407407))) / (s * (s * s))))))))))); end tmp_2 = tmp; end
\begin{array}{l}
\\
\begin{array}{l}
t_0 := \frac{\pi}{s} \cdot 0.6666666666666666\\
t_1 := s \cdot \left(\pi \cdot 4\right)\\
\mathbf{if}\;s \leq 4.9999998413276127 \cdot 10^{-20}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_1 + r \cdot \left(r \cdot \left(r \cdot \left(\frac{\pi}{s \cdot s} \cdot 0.04938271604938271\right) + t\_0\right) + \pi \cdot 2.6666666666666665\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \left(t\_1 + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(t\_0 - r \cdot \left(\frac{\pi \cdot -0.345679012345679}{s \cdot s} + \frac{\left(s \cdot s\right) \cdot \left(\frac{\pi}{s} \cdot -0.4444444444444444\right) + \left(s \cdot \pi\right) \cdot 0.7407407407407407}{s \cdot \left(s \cdot s\right)}\right)\right)\right)\right)}\\
\end{array}
\end{array}
if s < 4.99999984e-20Initial program 100.0%
Applied egg-rr100.0%
Applied egg-rr100.0%
Taylor expanded in r around 0
Simplified-0.0%
Taylor expanded in r around 0
mul-1-negN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
*-commutativeN/A
distribute-rgt-outN/A
distribute-lft-outN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
unpow2N/A
*-lowering-*.f32N/A
metadata-evalN/A
metadata-evalN/A
Simplified100.0%
if 4.99999984e-20 < s Initial program 99.3%
Applied egg-rr99.3%
Applied egg-rr99.4%
Taylor expanded in r around 0
Simplified33.5%
frac-addN/A
/-lowering-/.f32N/A
Applied egg-rr45.1%
Final simplification70.6%
(FPCore (s r)
:precision binary32
(/
1.0
(*
r
(+
(* s (* PI 4.0))
(*
r
(+
(* PI 2.6666666666666665)
(*
r
(-
(* (/ PI s) 0.6666666666666666)
(* r (/ (/ (* PI -0.04938271604938271) s) s))))))))))
float code(float s, float r) {
return 1.0f / (r * ((s * (((float) M_PI) * 4.0f)) + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * (((((float) M_PI) / s) * 0.6666666666666666f) - (r * (((((float) M_PI) * -0.04938271604938271f) / s) / s))))))));
}
function code(s, r) return Float32(Float32(1.0) / Float32(r * Float32(Float32(s * Float32(Float32(pi) * Float32(4.0))) + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)) - Float32(r * Float32(Float32(Float32(Float32(pi) * Float32(-0.04938271604938271)) / s) / s))))))))) end
function tmp = code(s, r) tmp = single(1.0) / (r * ((s * (single(pi) * single(4.0))) + (r * ((single(pi) * single(2.6666666666666665)) + (r * (((single(pi) / s) * single(0.6666666666666666)) - (r * (((single(pi) * single(-0.04938271604938271)) / s) / s)))))))); end
\begin{array}{l}
\\
\frac{1}{r \cdot \left(s \cdot \left(\pi \cdot 4\right) + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(\frac{\pi}{s} \cdot 0.6666666666666666 - r \cdot \frac{\frac{\pi \cdot -0.04938271604938271}{s}}{s}\right)\right)\right)}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Applied egg-rr99.7%
Taylor expanded in r around 0
Simplified17.9%
Taylor expanded in s around 0
unpow2N/A
associate-/r*N/A
/-lowering-/.f32N/A
/-lowering-/.f32N/A
*-commutativeN/A
distribute-rgt-outN/A
distribute-lft-outN/A
*-lowering-*.f32N/A
PI-lowering-PI.f32N/A
metadata-evalN/A
metadata-eval64.4%
Simplified64.4%
Final simplification64.4%
(FPCore (s r)
:precision binary32
(/
1.0
(*
r
(+
(* s (* PI 4.0))
(*
r
(+
(*
r
(+
(* r (* (/ PI (* s s)) 0.04938271604938271))
(* (/ PI s) 0.6666666666666666)))
(* PI 2.6666666666666665)))))))
float code(float s, float r) {
return 1.0f / (r * ((s * (((float) M_PI) * 4.0f)) + (r * ((r * ((r * ((((float) M_PI) / (s * s)) * 0.04938271604938271f)) + ((((float) M_PI) / s) * 0.6666666666666666f))) + (((float) M_PI) * 2.6666666666666665f)))));
}
function code(s, r) return Float32(Float32(1.0) / Float32(r * Float32(Float32(s * Float32(Float32(pi) * Float32(4.0))) + Float32(r * Float32(Float32(r * Float32(Float32(r * Float32(Float32(Float32(pi) / Float32(s * s)) * Float32(0.04938271604938271))) + Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)))) + Float32(Float32(pi) * Float32(2.6666666666666665))))))) end
function tmp = code(s, r) tmp = single(1.0) / (r * ((s * (single(pi) * single(4.0))) + (r * ((r * ((r * ((single(pi) / (s * s)) * single(0.04938271604938271))) + ((single(pi) / s) * single(0.6666666666666666)))) + (single(pi) * single(2.6666666666666665)))))); end
\begin{array}{l}
\\
\frac{1}{r \cdot \left(s \cdot \left(\pi \cdot 4\right) + r \cdot \left(r \cdot \left(r \cdot \left(\frac{\pi}{s \cdot s} \cdot 0.04938271604938271\right) + \frac{\pi}{s} \cdot 0.6666666666666666\right) + \pi \cdot 2.6666666666666665\right)\right)}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Applied egg-rr99.7%
Taylor expanded in r around 0
Simplified17.9%
Taylor expanded in r around 0
mul-1-negN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
*-commutativeN/A
distribute-rgt-outN/A
distribute-lft-outN/A
distribute-rgt-neg-inN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
unpow2N/A
*-lowering-*.f32N/A
metadata-evalN/A
metadata-evalN/A
Simplified64.4%
(FPCore (s r)
:precision binary32
(/
1.0
(*
r
(+
(* s (* PI 4.0))
(*
r
(+ (* PI 2.6666666666666665) (* r (* (/ PI s) 0.6666666666666666))))))))
float code(float s, float r) {
return 1.0f / (r * ((s * (((float) M_PI) * 4.0f)) + (r * ((((float) M_PI) * 2.6666666666666665f) + (r * ((((float) M_PI) / s) * 0.6666666666666666f))))));
}
function code(s, r) return Float32(Float32(1.0) / Float32(r * Float32(Float32(s * Float32(Float32(pi) * Float32(4.0))) + Float32(r * Float32(Float32(Float32(pi) * Float32(2.6666666666666665)) + Float32(r * Float32(Float32(Float32(pi) / s) * Float32(0.6666666666666666)))))))) end
function tmp = code(s, r) tmp = single(1.0) / (r * ((s * (single(pi) * single(4.0))) + (r * ((single(pi) * single(2.6666666666666665)) + (r * ((single(pi) / s) * single(0.6666666666666666))))))); end
\begin{array}{l}
\\
\frac{1}{r \cdot \left(s \cdot \left(\pi \cdot 4\right) + r \cdot \left(\pi \cdot 2.6666666666666665 + r \cdot \left(\frac{\pi}{s} \cdot 0.6666666666666666\right)\right)\right)}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Applied egg-rr99.7%
Taylor expanded in r around 0
*-lowering-*.f32N/A
+-lowering-+.f32N/A
*-commutativeN/A
associate-*l*N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f32N/A
*-lowering-*.f32N/A
sub-negN/A
+-lowering-+.f32N/A
Simplified29.1%
Final simplification29.1%
(FPCore (s r) :precision binary32 (/ 1.0 (* r (* PI (+ (* r 2.6666666666666665) (* s 4.0))))))
float code(float s, float r) {
return 1.0f / (r * (((float) M_PI) * ((r * 2.6666666666666665f) + (s * 4.0f))));
}
function code(s, r) return Float32(Float32(1.0) / Float32(r * Float32(Float32(pi) * Float32(Float32(r * Float32(2.6666666666666665)) + Float32(s * Float32(4.0)))))) end
function tmp = code(s, r) tmp = single(1.0) / (r * (single(pi) * ((r * single(2.6666666666666665)) + (s * single(4.0))))); end
\begin{array}{l}
\\
\frac{1}{r \cdot \left(\pi \cdot \left(r \cdot 2.6666666666666665 + s \cdot 4\right)\right)}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Applied egg-rr99.7%
Taylor expanded in r around 0
*-lowering-*.f32N/A
associate-*r*N/A
associate-*r*N/A
distribute-rgt-outN/A
*-lowering-*.f32N/A
PI-lowering-PI.f32N/A
+-lowering-+.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f3211.3%
Simplified11.3%
Final simplification11.3%
(FPCore (s r) :precision binary32 (/ (* (/ 1.0 PI) (/ 0.25 s)) r))
float code(float s, float r) {
return ((1.0f / ((float) M_PI)) * (0.25f / s)) / r;
}
function code(s, r) return Float32(Float32(Float32(Float32(1.0) / Float32(pi)) * Float32(Float32(0.25) / s)) / r) end
function tmp = code(s, r) tmp = ((single(1.0) / single(pi)) * (single(0.25) / s)) / r; end
\begin{array}{l}
\\
\frac{\frac{1}{\pi} \cdot \frac{0.25}{s}}{r}
\end{array}
Initial program 99.6%
Taylor expanded in r around 0
/-lowering-/.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f328.0%
Simplified8.0%
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f32N/A
*-commutativeN/A
*-lowering-*.f32N/A
PI-lowering-PI.f328.0%
Applied egg-rr8.0%
metadata-evalN/A
associate-*l*N/A
*-commutativeN/A
frac-timesN/A
associate-/r*N/A
associate-*r/N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
/-lowering-/.f328.0%
Applied egg-rr8.0%
(FPCore (s r) :precision binary32 (/ 1.0 (/ r (/ 0.25 (* s PI)))))
float code(float s, float r) {
return 1.0f / (r / (0.25f / (s * ((float) M_PI))));
}
function code(s, r) return Float32(Float32(1.0) / Float32(r / Float32(Float32(0.25) / Float32(s * Float32(pi))))) end
function tmp = code(s, r) tmp = single(1.0) / (r / (single(0.25) / (s * single(pi)))); end
\begin{array}{l}
\\
\frac{1}{\frac{r}{\frac{0.25}{s \cdot \pi}}}
\end{array}
Initial program 99.6%
Applied egg-rr99.6%
Applied egg-rr99.7%
Taylor expanded in s around inf
/-lowering-/.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f328.0%
Simplified8.0%
(FPCore (s r) :precision binary32 (/ (/ 0.25 (* s PI)) r))
float code(float s, float r) {
return (0.25f / (s * ((float) M_PI))) / r;
}
function code(s, r) return Float32(Float32(Float32(0.25) / Float32(s * Float32(pi))) / r) end
function tmp = code(s, r) tmp = (single(0.25) / (s * single(pi))) / r; end
\begin{array}{l}
\\
\frac{\frac{0.25}{s \cdot \pi}}{r}
\end{array}
Initial program 99.6%
Taylor expanded in r around 0
/-lowering-/.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f328.0%
Simplified8.0%
*-commutativeN/A
associate-/r*N/A
/-lowering-/.f32N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f328.0%
Applied egg-rr8.0%
(FPCore (s r) :precision binary32 (/ 0.25 (* s (* r PI))))
float code(float s, float r) {
return 0.25f / (s * (r * ((float) M_PI)));
}
function code(s, r) return Float32(Float32(0.25) / Float32(s * Float32(r * Float32(pi)))) end
function tmp = code(s, r) tmp = single(0.25) / (s * (r * single(pi))); end
\begin{array}{l}
\\
\frac{0.25}{s \cdot \left(r \cdot \pi\right)}
\end{array}
Initial program 99.6%
Taylor expanded in r around 0
/-lowering-/.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f328.0%
Simplified8.0%
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f32N/A
*-commutativeN/A
*-lowering-*.f32N/A
PI-lowering-PI.f328.0%
Applied egg-rr8.0%
Final simplification8.0%
(FPCore (s r) :precision binary32 (/ 0.25 (* r (* s PI))))
float code(float s, float r) {
return 0.25f / (r * (s * ((float) M_PI)));
}
function code(s, r) return Float32(Float32(0.25) / Float32(r * Float32(s * Float32(pi)))) end
function tmp = code(s, r) tmp = single(0.25) / (r * (s * single(pi))); end
\begin{array}{l}
\\
\frac{0.25}{r \cdot \left(s \cdot \pi\right)}
\end{array}
Initial program 99.6%
Taylor expanded in r around 0
/-lowering-/.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f328.0%
Simplified8.0%
herbie shell --seed 2024192
(FPCore (s r)
:name "Disney BSSRDF, PDF of scattering profile"
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0)) (and (< 1e-6 r) (< r 1000000.0)))
(+ (/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r)) (/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r))))