
(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 23 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 (/ (* (+ (exp (/ (* r -0.3333333333333333) s)) (exp (- 0.0 (/ r s)))) 0.125) (* r (* s PI))))
float code(float s, float r) {
return ((expf(((r * -0.3333333333333333f) / s)) + expf((0.0f - (r / s)))) * 0.125f) / (r * (s * ((float) M_PI)));
}
function code(s, r) return Float32(Float32(Float32(exp(Float32(Float32(r * Float32(-0.3333333333333333)) / s)) + exp(Float32(Float32(0.0) - Float32(r / s)))) * Float32(0.125)) / Float32(r * Float32(s * Float32(pi)))) end
function tmp = code(s, r) tmp = ((exp(((r * single(-0.3333333333333333)) / s)) + exp((single(0.0) - (r / s)))) * single(0.125)) / (r * (s * single(pi))); end
\begin{array}{l}
\\
\frac{\left(e^{\frac{r \cdot -0.3333333333333333}{s}} + e^{0 - \frac{r}{s}}\right) \cdot 0.125}{r \cdot \left(s \cdot \pi\right)}
\end{array}
Initial program 99.7%
Taylor expanded in r around inf
Simplified99.8%
Taylor expanded in s around 0
associate-*r/N/A
/-lowering-/.f32N/A
Simplified99.8%
+-commutativeN/A
div-invN/A
distribute-lft-outN/A
*-lowering-*.f32N/A
+-lowering-+.f32N/A
exp-lowering-exp.f32N/A
associate-*l/N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
inv-powN/A
pow-expN/A
exp-lowering-exp.f32N/A
*-lowering-*.f32N/A
/-lowering-/.f3299.8%
Applied egg-rr99.8%
*-commutativeN/A
*-lowering-*.f32N/A
+-lowering-+.f32N/A
exp-lowering-exp.f32N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
exp-lowering-exp.f32N/A
*-commutativeN/A
associate-*r/N/A
neg-mul-1N/A
/-lowering-/.f32N/A
neg-lowering-neg.f3299.8%
Applied egg-rr99.8%
Final simplification99.8%
(FPCore (s r)
:precision binary32
(/
(+
(/
0.125
(+
1.0
(*
r
(+
(/ 1.0 s)
(*
r
(+ (* 0.16666666666666666 (/ r (* s (* s s)))) (/ 0.5 (* s s))))))))
(* 0.125 (exp (* -0.3333333333333333 (/ r s)))))
(* r (* s PI))))
float code(float s, float r) {
return ((0.125f / (1.0f + (r * ((1.0f / s) + (r * ((0.16666666666666666f * (r / (s * (s * s)))) + (0.5f / (s * s)))))))) + (0.125f * expf((-0.3333333333333333f * (r / s))))) / (r * (s * ((float) M_PI)));
}
function code(s, r) return Float32(Float32(Float32(Float32(0.125) / Float32(Float32(1.0) + Float32(r * Float32(Float32(Float32(1.0) / s) + Float32(r * Float32(Float32(Float32(0.16666666666666666) * Float32(r / Float32(s * Float32(s * s)))) + Float32(Float32(0.5) / Float32(s * s)))))))) + Float32(Float32(0.125) * exp(Float32(Float32(-0.3333333333333333) * Float32(r / s))))) / Float32(r * Float32(s * Float32(pi)))) end
function tmp = code(s, r) tmp = ((single(0.125) / (single(1.0) + (r * ((single(1.0) / s) + (r * ((single(0.16666666666666666) * (r / (s * (s * s)))) + (single(0.5) / (s * s)))))))) + (single(0.125) * exp((single(-0.3333333333333333) * (r / s))))) / (r * (s * single(pi))); end
\begin{array}{l}
\\
\frac{\frac{0.125}{1 + r \cdot \left(\frac{1}{s} + r \cdot \left(0.16666666666666666 \cdot \frac{r}{s \cdot \left(s \cdot s\right)} + \frac{0.5}{s \cdot s}\right)\right)} + 0.125 \cdot e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \left(s \cdot \pi\right)}
\end{array}
Initial program 99.7%
Taylor expanded in r around inf
Simplified99.8%
Taylor expanded in s around 0
associate-*r/N/A
/-lowering-/.f32N/A
Simplified99.8%
Taylor expanded in r around 0
+-lowering-+.f32N/A
*-lowering-*.f32N/A
+-commutativeN/A
+-lowering-+.f32N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
+-lowering-+.f32N/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
cube-multN/A
unpow2N/A
*-lowering-*.f32N/A
unpow2N/A
*-lowering-*.f32N/A
associate-*r/N/A
metadata-evalN/A
/-lowering-/.f32N/A
unpow2N/A
*-lowering-*.f3278.2%
Simplified78.2%
Final simplification78.2%
(FPCore (s r)
:precision binary32
(/
(+
(* 0.125 (exp (* -0.3333333333333333 (/ r s))))
(/
0.125
(+
1.0
(/
(+
r
(/ (+ (* 0.5 (* r r)) (/ (* 0.16666666666666666 (* r (* r r))) s)) s))
s))))
(* r (* s PI))))
float code(float s, float r) {
return ((0.125f * expf((-0.3333333333333333f * (r / s)))) + (0.125f / (1.0f + ((r + (((0.5f * (r * r)) + ((0.16666666666666666f * (r * (r * r))) / s)) / s)) / s)))) / (r * (s * ((float) M_PI)));
}
function code(s, r) return Float32(Float32(Float32(Float32(0.125) * exp(Float32(Float32(-0.3333333333333333) * Float32(r / s)))) + Float32(Float32(0.125) / Float32(Float32(1.0) + Float32(Float32(r + Float32(Float32(Float32(Float32(0.5) * Float32(r * r)) + Float32(Float32(Float32(0.16666666666666666) * Float32(r * Float32(r * r))) / s)) / s)) / s)))) / Float32(r * Float32(s * Float32(pi)))) end
function tmp = code(s, r) tmp = ((single(0.125) * exp((single(-0.3333333333333333) * (r / s)))) + (single(0.125) / (single(1.0) + ((r + (((single(0.5) * (r * r)) + ((single(0.16666666666666666) * (r * (r * r))) / s)) / s)) / s)))) / (r * (s * single(pi))); end
\begin{array}{l}
\\
\frac{0.125 \cdot e^{-0.3333333333333333 \cdot \frac{r}{s}} + \frac{0.125}{1 + \frac{r + \frac{0.5 \cdot \left(r \cdot r\right) + \frac{0.16666666666666666 \cdot \left(r \cdot \left(r \cdot r\right)\right)}{s}}{s}}{s}}}{r \cdot \left(s \cdot \pi\right)}
\end{array}
Initial program 99.7%
Taylor expanded in r around inf
Simplified99.8%
Taylor expanded in s around 0
associate-*r/N/A
/-lowering-/.f32N/A
Simplified99.8%
Taylor expanded in s around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f32N/A
/-lowering-/.f32N/A
Simplified75.3%
Final simplification75.3%
(FPCore (s r) :precision binary32 (/ (+ (* 0.125 (exp (* -0.3333333333333333 (/ r s)))) (/ 0.125 (+ 1.0 (* r (+ (/ 1.0 s) (* 0.5 (/ r (* s s)))))))) (* r (* s PI))))
float code(float s, float r) {
return ((0.125f * expf((-0.3333333333333333f * (r / s)))) + (0.125f / (1.0f + (r * ((1.0f / s) + (0.5f * (r / (s * s)))))))) / (r * (s * ((float) M_PI)));
}
function code(s, r) return Float32(Float32(Float32(Float32(0.125) * exp(Float32(Float32(-0.3333333333333333) * Float32(r / s)))) + Float32(Float32(0.125) / Float32(Float32(1.0) + Float32(r * Float32(Float32(Float32(1.0) / s) + Float32(Float32(0.5) * Float32(r / Float32(s * s)))))))) / Float32(r * Float32(s * Float32(pi)))) end
function tmp = code(s, r) tmp = ((single(0.125) * exp((single(-0.3333333333333333) * (r / s)))) + (single(0.125) / (single(1.0) + (r * ((single(1.0) / s) + (single(0.5) * (r / (s * s)))))))) / (r * (s * single(pi))); end
\begin{array}{l}
\\
\frac{0.125 \cdot e^{-0.3333333333333333 \cdot \frac{r}{s}} + \frac{0.125}{1 + r \cdot \left(\frac{1}{s} + 0.5 \cdot \frac{r}{s \cdot s}\right)}}{r \cdot \left(s \cdot \pi\right)}
\end{array}
Initial program 99.7%
Taylor expanded in r around inf
Simplified99.8%
Taylor expanded in s around 0
associate-*r/N/A
/-lowering-/.f32N/A
Simplified99.8%
Taylor expanded in r around 0
+-lowering-+.f32N/A
associate-*r/N/A
associate-*l/N/A
metadata-evalN/A
associate-*r/N/A
*-lowering-*.f32N/A
+-commutativeN/A
+-lowering-+.f32N/A
/-lowering-/.f32N/A
associate-*r/N/A
metadata-evalN/A
associate-*l/N/A
associate-*r/N/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
unpow2N/A
*-lowering-*.f3260.4%
Simplified60.4%
Final simplification60.4%
(FPCore (s r) :precision binary32 (/ (+ (* 0.125 (exp (* -0.3333333333333333 (/ r s)))) (/ 0.125 (+ 1.0 (/ (- r (/ (* (* r r) -0.5) s)) s)))) (* r (* s PI))))
float code(float s, float r) {
return ((0.125f * expf((-0.3333333333333333f * (r / s)))) + (0.125f / (1.0f + ((r - (((r * r) * -0.5f) / s)) / s)))) / (r * (s * ((float) M_PI)));
}
function code(s, r) return Float32(Float32(Float32(Float32(0.125) * exp(Float32(Float32(-0.3333333333333333) * Float32(r / s)))) + Float32(Float32(0.125) / Float32(Float32(1.0) + Float32(Float32(r - Float32(Float32(Float32(r * r) * Float32(-0.5)) / s)) / s)))) / Float32(r * Float32(s * Float32(pi)))) end
function tmp = code(s, r) tmp = ((single(0.125) * exp((single(-0.3333333333333333) * (r / s)))) + (single(0.125) / (single(1.0) + ((r - (((r * r) * single(-0.5)) / s)) / s)))) / (r * (s * single(pi))); end
\begin{array}{l}
\\
\frac{0.125 \cdot e^{-0.3333333333333333 \cdot \frac{r}{s}} + \frac{0.125}{1 + \frac{r - \frac{\left(r \cdot r\right) \cdot -0.5}{s}}{s}}}{r \cdot \left(s \cdot \pi\right)}
\end{array}
Initial program 99.7%
Taylor expanded in r around inf
Simplified99.8%
Taylor expanded in s around 0
associate-*r/N/A
/-lowering-/.f32N/A
Simplified99.8%
Taylor expanded in s around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f32N/A
/-lowering-/.f32N/A
+-commutativeN/A
mul-1-negN/A
unsub-negN/A
--lowering--.f32N/A
*-commutativeN/A
associate-*l/N/A
metadata-evalN/A
distribute-rgt-outN/A
/-lowering-/.f32N/A
distribute-rgt-outN/A
metadata-evalN/A
*-lowering-*.f32N/A
unpow2N/A
*-lowering-*.f3257.5%
Simplified57.5%
Final simplification57.5%
(FPCore (s r) :precision binary32 (/ (+ (* 0.125 (exp (* -0.3333333333333333 (/ r s)))) (/ 0.125 (+ 1.0 (/ r s)))) (* r (* s PI))))
float code(float s, float r) {
return ((0.125f * expf((-0.3333333333333333f * (r / s)))) + (0.125f / (1.0f + (r / s)))) / (r * (s * ((float) M_PI)));
}
function code(s, r) return Float32(Float32(Float32(Float32(0.125) * exp(Float32(Float32(-0.3333333333333333) * Float32(r / s)))) + Float32(Float32(0.125) / Float32(Float32(1.0) + Float32(r / s)))) / Float32(r * Float32(s * Float32(pi)))) end
function tmp = code(s, r) tmp = ((single(0.125) * exp((single(-0.3333333333333333) * (r / s)))) + (single(0.125) / (single(1.0) + (r / s)))) / (r * (s * single(pi))); end
\begin{array}{l}
\\
\frac{0.125 \cdot e^{-0.3333333333333333 \cdot \frac{r}{s}} + \frac{0.125}{1 + \frac{r}{s}}}{r \cdot \left(s \cdot \pi\right)}
\end{array}
Initial program 99.7%
Taylor expanded in r around inf
Simplified99.8%
Taylor expanded in s around 0
associate-*r/N/A
/-lowering-/.f32N/A
Simplified99.8%
Taylor expanded in r around 0
+-lowering-+.f32N/A
/-lowering-/.f3212.5%
Simplified12.5%
Final simplification12.5%
(FPCore (s r)
:precision binary32
(+
(/
(/
(/ 0.125 (* s PI))
(+
1.0
(/
(+
r
(/ (+ (* 0.5 (* r r)) (/ (* 0.16666666666666666 (* r (* r r))) s)) s))
s)))
r)
(/
(-
(/
(-
(/ -0.041666666666666664 PI)
(/
(+
(* (/ r PI) -0.006944444444444444)
(/ (* (* r r) 0.0007716049382716049) (* s PI)))
s))
s)
(/ -0.125 (* r PI)))
s)))
float code(float s, float r) {
return (((0.125f / (s * ((float) M_PI))) / (1.0f + ((r + (((0.5f * (r * r)) + ((0.16666666666666666f * (r * (r * r))) / s)) / s)) / s))) / r) + (((((-0.041666666666666664f / ((float) M_PI)) - ((((r / ((float) M_PI)) * -0.006944444444444444f) + (((r * r) * 0.0007716049382716049f) / (s * ((float) M_PI)))) / s)) / s) - (-0.125f / (r * ((float) M_PI)))) / s);
}
function code(s, r) return Float32(Float32(Float32(Float32(Float32(0.125) / Float32(s * Float32(pi))) / Float32(Float32(1.0) + Float32(Float32(r + Float32(Float32(Float32(Float32(0.5) * Float32(r * r)) + Float32(Float32(Float32(0.16666666666666666) * Float32(r * Float32(r * r))) / s)) / s)) / s))) / r) + Float32(Float32(Float32(Float32(Float32(Float32(-0.041666666666666664) / Float32(pi)) - Float32(Float32(Float32(Float32(r / Float32(pi)) * Float32(-0.006944444444444444)) + Float32(Float32(Float32(r * r) * Float32(0.0007716049382716049)) / Float32(s * Float32(pi)))) / s)) / s) - Float32(Float32(-0.125) / Float32(r * Float32(pi)))) / s)) end
function tmp = code(s, r) tmp = (((single(0.125) / (s * single(pi))) / (single(1.0) + ((r + (((single(0.5) * (r * r)) + ((single(0.16666666666666666) * (r * (r * r))) / s)) / s)) / s))) / r) + (((((single(-0.041666666666666664) / single(pi)) - ((((r / single(pi)) * single(-0.006944444444444444)) + (((r * r) * single(0.0007716049382716049)) / (s * single(pi)))) / s)) / s) - (single(-0.125) / (r * single(pi)))) / s); end
\begin{array}{l}
\\
\frac{\frac{\frac{0.125}{s \cdot \pi}}{1 + \frac{r + \frac{0.5 \cdot \left(r \cdot r\right) + \frac{0.16666666666666666 \cdot \left(r \cdot \left(r \cdot r\right)\right)}{s}}{s}}{s}}}{r} + \frac{\frac{\frac{-0.041666666666666664}{\pi} - \frac{\frac{r}{\pi} \cdot -0.006944444444444444 + \frac{\left(r \cdot r\right) \cdot 0.0007716049382716049}{s \cdot \pi}}{s}}{s} - \frac{-0.125}{r \cdot \pi}}{s}
\end{array}
Initial program 99.7%
times-fracN/A
associate-*r/N/A
/-lowering-/.f32N/A
Applied egg-rr99.7%
Taylor expanded in s around -inf
Simplified9.0%
Taylor expanded in s around -inf
mul-1-negN/A
unsub-negN/A
--lowering--.f32N/A
/-lowering-/.f32N/A
Simplified8.6%
Final simplification8.6%
(FPCore (s r)
:precision binary32
(*
(/ 1.0 s)
(+
(/ (/ 0.25 PI) r)
(/
(+
(/ -0.16666666666666666 PI)
(/
(*
(+ (/ 0.020833333333333332 (/ s (* r r))) (* r -0.06944444444444445))
(/ -1.0 PI))
s))
s))))
float code(float s, float r) {
return (1.0f / s) * (((0.25f / ((float) M_PI)) / r) + (((-0.16666666666666666f / ((float) M_PI)) + ((((0.020833333333333332f / (s / (r * r))) + (r * -0.06944444444444445f)) * (-1.0f / ((float) M_PI))) / s)) / s));
}
function code(s, r) return Float32(Float32(Float32(1.0) / s) * Float32(Float32(Float32(Float32(0.25) / Float32(pi)) / r) + Float32(Float32(Float32(Float32(-0.16666666666666666) / Float32(pi)) + Float32(Float32(Float32(Float32(Float32(0.020833333333333332) / Float32(s / Float32(r * r))) + Float32(r * Float32(-0.06944444444444445))) * Float32(Float32(-1.0) / Float32(pi))) / s)) / s))) end
function tmp = code(s, r) tmp = (single(1.0) / s) * (((single(0.25) / single(pi)) / r) + (((single(-0.16666666666666666) / single(pi)) + ((((single(0.020833333333333332) / (s / (r * r))) + (r * single(-0.06944444444444445))) * (single(-1.0) / single(pi))) / s)) / s)); end
\begin{array}{l}
\\
\frac{1}{s} \cdot \left(\frac{\frac{0.25}{\pi}}{r} + \frac{\frac{-0.16666666666666666}{\pi} + \frac{\left(\frac{0.020833333333333332}{\frac{s}{r \cdot r}} + r \cdot -0.06944444444444445\right) \cdot \frac{-1}{\pi}}{s}}{s}\right)
\end{array}
Initial program 99.7%
Taylor expanded in s around inf
Simplified8.9%
Taylor expanded in s around -inf
Simplified8.5%
Applied egg-rr8.5%
Final simplification8.5%
(FPCore (s r)
:precision binary32
(/
(-
(/
(-
(/ -0.16666666666666666 PI)
(/
(+
(/ (* r (* (/ r s) 0.020833333333333332)) PI)
(/ (* r -0.06944444444444445) PI))
s))
s)
(/ -0.25 (* r PI)))
s))
float code(float s, float r) {
return ((((-0.16666666666666666f / ((float) M_PI)) - ((((r * ((r / s) * 0.020833333333333332f)) / ((float) M_PI)) + ((r * -0.06944444444444445f) / ((float) M_PI))) / s)) / s) - (-0.25f / (r * ((float) M_PI)))) / s;
}
function code(s, r) return Float32(Float32(Float32(Float32(Float32(Float32(-0.16666666666666666) / Float32(pi)) - Float32(Float32(Float32(Float32(r * Float32(Float32(r / s) * Float32(0.020833333333333332))) / Float32(pi)) + Float32(Float32(r * Float32(-0.06944444444444445)) / Float32(pi))) / s)) / s) - Float32(Float32(-0.25) / Float32(r * Float32(pi)))) / s) end
function tmp = code(s, r) tmp = ((((single(-0.16666666666666666) / single(pi)) - ((((r * ((r / s) * single(0.020833333333333332))) / single(pi)) + ((r * single(-0.06944444444444445)) / single(pi))) / s)) / s) - (single(-0.25) / (r * single(pi)))) / s; end
\begin{array}{l}
\\
\frac{\frac{\frac{-0.16666666666666666}{\pi} - \frac{\frac{r \cdot \left(\frac{r}{s} \cdot 0.020833333333333332\right)}{\pi} + \frac{r \cdot -0.06944444444444445}{\pi}}{s}}{s} - \frac{-0.25}{r \cdot \pi}}{s}
\end{array}
Initial program 99.7%
Taylor expanded in s around inf
Simplified8.9%
Taylor expanded in s around -inf
Simplified8.5%
associate-/l*N/A
associate-*l*N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
/-lowering-/.f328.5%
Applied egg-rr8.5%
Final simplification8.5%
(FPCore (s r)
:precision binary32
(/
(-
(/
(-
(/ -0.16666666666666666 PI)
(/
(*
r
(+ (/ (* (/ r s) 0.020833333333333332) PI) (/ -0.06944444444444445 PI)))
s))
s)
(/ -0.25 (* r PI)))
s))
float code(float s, float r) {
return ((((-0.16666666666666666f / ((float) M_PI)) - ((r * ((((r / s) * 0.020833333333333332f) / ((float) M_PI)) + (-0.06944444444444445f / ((float) M_PI)))) / s)) / s) - (-0.25f / (r * ((float) M_PI)))) / s;
}
function code(s, r) return Float32(Float32(Float32(Float32(Float32(Float32(-0.16666666666666666) / Float32(pi)) - Float32(Float32(r * Float32(Float32(Float32(Float32(r / s) * Float32(0.020833333333333332)) / Float32(pi)) + Float32(Float32(-0.06944444444444445) / Float32(pi)))) / s)) / s) - Float32(Float32(-0.25) / Float32(r * Float32(pi)))) / s) end
function tmp = code(s, r) tmp = ((((single(-0.16666666666666666) / single(pi)) - ((r * ((((r / s) * single(0.020833333333333332)) / single(pi)) + (single(-0.06944444444444445) / single(pi)))) / s)) / s) - (single(-0.25) / (r * single(pi)))) / s; end
\begin{array}{l}
\\
\frac{\frac{\frac{-0.16666666666666666}{\pi} - \frac{r \cdot \left(\frac{\frac{r}{s} \cdot 0.020833333333333332}{\pi} + \frac{-0.06944444444444445}{\pi}\right)}{s}}{s} - \frac{-0.25}{r \cdot \pi}}{s}
\end{array}
Initial program 99.7%
Taylor expanded in s around inf
Simplified8.9%
Taylor expanded in s around -inf
Simplified8.5%
Taylor expanded in r around 0
*-lowering-*.f32N/A
sub-negN/A
+-lowering-+.f32N/A
associate-/r*N/A
associate-*r/N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
associate-*r/N/A
metadata-evalN/A
distribute-neg-fracN/A
metadata-evalN/A
/-lowering-/.f32N/A
PI-lowering-PI.f328.5%
Simplified8.5%
Final simplification8.5%
(FPCore (s r)
:precision binary32
(/
(+
(/ 0.25 (* r PI))
(/
(-
(/ -0.16666666666666666 PI)
(/
(*
r
(+ (/ -0.06944444444444445 PI) (* 0.021604938271604937 (/ r (* s PI)))))
s))
s))
s))
float code(float s, float r) {
return ((0.25f / (r * ((float) M_PI))) + (((-0.16666666666666666f / ((float) M_PI)) - ((r * ((-0.06944444444444445f / ((float) M_PI)) + (0.021604938271604937f * (r / (s * ((float) M_PI)))))) / s)) / s)) / s;
}
function code(s, r) return Float32(Float32(Float32(Float32(0.25) / Float32(r * Float32(pi))) + Float32(Float32(Float32(Float32(-0.16666666666666666) / Float32(pi)) - Float32(Float32(r * Float32(Float32(Float32(-0.06944444444444445) / Float32(pi)) + Float32(Float32(0.021604938271604937) * Float32(r / Float32(s * Float32(pi)))))) / s)) / s)) / s) end
function tmp = code(s, r) tmp = ((single(0.25) / (r * single(pi))) + (((single(-0.16666666666666666) / single(pi)) - ((r * ((single(-0.06944444444444445) / single(pi)) + (single(0.021604938271604937) * (r / (s * single(pi)))))) / s)) / s)) / s; end
\begin{array}{l}
\\
\frac{\frac{0.25}{r \cdot \pi} + \frac{\frac{-0.16666666666666666}{\pi} - \frac{r \cdot \left(\frac{-0.06944444444444445}{\pi} + 0.021604938271604937 \cdot \frac{r}{s \cdot \pi}\right)}{s}}{s}}{s}
\end{array}
Initial program 99.7%
Taylor expanded in s around -inf
Simplified8.4%
Taylor expanded in r around 0
*-lowering-*.f32N/A
sub-negN/A
+-lowering-+.f32N/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f32N/A
associate-*r/N/A
metadata-evalN/A
distribute-neg-fracN/A
metadata-evalN/A
/-lowering-/.f32N/A
PI-lowering-PI.f328.4%
Simplified8.4%
Final simplification8.4%
(FPCore (s r)
:precision binary32
(/
(+
(/ 0.25 (* s PI))
(*
r
(/
(- (/ -0.16666666666666666 PI) (* -0.06944444444444445 (/ (/ r s) PI)))
(* s s))))
r))
float code(float s, float r) {
return ((0.25f / (s * ((float) M_PI))) + (r * (((-0.16666666666666666f / ((float) M_PI)) - (-0.06944444444444445f * ((r / s) / ((float) M_PI)))) / (s * s)))) / r;
}
function code(s, r) return Float32(Float32(Float32(Float32(0.25) / Float32(s * Float32(pi))) + Float32(r * Float32(Float32(Float32(Float32(-0.16666666666666666) / Float32(pi)) - Float32(Float32(-0.06944444444444445) * Float32(Float32(r / s) / Float32(pi)))) / Float32(s * s)))) / r) end
function tmp = code(s, r) tmp = ((single(0.25) / (s * single(pi))) + (r * (((single(-0.16666666666666666) / single(pi)) - (single(-0.06944444444444445) * ((r / s) / single(pi)))) / (s * s)))) / r; end
\begin{array}{l}
\\
\frac{\frac{0.25}{s \cdot \pi} + r \cdot \frac{\frac{-0.16666666666666666}{\pi} - -0.06944444444444445 \cdot \frac{\frac{r}{s}}{\pi}}{s \cdot s}}{r}
\end{array}
Initial program 99.7%
Taylor expanded in r around 0
Simplified8.4%
(FPCore (s r)
:precision binary32
(/
(-
(/ 0.25 (* r PI))
(/
(+ (* -0.06944444444444445 (/ (/ r s) PI)) (/ 0.16666666666666666 PI))
s))
s))
float code(float s, float r) {
return ((0.25f / (r * ((float) M_PI))) - (((-0.06944444444444445f * ((r / s) / ((float) M_PI))) + (0.16666666666666666f / ((float) M_PI))) / s)) / s;
}
function code(s, r) return Float32(Float32(Float32(Float32(0.25) / Float32(r * Float32(pi))) - Float32(Float32(Float32(Float32(-0.06944444444444445) * Float32(Float32(r / s) / Float32(pi))) + Float32(Float32(0.16666666666666666) / Float32(pi))) / s)) / s) end
function tmp = code(s, r) tmp = ((single(0.25) / (r * single(pi))) - (((single(-0.06944444444444445) * ((r / s) / single(pi))) + (single(0.16666666666666666) / single(pi))) / s)) / s; end
\begin{array}{l}
\\
\frac{\frac{0.25}{r \cdot \pi} - \frac{-0.06944444444444445 \cdot \frac{\frac{r}{s}}{\pi} + \frac{0.16666666666666666}{\pi}}{s}}{s}
\end{array}
Initial program 99.7%
Taylor expanded in s around inf
Simplified8.4%
(FPCore (s r)
:precision binary32
(/
(+
(/ (/ 0.25 PI) r)
(/
(+ (/ -0.16666666666666666 PI) (/ (* (/ r PI) 0.06944444444444445) s))
s))
s))
float code(float s, float r) {
return (((0.25f / ((float) M_PI)) / r) + (((-0.16666666666666666f / ((float) M_PI)) + (((r / ((float) M_PI)) * 0.06944444444444445f) / s)) / s)) / s;
}
function code(s, r) return Float32(Float32(Float32(Float32(Float32(0.25) / Float32(pi)) / r) + Float32(Float32(Float32(Float32(-0.16666666666666666) / Float32(pi)) + Float32(Float32(Float32(r / Float32(pi)) * Float32(0.06944444444444445)) / s)) / s)) / s) end
function tmp = code(s, r) tmp = (((single(0.25) / single(pi)) / r) + (((single(-0.16666666666666666) / single(pi)) + (((r / single(pi)) * single(0.06944444444444445)) / s)) / s)) / s; end
\begin{array}{l}
\\
\frac{\frac{\frac{0.25}{\pi}}{r} + \frac{\frac{-0.16666666666666666}{\pi} + \frac{\frac{r}{\pi} \cdot 0.06944444444444445}{s}}{s}}{s}
\end{array}
Initial program 99.7%
Taylor expanded in s around -inf
Simplified8.4%
Taylor expanded in s around inf
Simplified8.4%
Final simplification8.4%
(FPCore (s r) :precision binary32 (/ (+ 0.25 (* r (+ (* (/ r (* s s)) 0.06944444444444445) (/ -0.16666666666666666 s)))) (* r (* s PI))))
float code(float s, float r) {
return (0.25f + (r * (((r / (s * s)) * 0.06944444444444445f) + (-0.16666666666666666f / s)))) / (r * (s * ((float) M_PI)));
}
function code(s, r) return Float32(Float32(Float32(0.25) + Float32(r * Float32(Float32(Float32(r / Float32(s * s)) * Float32(0.06944444444444445)) + Float32(Float32(-0.16666666666666666) / s)))) / Float32(r * Float32(s * Float32(pi)))) end
function tmp = code(s, r) tmp = (single(0.25) + (r * (((r / (s * s)) * single(0.06944444444444445)) + (single(-0.16666666666666666) / s)))) / (r * (s * single(pi))); end
\begin{array}{l}
\\
\frac{0.25 + r \cdot \left(\frac{r}{s \cdot s} \cdot 0.06944444444444445 + \frac{-0.16666666666666666}{s}\right)}{r \cdot \left(s \cdot \pi\right)}
\end{array}
Initial program 99.7%
Taylor expanded in r around inf
Simplified99.8%
Taylor expanded in s around 0
associate-*r/N/A
/-lowering-/.f32N/A
Simplified99.8%
Taylor expanded in r around 0
+-lowering-+.f32N/A
*-lowering-*.f32N/A
sub-negN/A
+-lowering-+.f32N/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
unpow2N/A
*-lowering-*.f32N/A
associate-*r/N/A
metadata-evalN/A
distribute-neg-fracN/A
metadata-evalN/A
/-lowering-/.f328.3%
Simplified8.3%
Final simplification8.3%
(FPCore (s r) :precision binary32 (/ (/ (+ (/ -0.16666666666666666 PI) (/ (* 0.25 (/ s r)) PI)) s) s))
float code(float s, float r) {
return (((-0.16666666666666666f / ((float) M_PI)) + ((0.25f * (s / r)) / ((float) M_PI))) / s) / s;
}
function code(s, r) return Float32(Float32(Float32(Float32(Float32(-0.16666666666666666) / Float32(pi)) + Float32(Float32(Float32(0.25) * Float32(s / r)) / Float32(pi))) / s) / s) end
function tmp = code(s, r) tmp = (((single(-0.16666666666666666) / single(pi)) + ((single(0.25) * (s / r)) / single(pi))) / s) / s; end
\begin{array}{l}
\\
\frac{\frac{\frac{-0.16666666666666666}{\pi} + \frac{0.25 \cdot \frac{s}{r}}{\pi}}{s}}{s}
\end{array}
Initial program 99.7%
Taylor expanded in r around inf
Simplified99.8%
Taylor expanded in s around inf
/-lowering-/.f32N/A
Simplified7.7%
Taylor expanded in s around 0
/-lowering-/.f32N/A
sub-negN/A
+-lowering-+.f32N/A
associate-/r*N/A
associate-*r/N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
associate-*r/N/A
metadata-evalN/A
distribute-neg-fracN/A
metadata-evalN/A
/-lowering-/.f32N/A
PI-lowering-PI.f327.7%
Simplified7.7%
Final simplification7.7%
(FPCore (s r) :precision binary32 (/ 1.0 (/ s (+ (/ (/ 0.25 PI) r) (/ -0.16666666666666666 (* s PI))))))
float code(float s, float r) {
return 1.0f / (s / (((0.25f / ((float) M_PI)) / r) + (-0.16666666666666666f / (s * ((float) M_PI)))));
}
function code(s, r) return Float32(Float32(1.0) / Float32(s / Float32(Float32(Float32(Float32(0.25) / Float32(pi)) / r) + Float32(Float32(-0.16666666666666666) / Float32(s * Float32(pi)))))) end
function tmp = code(s, r) tmp = single(1.0) / (s / (((single(0.25) / single(pi)) / r) + (single(-0.16666666666666666) / (s * single(pi))))); end
\begin{array}{l}
\\
\frac{1}{\frac{s}{\frac{\frac{0.25}{\pi}}{r} + \frac{-0.16666666666666666}{s \cdot \pi}}}
\end{array}
Initial program 99.7%
Taylor expanded in r around inf
Simplified99.8%
Taylor expanded in s around inf
/-lowering-/.f32N/A
Simplified7.7%
clear-numN/A
/-lowering-/.f32N/A
/-lowering-/.f32N/A
+-lowering-+.f32N/A
/-lowering-/.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.7%
Applied egg-rr7.7%
(FPCore (s r) :precision binary32 (/ (+ (/ 0.25 (* r PI)) (/ -0.16666666666666666 (* s PI))) s))
float code(float s, float r) {
return ((0.25f / (r * ((float) M_PI))) + (-0.16666666666666666f / (s * ((float) M_PI)))) / s;
}
function code(s, r) return Float32(Float32(Float32(Float32(0.25) / Float32(r * Float32(pi))) + Float32(Float32(-0.16666666666666666) / Float32(s * Float32(pi)))) / s) end
function tmp = code(s, r) tmp = ((single(0.25) / (r * single(pi))) + (single(-0.16666666666666666) / (s * single(pi)))) / s; end
\begin{array}{l}
\\
\frac{\frac{0.25}{r \cdot \pi} + \frac{-0.16666666666666666}{s \cdot \pi}}{s}
\end{array}
Initial program 99.7%
Taylor expanded in s around inf
/-lowering-/.f32N/A
sub-negN/A
associate-*r/N/A
metadata-evalN/A
+-lowering-+.f32N/A
associate-*r/N/A
metadata-evalN/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f32N/A
distribute-neg-fracN/A
metadata-evalN/A
/-lowering-/.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.7%
Simplified7.7%
(FPCore (s r) :precision binary32 (* (/ -0.25 r) (/ (/ -1.0 PI) s)))
float code(float s, float r) {
return (-0.25f / r) * ((-1.0f / ((float) M_PI)) / s);
}
function code(s, r) return Float32(Float32(Float32(-0.25) / r) * Float32(Float32(Float32(-1.0) / Float32(pi)) / s)) end
function tmp = code(s, r) tmp = (single(-0.25) / r) * ((single(-1.0) / single(pi)) / s); end
\begin{array}{l}
\\
\frac{-0.25}{r} \cdot \frac{\frac{-1}{\pi}}{s}
\end{array}
Initial program 99.7%
Taylor expanded in r around 0
/-lowering-/.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.6%
Simplified7.6%
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f32N/A
*-commutativeN/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.6%
Applied egg-rr7.6%
frac-2negN/A
metadata-evalN/A
*-commutativeN/A
*-commutativeN/A
distribute-lft-neg-inN/A
associate-/l/N/A
associate-/r*N/A
div-invN/A
associate-/l*N/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
/-lowering-/.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
neg-lowering-neg.f327.6%
Applied egg-rr7.6%
Final simplification7.6%
(FPCore (s r) :precision binary32 (* (/ (/ -0.25 r) PI) (/ -1.0 s)))
float code(float s, float r) {
return ((-0.25f / r) / ((float) M_PI)) * (-1.0f / s);
}
function code(s, r) return Float32(Float32(Float32(Float32(-0.25) / r) / Float32(pi)) * Float32(Float32(-1.0) / s)) end
function tmp = code(s, r) tmp = ((single(-0.25) / r) / single(pi)) * (single(-1.0) / s); end
\begin{array}{l}
\\
\frac{\frac{-0.25}{r}}{\pi} \cdot \frac{-1}{s}
\end{array}
Initial program 99.7%
Taylor expanded in r around 0
/-lowering-/.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.6%
Simplified7.6%
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f32N/A
*-commutativeN/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.6%
Applied egg-rr7.6%
frac-2negN/A
metadata-evalN/A
*-commutativeN/A
*-commutativeN/A
distribute-lft-neg-inN/A
associate-/l/N/A
associate-/r*N/A
div-invN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
/-lowering-/.f32N/A
PI-lowering-PI.f32N/A
neg-mul-1N/A
associate-/r*N/A
metadata-evalN/A
/-lowering-/.f327.6%
Applied egg-rr7.6%
(FPCore (s r) :precision binary32 (* (/ -0.25 (* r PI)) (/ -1.0 s)))
float code(float s, float r) {
return (-0.25f / (r * ((float) M_PI))) * (-1.0f / s);
}
function code(s, r) return Float32(Float32(Float32(-0.25) / Float32(r * Float32(pi))) * Float32(Float32(-1.0) / s)) end
function tmp = code(s, r) tmp = (single(-0.25) / (r * single(pi))) * (single(-1.0) / s); end
\begin{array}{l}
\\
\frac{-0.25}{r \cdot \pi} \cdot \frac{-1}{s}
\end{array}
Initial program 99.7%
Taylor expanded in r around 0
/-lowering-/.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.6%
Simplified7.6%
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f32N/A
*-commutativeN/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.6%
Applied egg-rr7.6%
frac-2negN/A
metadata-evalN/A
associate-*l*N/A
*-commutativeN/A
associate-*l*N/A
distribute-lft-neg-inN/A
associate-/l/N/A
div-invN/A
*-lowering-*.f32N/A
/-lowering-/.f32N/A
*-commutativeN/A
*-lowering-*.f32N/A
PI-lowering-PI.f32N/A
frac-2negN/A
metadata-evalN/A
remove-double-negN/A
/-lowering-/.f327.6%
Applied egg-rr7.6%
(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(Float32(0.25) / r) / Float32(s * Float32(pi))) end
function tmp = code(s, r) tmp = (single(0.25) / r) / (s * single(pi)); end
\begin{array}{l}
\\
\frac{\frac{0.25}{r}}{s \cdot \pi}
\end{array}
Initial program 99.7%
Taylor expanded in r around 0
/-lowering-/.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.6%
Simplified7.6%
associate-/r*N/A
/-lowering-/.f32N/A
/-lowering-/.f32N/A
*-commutativeN/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.6%
Applied egg-rr7.6%
Final simplification7.6%
(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.7%
Taylor expanded in r around 0
/-lowering-/.f32N/A
*-lowering-*.f32N/A
*-lowering-*.f32N/A
PI-lowering-PI.f327.6%
Simplified7.6%
herbie shell --seed 2024191
(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))))