
(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
\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 12 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
\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 (+ (/ (* 0.25 (exp (/ 1.0 (/ (- s) r)))) (* (* (* 2.0 PI) s) r)) (/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* 18.84955596923828 s) r))))
float code(float s, float r) {
return ((0.25f * expf((1.0f / (-s / r)))) / (((2.0f * ((float) M_PI)) * s) * r)) + ((0.75f * expf((-r / (3.0f * s)))) / ((18.84955596923828f * s) * r));
}
function code(s, r) return Float32(Float32(Float32(Float32(0.25) * exp(Float32(Float32(1.0) / Float32(Float32(-s) / r)))) / 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(18.84955596923828) * s) * r))) end
function tmp = code(s, r) tmp = ((single(0.25) * exp((single(1.0) / (-s / r)))) / (((single(2.0) * single(pi)) * s) * r)) + ((single(0.75) * exp((-r / (single(3.0) * s)))) / ((single(18.84955596923828) * s) * r)); end
\frac{0.25 \cdot e^{\frac{1}{\frac{-s}{r}}}}{\left(\left(2 \cdot \pi\right) \cdot s\right) \cdot r} + \frac{0.75 \cdot e^{\frac{-r}{3 \cdot s}}}{\left(18.84955596923828 \cdot s\right) \cdot r}
Initial program 99.5%
lift-/.f32N/A
frac-2negN/A
div-flipN/A
lower-/.f32N/A
lift-neg.f32N/A
remove-double-negN/A
lower-/.f32N/A
lower-neg.f3299.5%
Applied rewrites99.5%
Evaluated real constant99.5%
(FPCore (s r) :precision binary32 (+ (/ (* 0.25 (exp (/ (- r) s))) (* (* 6.2831854820251465 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))) / ((6.2831854820251465f * 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(6.2831854820251465) * 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(6.2831854820251465) * 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(6.2831854820251465 \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}
Initial program 99.5%
Evaluated real constant99.5%
(FPCore (s r) :precision binary32 (let* ((t_0 (/ (- r) s))) (* (/ 1.0 (/ (* (+ PI PI) r) 0.25)) (/ 1.0 (/ s (+ (exp (* 0.3333333333333333 t_0)) (exp t_0)))))))
float code(float s, float r) {
float t_0 = -r / s;
return (1.0f / (((((float) M_PI) + ((float) M_PI)) * r) / 0.25f)) * (1.0f / (s / (expf((0.3333333333333333f * t_0)) + expf(t_0))));
}
function code(s, r) t_0 = Float32(Float32(-r) / s) return Float32(Float32(Float32(1.0) / Float32(Float32(Float32(Float32(pi) + Float32(pi)) * r) / Float32(0.25))) * Float32(Float32(1.0) / Float32(s / Float32(exp(Float32(Float32(0.3333333333333333) * t_0)) + exp(t_0))))) end
function tmp = code(s, r) t_0 = -r / s; tmp = (single(1.0) / (((single(pi) + single(pi)) * r) / single(0.25))) * (single(1.0) / (s / (exp((single(0.3333333333333333) * t_0)) + exp(t_0)))); end
\begin{array}{l}
t_0 := \frac{-r}{s}\\
\frac{1}{\frac{\left(\pi + \pi\right) \cdot r}{0.25}} \cdot \frac{1}{\frac{s}{e^{0.3333333333333333 \cdot t\_0} + e^{t\_0}}}
\end{array}
Initial program 99.5%
Applied rewrites99.4%
lift-+.f32N/A
lift-/.f32N/A
lift-/.f32N/A
div-flip-revN/A
lift-/.f32N/A
lift-/.f32N/A
div-flip-revN/A
div-add-revN/A
div-flipN/A
lower-/.f32N/A
lower-/.f32N/A
+-commutativeN/A
lower-+.f3299.4%
Applied rewrites99.4%
(FPCore (s r)
:precision binary32
(let* ((t_0 (/ (- r) s)) (t_1 (exp t_0)))
(if (<=
(+
(/ (* 0.25 t_1) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
0.0020000000949949026)
(/
1.0
(/
(* PI r)
(* (- (- (exp (* 0.3333333333333333 t_0))) t_1) -0.25)))
(*
(/ 1.0 (/ (* (+ PI PI) r) 0.25))
(+ (/ 1.0 (/ s t_1)) (/ 1.0 (+ s (* 0.3333333333333333 r))))))))float code(float s, float r) {
float t_0 = -r / s;
float t_1 = expf(t_0);
float tmp;
if ((((0.25f * t_1) / (((2.0f * ((float) M_PI)) * s) * r)) + ((0.75f * expf((-r / (3.0f * s)))) / (((6.0f * ((float) M_PI)) * s) * r))) <= 0.0020000000949949026f) {
tmp = 1.0f / ((((float) M_PI) * r) / ((-expf((0.3333333333333333f * t_0)) - t_1) * -0.25f));
} else {
tmp = (1.0f / (((((float) M_PI) + ((float) M_PI)) * r) / 0.25f)) * ((1.0f / (s / t_1)) + (1.0f / (s + (0.3333333333333333f * r))));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(-r) / s) t_1 = exp(t_0) tmp = Float32(0.0) if (Float32(Float32(Float32(Float32(0.25) * t_1) / 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(0.0020000000949949026)) tmp = Float32(Float32(1.0) / Float32(Float32(Float32(pi) * r) / Float32(Float32(Float32(-exp(Float32(Float32(0.3333333333333333) * t_0))) - t_1) * Float32(-0.25)))); else tmp = Float32(Float32(Float32(1.0) / Float32(Float32(Float32(Float32(pi) + Float32(pi)) * r) / Float32(0.25))) * Float32(Float32(Float32(1.0) / Float32(s / t_1)) + Float32(Float32(1.0) / Float32(s + Float32(Float32(0.3333333333333333) * r))))); end return tmp end
function tmp_2 = code(s, r) t_0 = -r / s; t_1 = exp(t_0); tmp = single(0.0); if ((((single(0.25) * t_1) / (((single(2.0) * single(pi)) * s) * r)) + ((single(0.75) * exp((-r / (single(3.0) * s)))) / (((single(6.0) * single(pi)) * s) * r))) <= single(0.0020000000949949026)) tmp = single(1.0) / ((single(pi) * r) / ((-exp((single(0.3333333333333333) * t_0)) - t_1) * single(-0.25))); else tmp = (single(1.0) / (((single(pi) + single(pi)) * r) / single(0.25))) * ((single(1.0) / (s / t_1)) + (single(1.0) / (s + (single(0.3333333333333333) * r)))); end tmp_2 = tmp; end
\begin{array}{l}
t_0 := \frac{-r}{s}\\
t_1 := e^{t\_0}\\
\mathbf{if}\;\frac{0.25 \cdot t\_1}{\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 0.0020000000949949026:\\
\;\;\;\;\frac{1}{\frac{\pi \cdot r}{\left(\left(-e^{0.3333333333333333 \cdot t\_0}\right) - t\_1\right) \cdot -0.25}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\left(\pi + \pi\right) \cdot r}{0.25}} \cdot \left(\frac{1}{\frac{s}{t\_1}} + \frac{1}{s + 0.3333333333333333 \cdot r}\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))) < 0.00200000009Initial program 99.5%
Applied rewrites90.0%
Applied rewrites90.0%
if 0.00200000009 < (+.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 rewrites99.4%
Taylor expanded in r around 0
lower-+.f32N/A
lower-*.f3213.0%
Applied rewrites13.0%
(FPCore (s r)
:precision binary32
(let* ((t_0 (/ (- r) s)) (t_1 (exp t_0)))
(if (<=
(+
(/ (* 0.25 t_1) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
0.0020000000949949026)
(*
(* (/ 1.0 (* PI r)) (+ (exp (* 0.3333333333333333 t_0)) t_1))
0.25)
(*
(/ 1.0 (/ (* (+ PI PI) r) 0.25))
(+ (/ 1.0 (/ s t_1)) (/ 1.0 (+ s (* 0.3333333333333333 r))))))))float code(float s, float r) {
float t_0 = -r / s;
float t_1 = expf(t_0);
float tmp;
if ((((0.25f * t_1) / (((2.0f * ((float) M_PI)) * s) * r)) + ((0.75f * expf((-r / (3.0f * s)))) / (((6.0f * ((float) M_PI)) * s) * r))) <= 0.0020000000949949026f) {
tmp = ((1.0f / (((float) M_PI) * r)) * (expf((0.3333333333333333f * t_0)) + t_1)) * 0.25f;
} else {
tmp = (1.0f / (((((float) M_PI) + ((float) M_PI)) * r) / 0.25f)) * ((1.0f / (s / t_1)) + (1.0f / (s + (0.3333333333333333f * r))));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(-r) / s) t_1 = exp(t_0) tmp = Float32(0.0) if (Float32(Float32(Float32(Float32(0.25) * t_1) / 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(0.0020000000949949026)) tmp = Float32(Float32(Float32(Float32(1.0) / Float32(Float32(pi) * r)) * Float32(exp(Float32(Float32(0.3333333333333333) * t_0)) + t_1)) * Float32(0.25)); else tmp = Float32(Float32(Float32(1.0) / Float32(Float32(Float32(Float32(pi) + Float32(pi)) * r) / Float32(0.25))) * Float32(Float32(Float32(1.0) / Float32(s / t_1)) + Float32(Float32(1.0) / Float32(s + Float32(Float32(0.3333333333333333) * r))))); end return tmp end
function tmp_2 = code(s, r) t_0 = -r / s; t_1 = exp(t_0); tmp = single(0.0); if ((((single(0.25) * t_1) / (((single(2.0) * single(pi)) * s) * r)) + ((single(0.75) * exp((-r / (single(3.0) * s)))) / (((single(6.0) * single(pi)) * s) * r))) <= single(0.0020000000949949026)) tmp = ((single(1.0) / (single(pi) * r)) * (exp((single(0.3333333333333333) * t_0)) + t_1)) * single(0.25); else tmp = (single(1.0) / (((single(pi) + single(pi)) * r) / single(0.25))) * ((single(1.0) / (s / t_1)) + (single(1.0) / (s + (single(0.3333333333333333) * r)))); end tmp_2 = tmp; end
\begin{array}{l}
t_0 := \frac{-r}{s}\\
t_1 := e^{t\_0}\\
\mathbf{if}\;\frac{0.25 \cdot t\_1}{\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 0.0020000000949949026:\\
\;\;\;\;\left(\frac{1}{\pi \cdot r} \cdot \left(e^{0.3333333333333333 \cdot t\_0} + t\_1\right)\right) \cdot 0.25\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\left(\pi + \pi\right) \cdot r}{0.25}} \cdot \left(\frac{1}{\frac{s}{t\_1}} + \frac{1}{s + 0.3333333333333333 \cdot r}\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))) < 0.00200000009Initial program 99.5%
Applied rewrites90.0%
Applied rewrites90.0%
if 0.00200000009 < (+.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 rewrites99.4%
Taylor expanded in r around 0
lower-+.f32N/A
lower-*.f3213.0%
Applied rewrites13.0%
(FPCore (s r)
:precision binary32
(let* ((t_0 (/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))))
(if (<=
(+
t_0
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r)))
0.0)
0.0
(+ t_0 (/ 0.75 (* (* 18.84955596923828 s) r))))))float code(float s, float r) {
float t_0 = (0.25f * expf((-r / s))) / (((2.0f * ((float) M_PI)) * s) * r);
float tmp;
if ((t_0 + ((0.75f * expf((-r / (3.0f * s)))) / (((6.0f * ((float) M_PI)) * s) * r))) <= 0.0f) {
tmp = 0.0f;
} else {
tmp = t_0 + (0.75f / ((18.84955596923828f * s) * r));
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(Float32(0.25) * exp(Float32(Float32(-r) / s))) / Float32(Float32(Float32(Float32(2.0) * Float32(pi)) * s) * r)) tmp = Float32(0.0) if (Float32(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(0.0)) tmp = Float32(0.0); else tmp = Float32(t_0 + Float32(Float32(0.75) / Float32(Float32(Float32(18.84955596923828) * s) * r))); end return tmp end
function tmp_2 = code(s, r) t_0 = (single(0.25) * exp((-r / s))) / (((single(2.0) * single(pi)) * s) * r); tmp = single(0.0); if ((t_0 + ((single(0.75) * exp((-r / (single(3.0) * s)))) / (((single(6.0) * single(pi)) * s) * r))) <= single(0.0)) tmp = single(0.0); else tmp = t_0 + (single(0.75) / ((single(18.84955596923828) * s) * r)); end tmp_2 = tmp; end
\begin{array}{l}
t_0 := \frac{0.25 \cdot e^{\frac{-r}{s}}}{\left(\left(2 \cdot \pi\right) \cdot s\right) \cdot r}\\
\mathbf{if}\;t\_0 + \frac{0.75 \cdot e^{\frac{-r}{3 \cdot s}}}{\left(\left(6 \cdot \pi\right) \cdot s\right) \cdot r} \leq 0:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;t\_0 + \frac{0.75}{\left(18.84955596923828 \cdot s\right) \cdot r}\\
\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))) < 0.0Initial program 99.5%
Applied rewrites99.4%
Applied rewrites87.4%
Applied rewrites88.2%
if 0.0 < (+.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.7%
Evaluated real constant9.7%
(FPCore (s r)
:precision binary32
(let* ((t_0 (* (* (* 6.0 PI) s) r)))
(if (<=
(+
(/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
(/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) t_0))
0.0)
0.0
(+ (/ 0.25 (* PI (* 2.0 (* s r)))) (/ 0.75 t_0)))))float code(float s, float r) {
float t_0 = ((6.0f * ((float) M_PI)) * s) * r;
float tmp;
if ((((0.25f * expf((-r / s))) / (((2.0f * ((float) M_PI)) * s) * r)) + ((0.75f * expf((-r / (3.0f * s)))) / t_0)) <= 0.0f) {
tmp = 0.0f;
} else {
tmp = (0.25f / (((float) M_PI) * (2.0f * (s * r)))) + (0.75f / t_0);
}
return tmp;
}
function code(s, r) t_0 = Float32(Float32(Float32(Float32(6.0) * Float32(pi)) * 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)))) / t_0)) <= Float32(0.0)) tmp = Float32(0.0); else tmp = Float32(Float32(Float32(0.25) / Float32(Float32(pi) * Float32(Float32(2.0) * Float32(s * r)))) + Float32(Float32(0.75) / t_0)); end return tmp end
function tmp_2 = code(s, r) t_0 = ((single(6.0) * single(pi)) * 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)))) / t_0)) <= single(0.0)) tmp = single(0.0); else tmp = (single(0.25) / (single(pi) * (single(2.0) * (s * r)))) + (single(0.75) / t_0); end tmp_2 = tmp; end
\begin{array}{l}
t_0 := \left(\left(6 \cdot \pi\right) \cdot s\right) \cdot r\\
\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}}}{t\_0} \leq 0:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;\frac{0.25}{\pi \cdot \left(2 \cdot \left(s \cdot r\right)\right)} + \frac{0.75}{t\_0}\\
\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))) < 0.0Initial program 99.5%
Applied rewrites99.4%
Applied rewrites87.4%
Applied rewrites88.2%
if 0.0 < (+.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.7%
Taylor expanded in s around inf
Applied rewrites9.2%
Applied rewrites9.2%
(FPCore (s r)
:precision binary32
(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)))
0.0)
0.0
(+ (/ 0.25 t_0) (/ 0.75 (* (* 18.84955596923828 s) r))))))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))) <= 0.0f) {
tmp = 0.0f;
} else {
tmp = (0.25f / t_0) + (0.75f / ((18.84955596923828f * s) * r));
}
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(0.0)) tmp = Float32(0.0); else tmp = Float32(Float32(Float32(0.25) / t_0) + Float32(Float32(0.75) / Float32(Float32(Float32(18.84955596923828) * s) * r))); end return tmp end
function tmp_2 = code(s, r) t_0 = ((single(2.0) * single(pi)) * s) * r; tmp = single(0.0); if ((((single(0.25) * exp((-r / s))) / t_0) + ((single(0.75) * exp((-r / (single(3.0) * s)))) / (((single(6.0) * single(pi)) * s) * r))) <= single(0.0)) tmp = single(0.0); else tmp = (single(0.25) / t_0) + (single(0.75) / ((single(18.84955596923828) * s) * r)); end tmp_2 = 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 0:\\
\;\;\;\;0\\
\mathbf{else}:\\
\;\;\;\;\frac{0.25}{t\_0} + \frac{0.75}{\left(18.84955596923828 \cdot s\right) \cdot r}\\
\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))) < 0.0Initial program 99.5%
Applied rewrites99.4%
Applied rewrites87.4%
Applied rewrites88.2%
if 0.0 < (+.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.7%
Taylor expanded in s around inf
Applied rewrites9.2%
Evaluated real constant9.2%
(FPCore (s r) :precision binary32 (let* ((t_0 (/ (- r) s))) (* (* (/ 1.0 (* PI r)) (+ (exp (* 0.3333333333333333 t_0)) (exp t_0))) 0.25)))
float code(float s, float r) {
float t_0 = -r / s;
return ((1.0f / (((float) M_PI) * r)) * (expf((0.3333333333333333f * t_0)) + expf(t_0))) * 0.25f;
}
function code(s, r) t_0 = Float32(Float32(-r) / s) return Float32(Float32(Float32(Float32(1.0) / Float32(Float32(pi) * r)) * Float32(exp(Float32(Float32(0.3333333333333333) * t_0)) + exp(t_0))) * Float32(0.25)) end
function tmp = code(s, r) t_0 = -r / s; tmp = ((single(1.0) / (single(pi) * r)) * (exp((single(0.3333333333333333) * t_0)) + exp(t_0))) * single(0.25); end
\begin{array}{l}
t_0 := \frac{-r}{s}\\
\left(\frac{1}{\pi \cdot r} \cdot \left(e^{0.3333333333333333 \cdot t\_0} + e^{t\_0}\right)\right) \cdot 0.25
\end{array}
Initial program 99.5%
Applied rewrites90.0%
Applied rewrites90.0%
(FPCore (s r) :precision binary32 (let* ((t_0 (/ (- r) s))) (* (/ 1.0 (* PI r)) (+ (exp (* 0.3333333333333333 t_0)) (exp t_0)))))
float code(float s, float r) {
float t_0 = -r / s;
return (1.0f / (((float) M_PI) * r)) * (expf((0.3333333333333333f * t_0)) + expf(t_0));
}
function code(s, r) t_0 = Float32(Float32(-r) / s) return Float32(Float32(Float32(1.0) / Float32(Float32(pi) * r)) * Float32(exp(Float32(Float32(0.3333333333333333) * t_0)) + exp(t_0))) end
function tmp = code(s, r) t_0 = -r / s; tmp = (single(1.0) / (single(pi) * r)) * (exp((single(0.3333333333333333) * t_0)) + exp(t_0)); end
\begin{array}{l}
t_0 := \frac{-r}{s}\\
\frac{1}{\pi \cdot r} \cdot \left(e^{0.3333333333333333 \cdot t\_0} + e^{t\_0}\right)
\end{array}
Initial program 99.5%
Applied rewrites90.0%
Applied rewrites90.0%
(FPCore (s r)
:precision binary32
(let* ((t_0 (/ (- r) s)))
(*
(/ 1.0 r)
(*
(- (exp t_0) (exp (* 0.3333333333333333 t_0)))
-0.039788734167814255))))float code(float s, float r) {
float t_0 = -r / s;
return (1.0f / r) * ((expf(t_0) - expf((0.3333333333333333f * t_0))) * -0.039788734167814255f);
}
real(4) function code(s, r)
use fmin_fmax_functions
real(4), intent (in) :: s
real(4), intent (in) :: r
real(4) :: t_0
t_0 = -r / s
code = (1.0e0 / r) * ((exp(t_0) - exp((0.3333333333333333e0 * t_0))) * (-0.039788734167814255e0))
end function
function code(s, r) t_0 = Float32(Float32(-r) / s) return Float32(Float32(Float32(1.0) / r) * Float32(Float32(exp(t_0) - exp(Float32(Float32(0.3333333333333333) * t_0))) * Float32(-0.039788734167814255))) end
function tmp = code(s, r) t_0 = -r / s; tmp = (single(1.0) / r) * ((exp(t_0) - exp((single(0.3333333333333333) * t_0))) * single(-0.039788734167814255)); end
\begin{array}{l}
t_0 := \frac{-r}{s}\\
\frac{1}{r} \cdot \left(\left(e^{t\_0} - e^{0.3333333333333333 \cdot t\_0}\right) \cdot -0.039788734167814255\right)
\end{array}
Initial program 99.5%
Applied rewrites89.7%
Evaluated real constant89.7%
lift-*.f32N/A
*-commutativeN/A
lift-*.f32N/A
associate-*l*N/A
lower-*.f32N/A
lift-/.f32N/A
/-rgt-identityN/A
lower-*.f3289.7%
lift-*.f32N/A
*-commutativeN/A
lower-*.f3289.7%
Applied rewrites89.7%
(FPCore (s r) :precision binary32 0.0)
float code(float s, float r) {
return 0.0f;
}
real(4) function code(s, r)
use fmin_fmax_functions
real(4), intent (in) :: s
real(4), intent (in) :: r
code = 0.0e0
end function
function code(s, r) return Float32(0.0) end
function tmp = code(s, r) tmp = single(0.0); end
0
Initial program 99.5%
Applied rewrites99.4%
Applied rewrites87.4%
Applied rewrites88.2%
herbie shell --seed 2025322
(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))))