
(FPCore (s r)
: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))))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
\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}
Herbie found 18 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (s r)
: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))))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
\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}
(FPCore (s r)
: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 (/ 0.3333333333333333 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 * (0.3333333333333333f / 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(0.3333333333333333) / 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(0.3333333333333333) / s)))) / (((single(6.0) * single(pi)) * s) * r)); end
\frac{0.25 \cdot e^{\frac{-r}{s}}}{\left(\left(2 \cdot \pi\right) \cdot s\right) \cdot r} + \frac{0.75 \cdot e^{-r \cdot \frac{0.3333333333333333}{s}}}{\left(\left(6 \cdot \pi\right) \cdot s\right) \cdot r}
Initial program 99.5%
Applied rewrites99.5%
(FPCore (s r)
: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))))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(-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
\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{\frac{r}{-3}}{s}}}{\left(\left(6 \cdot \pi\right) \cdot s\right) \cdot r}
Initial program 99.5%
Applied rewrites99.6%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(/
(fma
0.125
(/ (exp (* -1.0 (/ r s))) (* r PI))
(* 0.125 (/ (/ (exp (* -0.3333333333333333 (/ r s))) r) PI)))
s))float code(float s, float r) {
return fmaf(0.125f, (expf((-1.0f * (r / s))) / (r * ((float) M_PI))), (0.125f * ((expf((-0.3333333333333333f * (r / s))) / r) / ((float) M_PI)))) / s;
}
function code(s, r) return Float32(fma(Float32(0.125), Float32(exp(Float32(Float32(-1.0) * Float32(r / s))) / Float32(r * Float32(pi))), Float32(Float32(0.125) * Float32(Float32(exp(Float32(Float32(-0.3333333333333333) * Float32(r / s))) / r) / Float32(pi)))) / s) end
\frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{\frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r}}{\pi}\right)}{s}
Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Applied rewrites99.5%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(/
(*
0.125
(/
(+ (exp (/ (- r) s)) (exp (* r (/ -0.3333333333333333 s))))
(* r PI)))
s))float code(float s, float r) {
return (0.125f * ((expf((-r / s)) + expf((r * (-0.3333333333333333f / s)))) / (r * ((float) M_PI)))) / s;
}
function code(s, r) return Float32(Float32(Float32(0.125) * Float32(Float32(exp(Float32(Float32(-r) / s)) + exp(Float32(r * Float32(Float32(-0.3333333333333333) / s)))) / Float32(r * Float32(pi)))) / s) end
function tmp = code(s, r) tmp = (single(0.125) * ((exp((-r / s)) + exp((r * (single(-0.3333333333333333) / s)))) / (r * single(pi)))) / s; end
\frac{0.125 \cdot \frac{e^{\frac{-r}{s}} + e^{r \cdot \frac{-0.3333333333333333}{s}}}{r \cdot \pi}}{s}
Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Applied rewrites99.5%
Applied rewrites99.5%
Applied rewrites99.5%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(/
(*
0.125
(/
(+ (exp (/ (- r) s)) (exp (* -0.3333333333333333 (/ r s))))
(* r PI)))
s))float code(float s, float r) {
return (0.125f * ((expf((-r / s)) + expf((-0.3333333333333333f * (r / s)))) / (r * ((float) M_PI)))) / s;
}
function code(s, r) return Float32(Float32(Float32(0.125) * Float32(Float32(exp(Float32(Float32(-r) / s)) + exp(Float32(Float32(-0.3333333333333333) * Float32(r / s)))) / Float32(r * Float32(pi)))) / s) end
function tmp = code(s, r) tmp = (single(0.125) * ((exp((-r / s)) + exp((single(-0.3333333333333333) * (r / s)))) / (r * single(pi)))) / s; end
\frac{0.125 \cdot \frac{e^{\frac{-r}{s}} + e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}}{s}
Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Applied rewrites99.5%
Applied rewrites99.5%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(let* ((t_0 (* (* (* 2.0 PI) s) r)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) t_0)
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
4.999999873689376e-5)
(+
(/ 0.0 t_0)
(*
0.125
(/ (exp (* r (/ -0.3333333333333333 s))) (* r (* s PI)))))
(/
1.0
(*
r
(fma
(fma
-8.0
(* r (* (/ PI s) -0.08333333333333333))
(* 2.6666666666666665 PI))
r
(* 4.0 (* s PI))))))))float code(float s, float r) {
float t_0 = ((2.0f * ((float) M_PI)) * s) * r;
float tmp;
if ((((0.25f * expf((-r / s))) / t_0) + ((0.75f * expf((-r / (3.0f * s)))) / (((6.0f * ((float) M_PI)) * s) * r))) <= 4.999999873689376e-5f) {
tmp = (0.0f / t_0) + (0.125f * (expf((r * (-0.3333333333333333f / s))) / (r * (s * ((float) M_PI)))));
} else {
tmp = 1.0f / (r * fmaf(fmaf(-8.0f, (r * ((((float) M_PI) / s) * -0.08333333333333333f)), (2.6666666666666665f * ((float) M_PI))), r, (4.0f * (s * ((float) M_PI)))));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(Float32(Float32(2.0) * Float32(pi)) * s) * r) tmp = Float32(0.0) if (Float32(Float32(Float32(Float32(0.25) * exp(Float32(Float32(-r) / s))) / t_0) + Float32(Float32(Float32(0.75) * exp(Float32(Float32(-r) / Float32(Float32(3.0) * s)))) / Float32(Float32(Float32(Float32(6.0) * Float32(pi)) * s) * r))) <= Float32(4.999999873689376e-5)) tmp = Float32(Float32(Float32(0.0) / t_0) + Float32(Float32(0.125) * Float32(exp(Float32(r * Float32(Float32(-0.3333333333333333) / s))) / Float32(r * Float32(s * Float32(pi)))))); else tmp = Float32(Float32(1.0) / Float32(r * fma(fma(Float32(-8.0), Float32(r * Float32(Float32(Float32(pi) / s) * Float32(-0.08333333333333333))), Float32(Float32(2.6666666666666665) * Float32(pi))), r, Float32(Float32(4.0) * Float32(s * Float32(pi)))))); end return tmp end
\begin{array}{l}
t_0 := \left(\left(2 \cdot \pi\right) \cdot s\right) \cdot r\\
\mathbf{if}\;\frac{0.25 \cdot e^{\frac{-r}{s}}}{t\_0} + \frac{0.75 \cdot e^{\frac{-r}{3 \cdot s}}}{\left(\left(6 \cdot \pi\right) \cdot s\right) \cdot r} \leq 4.999999873689376 \cdot 10^{-5}:\\
\;\;\;\;\frac{0}{t\_0} + 0.125 \cdot \frac{e^{r \cdot \frac{-0.3333333333333333}{s}}}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \mathsf{fma}\left(\mathsf{fma}\left(-8, r \cdot \left(\frac{\pi}{s} \cdot -0.08333333333333333\right), 2.6666666666666665 \cdot \pi\right), r, 4 \cdot \left(s \cdot \pi\right)\right)}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 4.99999987e-5Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites9.0%
Taylor expanded in undef-var around zero
Applied rewrites93.4%
Taylor expanded in s around 0
Applied rewrites93.4%
Applied rewrites93.4%
if 4.99999987e-5 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Applied rewrites99.5%
Taylor expanded in r around 0
Applied rewrites25.7%
Applied rewrites26.3%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
4.999999873689376e-5)
(+
(/ 0.0 (* (* 6.2831854820251465 s) r))
(* 0.125 (/ (exp (* -0.3333333333333333 (/ r s))) (* r (* s PI)))))
(/
1.0
(*
r
(fma
(fma
-8.0
(* r (* (/ PI s) -0.08333333333333333))
(* 2.6666666666666665 PI))
r
(* 4.0 (* s PI)))))))float code(float s, float r) {
float tmp;
if ((((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))) <= 4.999999873689376e-5f) {
tmp = (0.0f / ((6.2831854820251465f * s) * r)) + (0.125f * (expf((-0.3333333333333333f * (r / s))) / (r * (s * ((float) M_PI)))));
} else {
tmp = 1.0f / (r * fmaf(fmaf(-8.0f, (r * ((((float) M_PI) / s) * -0.08333333333333333f)), (2.6666666666666665f * ((float) M_PI))), r, (4.0f * (s * ((float) M_PI)))));
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(4.999999873689376e-5)) tmp = Float32(Float32(Float32(0.0) / Float32(Float32(Float32(6.2831854820251465) * s) * r)) + Float32(Float32(0.125) * Float32(exp(Float32(Float32(-0.3333333333333333) * Float32(r / s))) / Float32(r * Float32(s * Float32(pi)))))); else tmp = Float32(Float32(1.0) / Float32(r * fma(fma(Float32(-8.0), Float32(r * Float32(Float32(Float32(pi) / s) * Float32(-0.08333333333333333))), Float32(Float32(2.6666666666666665) * Float32(pi))), r, Float32(Float32(4.0) * Float32(s * Float32(pi)))))); end return tmp end
\begin{array}{l}
\mathbf{if}\;\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} \leq 4.999999873689376 \cdot 10^{-5}:\\
\;\;\;\;\frac{0}{\left(6.2831854820251465 \cdot s\right) \cdot r} + 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \mathsf{fma}\left(\mathsf{fma}\left(-8, r \cdot \left(\frac{\pi}{s} \cdot -0.08333333333333333\right), 2.6666666666666665 \cdot \pi\right), r, 4 \cdot \left(s \cdot \pi\right)\right)}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 4.99999987e-5Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites9.0%
Taylor expanded in undef-var around zero
Applied rewrites93.4%
Evaluated real constant93.4%
Taylor expanded in s around 0
Applied rewrites93.4%
if 4.99999987e-5 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Applied rewrites99.5%
Taylor expanded in r around 0
Applied rewrites25.7%
Applied rewrites26.3%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
1.0000000195414814e-25)
(/ 0.0 (* r (* s PI)))
(/
1.0
(*
r
(fma
(fma
-8.0
(* r (* (/ PI s) -0.08333333333333333))
(* 2.6666666666666665 PI))
r
(* 4.0 (* s PI)))))))float code(float s, float r) {
float tmp;
if ((((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))) <= 1.0000000195414814e-25f) {
tmp = 0.0f / (r * (s * ((float) M_PI)));
} else {
tmp = 1.0f / (r * fmaf(fmaf(-8.0f, (r * ((((float) M_PI) / s) * -0.08333333333333333f)), (2.6666666666666665f * ((float) M_PI))), r, (4.0f * (s * ((float) M_PI)))));
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(1.0000000195414814e-25)) tmp = Float32(Float32(0.0) / Float32(r * Float32(s * Float32(pi)))); else tmp = Float32(Float32(1.0) / Float32(r * fma(fma(Float32(-8.0), Float32(r * Float32(Float32(Float32(pi) / s) * Float32(-0.08333333333333333))), Float32(Float32(2.6666666666666665) * Float32(pi))), r, Float32(Float32(4.0) * Float32(s * Float32(pi)))))); end return tmp end
\begin{array}{l}
\mathbf{if}\;\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} \leq 1.0000000195414814 \cdot 10^{-25}:\\
\;\;\;\;\frac{0}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \mathsf{fma}\left(\mathsf{fma}\left(-8, r \cdot \left(\frac{\pi}{s} \cdot -0.08333333333333333\right), 2.6666666666666665 \cdot \pi\right), r, 4 \cdot \left(s \cdot \pi\right)\right)}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 1.00000002e-25Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.9%
Taylor expanded in undef-var around zero
Applied rewrites88.8%
if 1.00000002e-25 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Applied rewrites99.5%
Taylor expanded in r around 0
Applied rewrites25.7%
Applied rewrites26.3%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
1.0000000195414814e-25)
(/ 0.0 (* r (* s PI)))
(-
(/
(-
(-
(/
(-
(- (/ (* (/ r PI) -0.06944444444444445) s))
0.053051646798849106)
s))
(/ 0.25 (* r PI)))
s))))float code(float s, float r) {
float tmp;
if ((((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))) <= 1.0000000195414814e-25f) {
tmp = 0.0f / (r * (s * ((float) M_PI)));
} else {
tmp = -((-((-(((r / ((float) M_PI)) * -0.06944444444444445f) / s) - 0.053051646798849106f) / s) - (0.25f / (r * ((float) M_PI)))) / s);
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(1.0000000195414814e-25)) tmp = Float32(Float32(0.0) / Float32(r * Float32(s * Float32(pi)))); else tmp = Float32(-Float32(Float32(Float32(-Float32(Float32(Float32(-Float32(Float32(Float32(r / Float32(pi)) * Float32(-0.06944444444444445)) / s)) - Float32(0.053051646798849106)) / s)) - Float32(Float32(0.25) / Float32(r * Float32(pi)))) / s)); end return tmp end
function tmp_2 = code(s, r) tmp = single(0.0); if ((((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))) <= single(1.0000000195414814e-25)) tmp = single(0.0) / (r * (s * single(pi))); else tmp = -((-((-(((r / single(pi)) * single(-0.06944444444444445)) / s) - single(0.053051646798849106)) / s) - (single(0.25) / (r * single(pi)))) / s); end tmp_2 = tmp; end
\begin{array}{l}
\mathbf{if}\;\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} \leq 1.0000000195414814 \cdot 10^{-25}:\\
\;\;\;\;\frac{0}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;-\frac{\left(-\frac{\left(-\frac{\frac{r}{\pi} \cdot -0.06944444444444445}{s}\right) - 0.053051646798849106}{s}\right) - \frac{0.25}{r \cdot \pi}}{s}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 1.00000002e-25Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.9%
Taylor expanded in undef-var around zero
Applied rewrites88.8%
if 1.00000002e-25 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around -inf
Applied rewrites9.8%
Applied rewrites9.8%
Evaluated real constant9.8%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
1.0000000195414814e-25)
(/ 0.0 (* r (* s PI)))
(-
(/
(-
(/
(+ 0.053051646798849106 (* -0.06944444444444445 (/ r (* s PI))))
s)
(/ 0.25 (* r PI)))
s))))float code(float s, float r) {
float tmp;
if ((((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))) <= 1.0000000195414814e-25f) {
tmp = 0.0f / (r * (s * ((float) M_PI)));
} else {
tmp = -((((0.053051646798849106f + (-0.06944444444444445f * (r / (s * ((float) M_PI))))) / s) - (0.25f / (r * ((float) M_PI)))) / s);
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(1.0000000195414814e-25)) tmp = Float32(Float32(0.0) / Float32(r * Float32(s * Float32(pi)))); else tmp = Float32(-Float32(Float32(Float32(Float32(Float32(0.053051646798849106) + Float32(Float32(-0.06944444444444445) * Float32(r / Float32(s * Float32(pi))))) / s) - Float32(Float32(0.25) / Float32(r * Float32(pi)))) / s)); end return tmp end
function tmp_2 = code(s, r) tmp = single(0.0); if ((((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))) <= single(1.0000000195414814e-25)) tmp = single(0.0) / (r * (s * single(pi))); else tmp = -((((single(0.053051646798849106) + (single(-0.06944444444444445) * (r / (s * single(pi))))) / s) - (single(0.25) / (r * single(pi)))) / s); end tmp_2 = tmp; end
\begin{array}{l}
\mathbf{if}\;\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} \leq 1.0000000195414814 \cdot 10^{-25}:\\
\;\;\;\;\frac{0}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;-\frac{\frac{0.053051646798849106 + -0.06944444444444445 \cdot \frac{r}{s \cdot \pi}}{s} - \frac{0.25}{r \cdot \pi}}{s}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 1.00000002e-25Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.9%
Taylor expanded in undef-var around zero
Applied rewrites88.8%
if 1.00000002e-25 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around -inf
Applied rewrites9.8%
Applied rewrites9.8%
Evaluated real constant9.8%
Taylor expanded in s around inf
Applied rewrites9.8%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
1.0000000195414814e-25)
(/ 0.0 (* r (* s PI)))
(/
1.0
(*
r
(fma
4.0
(* s PI)
(*
r
(-
(* 1.7777777777777777 (/ (* r PI) s))
-8.377580642700195)))))))float code(float s, float r) {
float tmp;
if ((((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))) <= 1.0000000195414814e-25f) {
tmp = 0.0f / (r * (s * ((float) M_PI)));
} else {
tmp = 1.0f / (r * fmaf(4.0f, (s * ((float) M_PI)), (r * ((1.7777777777777777f * ((r * ((float) M_PI)) / s)) - -8.377580642700195f))));
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(1.0000000195414814e-25)) tmp = Float32(Float32(0.0) / Float32(r * Float32(s * Float32(pi)))); else tmp = Float32(Float32(1.0) / Float32(r * fma(Float32(4.0), Float32(s * Float32(pi)), Float32(r * Float32(Float32(Float32(1.7777777777777777) * Float32(Float32(r * Float32(pi)) / s)) - Float32(-8.377580642700195)))))); end return tmp end
\begin{array}{l}
\mathbf{if}\;\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} \leq 1.0000000195414814 \cdot 10^{-25}:\\
\;\;\;\;\frac{0}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \mathsf{fma}\left(4, s \cdot \pi, r \cdot \left(1.7777777777777777 \cdot \frac{r \cdot \pi}{s} - -8.377580642700195\right)\right)}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 1.00000002e-25Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.9%
Taylor expanded in undef-var around zero
Applied rewrites88.8%
if 1.00000002e-25 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.8%
Applied rewrites8.8%
Taylor expanded in r around 0
Applied rewrites25.6%
Evaluated real constant25.6%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
1.0000000195414814e-25)
(/ 0.0 (* r (* s PI)))
(/ 1.0 (* r (fma 2.6666666666666665 (* r PI) (* 4.0 (* s PI)))))))float code(float s, float r) {
float tmp;
if ((((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))) <= 1.0000000195414814e-25f) {
tmp = 0.0f / (r * (s * ((float) M_PI)));
} else {
tmp = 1.0f / (r * fmaf(2.6666666666666665f, (r * ((float) M_PI)), (4.0f * (s * ((float) M_PI)))));
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(1.0000000195414814e-25)) tmp = Float32(Float32(0.0) / Float32(r * Float32(s * Float32(pi)))); else tmp = Float32(Float32(1.0) / Float32(r * fma(Float32(2.6666666666666665), Float32(r * Float32(pi)), Float32(Float32(4.0) * Float32(s * Float32(pi)))))); end return tmp end
\begin{array}{l}
\mathbf{if}\;\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} \leq 1.0000000195414814 \cdot 10^{-25}:\\
\;\;\;\;\frac{0}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{r \cdot \mathsf{fma}\left(2.6666666666666665, r \cdot \pi, 4 \cdot \left(s \cdot \pi\right)\right)}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 1.00000002e-25Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.9%
Taylor expanded in undef-var around zero
Applied rewrites88.8%
if 1.00000002e-25 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Applied rewrites99.5%
Taylor expanded in r around 0
Applied rewrites12.1%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
9.999999747378752e-5)
(/ 0.0 (* r (* s PI)))
(/
(-
(* 0.07957746933150284 (/ 1.0 r))
(* 0.0530516462210019 (/ 1.0 s)))
s)))float code(float s, float r) {
float tmp;
if ((((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))) <= 9.999999747378752e-5f) {
tmp = 0.0f / (r * (s * ((float) M_PI)));
} else {
tmp = ((0.07957746933150284f * (1.0f / r)) - (0.0530516462210019f * (1.0f / s))) / s;
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(9.999999747378752e-5)) tmp = Float32(Float32(0.0) / Float32(r * Float32(s * Float32(pi)))); else tmp = Float32(Float32(Float32(Float32(0.07957746933150284) * Float32(Float32(1.0) / r)) - Float32(Float32(0.0530516462210019) * Float32(Float32(1.0) / s))) / s); end return tmp end
function tmp_2 = code(s, r) tmp = single(0.0); if ((((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))) <= single(9.999999747378752e-5)) tmp = single(0.0) / (r * (s * single(pi))); else tmp = ((single(0.07957746933150284) * (single(1.0) / r)) - (single(0.0530516462210019) * (single(1.0) / s))) / s; end tmp_2 = tmp; end
\begin{array}{l}
\mathbf{if}\;\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} \leq 9.999999747378752 \cdot 10^{-5}:\\
\;\;\;\;\frac{0}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{0.07957746933150284 \cdot \frac{1}{r} - 0.0530516462210019 \cdot \frac{1}{s}}{s}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 9.99999975e-5Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.9%
Taylor expanded in undef-var around zero
Applied rewrites88.8%
if 9.99999975e-5 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Applied rewrites98.7%
Taylor expanded in s around inf
Applied rewrites8.9%
Evaluated real constant8.9%
Taylor expanded in s around inf
Applied rewrites8.8%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
9.999999747378752e-5)
(/ 0.0 (* r (* s PI)))
(/
(/ (fma -0.16666666666666666 (/ r (* s PI)) 0.07957746833562851) r)
s)))float code(float s, float r) {
float tmp;
if ((((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))) <= 9.999999747378752e-5f) {
tmp = 0.0f / (r * (s * ((float) M_PI)));
} else {
tmp = (fmaf(-0.16666666666666666f, (r / (s * ((float) M_PI))), 0.07957746833562851f) / r) / s;
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(9.999999747378752e-5)) tmp = Float32(Float32(0.0) / Float32(r * Float32(s * Float32(pi)))); else tmp = Float32(Float32(fma(Float32(-0.16666666666666666), Float32(r / Float32(s * Float32(pi))), Float32(0.07957746833562851)) / r) / s); end return tmp end
\begin{array}{l}
\mathbf{if}\;\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} \leq 9.999999747378752 \cdot 10^{-5}:\\
\;\;\;\;\frac{0}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(-0.16666666666666666, \frac{r}{s \cdot \pi}, 0.07957746833562851\right)}{r}}{s}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 9.99999975e-5Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.9%
Taylor expanded in undef-var around zero
Applied rewrites88.8%
if 9.99999975e-5 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Taylor expanded in r around 0
Applied rewrites8.8%
Evaluated real constant8.8%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
9.999999747378752e-5)
(/ 0.0 (* r (* s PI)))
(- (/ (- (/ 0.053051646798849106 s) (/ 0.25 (* r PI))) s))))float code(float s, float r) {
float tmp;
if ((((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))) <= 9.999999747378752e-5f) {
tmp = 0.0f / (r * (s * ((float) M_PI)));
} else {
tmp = -(((0.053051646798849106f / s) - (0.25f / (r * ((float) M_PI)))) / s);
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(9.999999747378752e-5)) tmp = Float32(Float32(0.0) / Float32(r * Float32(s * Float32(pi)))); else tmp = Float32(-Float32(Float32(Float32(Float32(0.053051646798849106) / s) - Float32(Float32(0.25) / Float32(r * Float32(pi)))) / s)); end return tmp end
function tmp_2 = code(s, r) tmp = single(0.0); if ((((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))) <= single(9.999999747378752e-5)) tmp = single(0.0) / (r * (s * single(pi))); else tmp = -(((single(0.053051646798849106) / s) - (single(0.25) / (r * single(pi)))) / s); end tmp_2 = tmp; end
\begin{array}{l}
\mathbf{if}\;\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} \leq 9.999999747378752 \cdot 10^{-5}:\\
\;\;\;\;\frac{0}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;-\frac{\frac{0.053051646798849106}{s} - \frac{0.25}{r \cdot \pi}}{s}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 9.99999975e-5Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.9%
Taylor expanded in undef-var around zero
Applied rewrites88.8%
if 9.99999975e-5 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around -inf
Applied rewrites9.8%
Applied rewrites9.8%
Evaluated real constant9.8%
Taylor expanded in s around inf
Applied rewrites8.8%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
1.0000000195414814e-25)
(/ 0.0 (* r (* s PI)))
(/ (/ 0.07957746833562851 r) s)))float code(float s, float r) {
float tmp;
if ((((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))) <= 1.0000000195414814e-25f) {
tmp = 0.0f / (r * (s * ((float) M_PI)));
} else {
tmp = (0.07957746833562851f / r) / s;
}
return tmp;
}
function code(s, r) tmp = Float32(0.0) if (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))) <= Float32(1.0000000195414814e-25)) tmp = Float32(Float32(0.0) / Float32(r * Float32(s * Float32(pi)))); else tmp = Float32(Float32(Float32(0.07957746833562851) / r) / s); end return tmp end
function tmp_2 = code(s, r) tmp = single(0.0); if ((((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))) <= single(1.0000000195414814e-25)) tmp = single(0.0) / (r * (s * single(pi))); else tmp = (single(0.07957746833562851) / r) / s; end tmp_2 = tmp; end
\begin{array}{l}
\mathbf{if}\;\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} \leq 1.0000000195414814 \cdot 10^{-25}:\\
\;\;\;\;\frac{0}{r \cdot \left(s \cdot \pi\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{0.07957746833562851}{r}}{s}\\
\end{array}
if (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) < 1.00000002e-25Initial program 99.5%
Taylor expanded in s around inf
Applied rewrites8.9%
Taylor expanded in undef-var around zero
Applied rewrites88.8%
if 1.00000002e-25 < (+.f32 (/.f32 (*.f32 #s(literal 1/4 binary32) (exp.f32 (/.f32 (neg.f32 r) s))) (*.f32 (*.f32 (*.f32 #s(literal 2 binary32) (PI.f32)) s) r)) (/.f32 (*.f32 #s(literal 3/4 binary32) (exp.f32 (/.f32 (neg.f32 r) (*.f32 #s(literal 3 binary32) s)))) (*.f32 (*.f32 (*.f32 #s(literal 6 binary32) (PI.f32)) s) r))) Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Taylor expanded in r around 0
Applied rewrites8.8%
Evaluated real constant8.8%
Taylor expanded in s around inf
Applied rewrites8.9%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(/ (/ 0.07957746833562851 r) s))float code(float s, float r) {
return (0.07957746833562851f / r) / s;
}
real(4) function code(s, r)
use fmin_fmax_functions
real(4), intent (in) :: s
real(4), intent (in) :: r
code = (0.07957746833562851e0 / r) / s
end function
function code(s, r) return Float32(Float32(Float32(0.07957746833562851) / r) / s) end
function tmp = code(s, r) tmp = (single(0.07957746833562851) / r) / s; end
\frac{\frac{0.07957746833562851}{r}}{s}
Initial program 99.5%
Taylor expanded in s around 0
Applied rewrites99.5%
Taylor expanded in r around 0
Applied rewrites8.8%
Evaluated real constant8.8%
Taylor expanded in s around inf
Applied rewrites8.9%
(FPCore (s r)
:precision binary32
:pre (and (and (<= 0.0 s) (<= s 256.0))
(and (< 1e-6 r) (< r 1000000.0)))
(/ 0.07957746933150284 (* r s)))float code(float s, float r) {
return 0.07957746933150284f / (r * s);
}
real(4) function code(s, r)
use fmin_fmax_functions
real(4), intent (in) :: s
real(4), intent (in) :: r
code = 0.07957746933150284e0 / (r * s)
end function
function code(s, r) return Float32(Float32(0.07957746933150284) / Float32(r * s)) end
function tmp = code(s, r) tmp = single(0.07957746933150284) / (r * s); end
\frac{0.07957746933150284}{r \cdot s}
Initial program 99.5%
Applied rewrites98.7%
Taylor expanded in s around inf
Applied rewrites8.9%
Evaluated real constant8.9%
Taylor expanded in s around inf
Applied rewrites8.9%
herbie shell --seed 2026089 +o generate:egglog
(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))))