Disney BSSRDF, PDF of scattering profile

Percentage Accurate: 99.5% → 99.6%
Time: 32.7s
Alternatives: 18
Speedup: 1.0×

Specification

?
\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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) (* 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}

Local Percentage Accuracy vs ?

The average percentage accuracy by input value. Horizontal axis shows value of an input variable; the variable is choosen in the title. Vertical axis is accuracy; higher is better. Red represent the original program, while blue represents Herbie's suggestion. These can be toggled with buttons below the plot. The line is an average while dots represent individual samples.

Accuracy vs Speed?

Herbie found 18 alternatives:

AlternativeAccuracySpeedup
The accuracy (vertical axis) and speed (horizontal axis) of each alternatives. Up and to the right is better. The red square shows the initial program, and each blue circle shows an alternative.The line shows the best available speed-accuracy tradeoffs.

Initial Program: 99.5% accurate, 1.0× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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) (* 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}

Alternative 1: 99.6% accurate, 1.0× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Initial program 99.5%

    \[\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} \]
  2. Applied rewrites99.5%

    \[\leadsto \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} \]
  3. Add Preprocessing

Alternative 2: 99.5% accurate, 1.0× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Initial program 99.5%

    \[\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} \]
  2. Applied rewrites99.6%

    \[\leadsto \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} \]
  3. Add Preprocessing

Alternative 3: 99.5% accurate, 1.1× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Initial program 99.5%

    \[\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} \]
  2. Taylor expanded in s around 0

    \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
  3. Applied rewrites99.5%

    \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
  4. Applied rewrites99.5%

    \[\leadsto \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} \]
  5. Add Preprocessing

Alternative 4: 99.5% accurate, 1.4× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\frac{0.125 \cdot \frac{e^{\frac{-r}{s}} + e^{r \cdot \frac{-0.3333333333333333}{s}}}{r \cdot \pi}}{s} \]
(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}
Derivation
  1. Initial program 99.5%

    \[\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} \]
  2. Taylor expanded in s around 0

    \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
  3. Applied rewrites99.5%

    \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
  4. Applied rewrites99.5%

    \[\leadsto \frac{0.125 \cdot \left(\frac{e^{\frac{-r}{s}}}{r \cdot \pi} + \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
  5. Applied rewrites99.5%

    \[\leadsto \frac{0.125 \cdot \frac{e^{\frac{-r}{s}} + e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
  6. Applied rewrites99.5%

    \[\leadsto \frac{0.125 \cdot \frac{e^{\frac{-r}{s}} + e^{r \cdot \frac{-0.3333333333333333}{s}}}{r \cdot \pi}}{s} \]
  7. Add Preprocessing

Alternative 5: 99.5% accurate, 1.4× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\frac{0.125 \cdot \frac{e^{\frac{-r}{s}} + e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
(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}
Derivation
  1. Initial program 99.5%

    \[\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} \]
  2. Taylor expanded in s around 0

    \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
  3. Applied rewrites99.5%

    \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
  4. Applied rewrites99.5%

    \[\leadsto \frac{0.125 \cdot \left(\frac{e^{\frac{-r}{s}}}{r \cdot \pi} + \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
  5. Applied rewrites99.5%

    \[\leadsto \frac{0.125 \cdot \frac{e^{\frac{-r}{s}} + e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
  6. Add Preprocessing

Alternative 6: 96.8% accurate, 0.6× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-5

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{\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} \]
    3. Applied rewrites9.0%

      \[\leadsto \frac{0.25}{\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} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{\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} \]
    5. Applied rewrites93.4%

      \[\leadsto \frac{0}{\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} \]
    6. Taylor expanded in s around 0

      \[\leadsto \frac{0}{\left(\left(2 \cdot \pi\right) \cdot s\right) \cdot r} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \left(s \cdot \pi\right)} \]
    7. Applied rewrites93.4%

      \[\leadsto \frac{0}{\left(\left(2 \cdot \pi\right) \cdot s\right) \cdot r} + 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \left(s \cdot \pi\right)} \]
    8. Applied rewrites93.4%

      \[\leadsto \frac{0}{\left(\left(2 \cdot \pi\right) \cdot s\right) \cdot r} + 0.125 \cdot \frac{e^{r \cdot \frac{-0.3333333333333333}{s}}}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around 0

      \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
    3. Applied rewrites99.5%

      \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
    4. Applied rewrites99.5%

      \[\leadsto \frac{1}{\frac{s}{0.125 \cdot \left(\frac{e^{\frac{-r}{s}}}{r \cdot \pi} + \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}} \]
    5. Taylor expanded in r around 0

      \[\leadsto \frac{1}{r \cdot \left(4 \cdot \left(s \cdot \pi\right) + r \cdot \left(-8 \cdot \left(r \cdot \left(\frac{-2}{9} \cdot \frac{\pi}{s} + \frac{5}{36} \cdot \frac{\pi}{s}\right)\right) + \frac{8}{3} \cdot \pi\right)\right)} \]
    6. Applied rewrites25.7%

      \[\leadsto \frac{1}{r \cdot \mathsf{fma}\left(4, s \cdot \pi, r \cdot \mathsf{fma}\left(-8, r \cdot \mathsf{fma}\left(-0.2222222222222222, \frac{\pi}{s}, 0.1388888888888889 \cdot \frac{\pi}{s}\right), 2.6666666666666665 \cdot \pi\right)\right)} \]
    7. Applied rewrites26.3%

      \[\leadsto \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)} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 7: 96.8% accurate, 0.6× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-5

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{\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} \]
    3. Applied rewrites9.0%

      \[\leadsto \frac{0.25}{\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} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{\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} \]
    5. Applied rewrites93.4%

      \[\leadsto \frac{0}{\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} \]
    6. Evaluated real constant93.4%

      \[\leadsto \frac{0}{\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} \]
    7. Taylor expanded in s around 0

      \[\leadsto \frac{0}{\left(6.2831854820251465 \cdot s\right) \cdot r} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \left(s \cdot \pi\right)} \]
    8. Applied rewrites93.4%

      \[\leadsto \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)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around 0

      \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
    3. Applied rewrites99.5%

      \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
    4. Applied rewrites99.5%

      \[\leadsto \frac{1}{\frac{s}{0.125 \cdot \left(\frac{e^{\frac{-r}{s}}}{r \cdot \pi} + \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}} \]
    5. Taylor expanded in r around 0

      \[\leadsto \frac{1}{r \cdot \left(4 \cdot \left(s \cdot \pi\right) + r \cdot \left(-8 \cdot \left(r \cdot \left(\frac{-2}{9} \cdot \frac{\pi}{s} + \frac{5}{36} \cdot \frac{\pi}{s}\right)\right) + \frac{8}{3} \cdot \pi\right)\right)} \]
    6. Applied rewrites25.7%

      \[\leadsto \frac{1}{r \cdot \mathsf{fma}\left(4, s \cdot \pi, r \cdot \mathsf{fma}\left(-8, r \cdot \mathsf{fma}\left(-0.2222222222222222, \frac{\pi}{s}, 0.1388888888888889 \cdot \frac{\pi}{s}\right), 2.6666666666666665 \cdot \pi\right)\right)} \]
    7. Applied rewrites26.3%

      \[\leadsto \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)} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 8: 95.3% accurate, 0.6× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-25

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{r \cdot \left(s \cdot \pi\right)} \]
    3. Applied rewrites8.9%

      \[\leadsto \frac{0.25}{r \cdot \left(s \cdot \pi\right)} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]
    5. Applied rewrites88.8%

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around 0

      \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
    3. Applied rewrites99.5%

      \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
    4. Applied rewrites99.5%

      \[\leadsto \frac{1}{\frac{s}{0.125 \cdot \left(\frac{e^{\frac{-r}{s}}}{r \cdot \pi} + \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}} \]
    5. Taylor expanded in r around 0

      \[\leadsto \frac{1}{r \cdot \left(4 \cdot \left(s \cdot \pi\right) + r \cdot \left(-8 \cdot \left(r \cdot \left(\frac{-2}{9} \cdot \frac{\pi}{s} + \frac{5}{36} \cdot \frac{\pi}{s}\right)\right) + \frac{8}{3} \cdot \pi\right)\right)} \]
    6. Applied rewrites25.7%

      \[\leadsto \frac{1}{r \cdot \mathsf{fma}\left(4, s \cdot \pi, r \cdot \mathsf{fma}\left(-8, r \cdot \mathsf{fma}\left(-0.2222222222222222, \frac{\pi}{s}, 0.1388888888888889 \cdot \frac{\pi}{s}\right), 2.6666666666666665 \cdot \pi\right)\right)} \]
    7. Applied rewrites26.3%

      \[\leadsto \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)} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 9: 94.7% accurate, 0.7× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-25

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{r \cdot \left(s \cdot \pi\right)} \]
    3. Applied rewrites8.9%

      \[\leadsto \frac{0.25}{r \cdot \left(s \cdot \pi\right)} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]
    5. Applied rewrites88.8%

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around -inf

      \[\leadsto -1 \cdot \frac{-1 \cdot \frac{-1 \cdot \frac{\frac{-1}{16} \cdot \frac{r}{\pi} + \frac{-1}{144} \cdot \frac{r}{\pi}}{s} - \frac{1}{6} \cdot \frac{1}{\pi}}{s} - \frac{1}{4} \cdot \frac{1}{r \cdot \pi}}{s} \]
    3. Applied rewrites9.8%

      \[\leadsto -1 \cdot \frac{-1 \cdot \frac{-1 \cdot \frac{\mathsf{fma}\left(-0.0625, \frac{r}{\pi}, -0.006944444444444444 \cdot \frac{r}{\pi}\right)}{s} - 0.16666666666666666 \cdot \frac{1}{\pi}}{s} - 0.25 \cdot \frac{1}{r \cdot \pi}}{s} \]
    4. Applied rewrites9.8%

      \[\leadsto -\frac{\left(-\frac{\left(-\frac{\frac{r}{\pi} \cdot -0.06944444444444445}{s}\right) - \frac{0.16666666666666666}{\pi}}{s}\right) - \frac{0.25}{r \cdot \pi}}{s} \]
    5. Evaluated real constant9.8%

      \[\leadsto -\frac{\left(-\frac{\left(-\frac{\frac{r}{\pi} \cdot -0.06944444444444445}{s}\right) - 0.053051646798849106}{s}\right) - \frac{0.25}{r \cdot \pi}}{s} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 10: 94.7% accurate, 0.7× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-25

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{r \cdot \left(s \cdot \pi\right)} \]
    3. Applied rewrites8.9%

      \[\leadsto \frac{0.25}{r \cdot \left(s \cdot \pi\right)} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]
    5. Applied rewrites88.8%

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around -inf

      \[\leadsto -1 \cdot \frac{-1 \cdot \frac{-1 \cdot \frac{\frac{-1}{16} \cdot \frac{r}{\pi} + \frac{-1}{144} \cdot \frac{r}{\pi}}{s} - \frac{1}{6} \cdot \frac{1}{\pi}}{s} - \frac{1}{4} \cdot \frac{1}{r \cdot \pi}}{s} \]
    3. Applied rewrites9.8%

      \[\leadsto -1 \cdot \frac{-1 \cdot \frac{-1 \cdot \frac{\mathsf{fma}\left(-0.0625, \frac{r}{\pi}, -0.006944444444444444 \cdot \frac{r}{\pi}\right)}{s} - 0.16666666666666666 \cdot \frac{1}{\pi}}{s} - 0.25 \cdot \frac{1}{r \cdot \pi}}{s} \]
    4. Applied rewrites9.8%

      \[\leadsto -\frac{\left(-\frac{\left(-\frac{\frac{r}{\pi} \cdot -0.06944444444444445}{s}\right) - \frac{0.16666666666666666}{\pi}}{s}\right) - \frac{0.25}{r \cdot \pi}}{s} \]
    5. Evaluated real constant9.8%

      \[\leadsto -\frac{\left(-\frac{\left(-\frac{\frac{r}{\pi} \cdot -0.06944444444444445}{s}\right) - 0.053051646798849106}{s}\right) - \frac{0.25}{r \cdot \pi}}{s} \]
    6. Taylor expanded in s around inf

      \[\leadsto -\frac{\frac{\frac{14240943}{268435456} + \frac{-5}{72} \cdot \frac{r}{s \cdot \pi}}{s} - \frac{0.25}{r \cdot \pi}}{s} \]
    7. Applied rewrites9.8%

      \[\leadsto -\frac{\frac{0.053051646798849106 + -0.06944444444444445 \cdot \frac{r}{s \cdot \pi}}{s} - \frac{0.25}{r \cdot \pi}}{s} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 11: 94.4% accurate, 0.7× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-25

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{r \cdot \left(s \cdot \pi\right)} \]
    3. Applied rewrites8.9%

      \[\leadsto \frac{0.25}{r \cdot \left(s \cdot \pi\right)} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]
    5. Applied rewrites88.8%

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4} \cdot \frac{1}{r \cdot \pi} - \frac{1}{6} \cdot \frac{1}{s \cdot \pi}}{s} \]
    3. Applied rewrites8.8%

      \[\leadsto \frac{0.25 \cdot \frac{1}{r \cdot \pi} - 0.16666666666666666 \cdot \frac{1}{s \cdot \pi}}{s} \]
    4. Applied rewrites8.8%

      \[\leadsto \frac{1}{\frac{s}{\frac{0.25}{r \cdot \pi} - \frac{0.16666666666666666}{s \cdot \pi}}} \]
    5. Taylor expanded in r around 0

      \[\leadsto \frac{1}{r \cdot \left(4 \cdot \left(s \cdot \pi\right) + r \cdot \left(\frac{16}{9} \cdot \frac{r \cdot \pi}{s} - \frac{-8}{3} \cdot \pi\right)\right)} \]
    6. Applied rewrites25.6%

      \[\leadsto \frac{1}{r \cdot \mathsf{fma}\left(4, s \cdot \pi, r \cdot \left(1.7777777777777777 \cdot \frac{r \cdot \pi}{s} - -2.6666666666666665 \cdot \pi\right)\right)} \]
    7. Evaluated real constant25.6%

      \[\leadsto \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)} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 12: 94.3% accurate, 0.7× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-25

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{r \cdot \left(s \cdot \pi\right)} \]
    3. Applied rewrites8.9%

      \[\leadsto \frac{0.25}{r \cdot \left(s \cdot \pi\right)} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]
    5. Applied rewrites88.8%

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around 0

      \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
    3. Applied rewrites99.5%

      \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
    4. Applied rewrites99.5%

      \[\leadsto \frac{1}{\frac{s}{0.125 \cdot \left(\frac{e^{\frac{-r}{s}}}{r \cdot \pi} + \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}} \]
    5. Taylor expanded in r around 0

      \[\leadsto \frac{1}{r \cdot \left(\frac{8}{3} \cdot \left(r \cdot \pi\right) + 4 \cdot \left(s \cdot \pi\right)\right)} \]
    6. Applied rewrites12.1%

      \[\leadsto \frac{1}{r \cdot \mathsf{fma}\left(2.6666666666666665, r \cdot \pi, 4 \cdot \left(s \cdot \pi\right)\right)} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 13: 93.5% accurate, 0.7× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-5

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{r \cdot \left(s \cdot \pi\right)} \]
    3. Applied rewrites8.9%

      \[\leadsto \frac{0.25}{r \cdot \left(s \cdot \pi\right)} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]
    5. Applied rewrites88.8%

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Applied rewrites98.7%

      \[\leadsto \frac{\mathsf{fma}\left(e^{\frac{r}{-3 \cdot s}} \cdot \frac{0.125}{s \cdot \pi}, \left(\left(\pi + \pi\right) \cdot s\right) \cdot r, r \cdot \left(0.25 \cdot e^{\frac{-r}{s}}\right)\right)}{r \cdot \left(\left(\left(\pi + \pi\right) \cdot s\right) \cdot r\right)} \]
    3. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{2} \cdot r}{r \cdot \left(\left(\left(\pi + \pi\right) \cdot s\right) \cdot r\right)} \]
    4. Applied rewrites8.9%

      \[\leadsto \frac{0.5 \cdot r}{r \cdot \left(\left(\left(\pi + \pi\right) \cdot s\right) \cdot r\right)} \]
    5. Evaluated real constant8.9%

      \[\leadsto \frac{0.5 \cdot r}{r \cdot \left(\left(6.2831854820251465 \cdot s\right) \cdot r\right)} \]
    6. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1048576}{13176795} \cdot \frac{1}{r} - \frac{2097152}{39530385} \cdot \frac{1}{s}}{s} \]
    7. Applied rewrites8.8%

      \[\leadsto \frac{0.07957746933150284 \cdot \frac{1}{r} - 0.0530516462210019 \cdot \frac{1}{s}}{s} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 14: 93.5% accurate, 0.8× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-5

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{r \cdot \left(s \cdot \pi\right)} \]
    3. Applied rewrites8.9%

      \[\leadsto \frac{0.25}{r \cdot \left(s \cdot \pi\right)} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]
    5. Applied rewrites88.8%

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around 0

      \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
    3. Applied rewrites99.5%

      \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
    4. Taylor expanded in r around 0

      \[\leadsto \frac{\frac{\frac{-1}{6} \cdot \frac{r}{s \cdot \pi} + \frac{1}{4} \cdot \frac{1}{\pi}}{r}}{s} \]
    5. Applied rewrites8.8%

      \[\leadsto \frac{\frac{\mathsf{fma}\left(-0.16666666666666666, \frac{r}{s \cdot \pi}, 0.25 \cdot \frac{1}{\pi}\right)}{r}}{s} \]
    6. Evaluated real constant8.8%

      \[\leadsto \frac{\frac{\mathsf{fma}\left(-0.16666666666666666, \frac{r}{s \cdot \pi}, 0.07957746833562851\right)}{r}}{s} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 15: 93.5% accurate, 0.8× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-5

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{r \cdot \left(s \cdot \pi\right)} \]
    3. Applied rewrites8.9%

      \[\leadsto \frac{0.25}{r \cdot \left(s \cdot \pi\right)} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]
    5. Applied rewrites88.8%

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around -inf

      \[\leadsto -1 \cdot \frac{-1 \cdot \frac{-1 \cdot \frac{\frac{-1}{16} \cdot \frac{r}{\pi} + \frac{-1}{144} \cdot \frac{r}{\pi}}{s} - \frac{1}{6} \cdot \frac{1}{\pi}}{s} - \frac{1}{4} \cdot \frac{1}{r \cdot \pi}}{s} \]
    3. Applied rewrites9.8%

      \[\leadsto -1 \cdot \frac{-1 \cdot \frac{-1 \cdot \frac{\mathsf{fma}\left(-0.0625, \frac{r}{\pi}, -0.006944444444444444 \cdot \frac{r}{\pi}\right)}{s} - 0.16666666666666666 \cdot \frac{1}{\pi}}{s} - 0.25 \cdot \frac{1}{r \cdot \pi}}{s} \]
    4. Applied rewrites9.8%

      \[\leadsto -\frac{\left(-\frac{\left(-\frac{\frac{r}{\pi} \cdot -0.06944444444444445}{s}\right) - \frac{0.16666666666666666}{\pi}}{s}\right) - \frac{0.25}{r \cdot \pi}}{s} \]
    5. Evaluated real constant9.8%

      \[\leadsto -\frac{\left(-\frac{\left(-\frac{\frac{r}{\pi} \cdot -0.06944444444444445}{s}\right) - 0.053051646798849106}{s}\right) - \frac{0.25}{r \cdot \pi}}{s} \]
    6. Taylor expanded in s around inf

      \[\leadsto -\frac{\frac{\frac{14240943}{268435456}}{s} - \frac{0.25}{r \cdot \pi}}{s} \]
    7. Applied rewrites8.8%

      \[\leadsto -\frac{\frac{0.053051646798849106}{s} - \frac{0.25}{r \cdot \pi}}{s} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 16: 92.8% accurate, 0.8× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\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} \]
(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}
Derivation
  1. Split input into 2 regimes
  2. 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-25

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{1}{4}}{r \cdot \left(s \cdot \pi\right)} \]
    3. Applied rewrites8.9%

      \[\leadsto \frac{0.25}{r \cdot \left(s \cdot \pi\right)} \]
    4. Taylor expanded in undef-var around zero

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]
    5. Applied rewrites88.8%

      \[\leadsto \frac{0}{r \cdot \left(s \cdot \pi\right)} \]

    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)))

    1. Initial program 99.5%

      \[\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} \]
    2. Taylor expanded in s around 0

      \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
    3. Applied rewrites99.5%

      \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
    4. Taylor expanded in r around 0

      \[\leadsto \frac{\frac{\frac{-1}{6} \cdot \frac{r}{s \cdot \pi} + \frac{1}{4} \cdot \frac{1}{\pi}}{r}}{s} \]
    5. Applied rewrites8.8%

      \[\leadsto \frac{\frac{\mathsf{fma}\left(-0.16666666666666666, \frac{r}{s \cdot \pi}, 0.25 \cdot \frac{1}{\pi}\right)}{r}}{s} \]
    6. Evaluated real constant8.8%

      \[\leadsto \frac{\frac{\mathsf{fma}\left(-0.16666666666666666, \frac{r}{s \cdot \pi}, 0.07957746833562851\right)}{r}}{s} \]
    7. Taylor expanded in s around inf

      \[\leadsto \frac{\frac{\frac{10680707}{134217728}}{r}}{s} \]
    8. Applied rewrites8.9%

      \[\leadsto \frac{\frac{0.07957746833562851}{r}}{s} \]
  3. Recombined 2 regimes into one program.
  4. Add Preprocessing

Alternative 17: 8.9% accurate, 8.1× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\frac{\frac{0.07957746833562851}{r}}{s} \]
(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}
Derivation
  1. Initial program 99.5%

    \[\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} \]
  2. Taylor expanded in s around 0

    \[\leadsto \frac{\frac{1}{8} \cdot \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi} + \frac{1}{8} \cdot \frac{e^{\frac{-1}{3} \cdot \frac{r}{s}}}{r \cdot \pi}}{s} \]
  3. Applied rewrites99.5%

    \[\leadsto \frac{\mathsf{fma}\left(0.125, \frac{e^{-1 \cdot \frac{r}{s}}}{r \cdot \pi}, 0.125 \cdot \frac{e^{-0.3333333333333333 \cdot \frac{r}{s}}}{r \cdot \pi}\right)}{s} \]
  4. Taylor expanded in r around 0

    \[\leadsto \frac{\frac{\frac{-1}{6} \cdot \frac{r}{s \cdot \pi} + \frac{1}{4} \cdot \frac{1}{\pi}}{r}}{s} \]
  5. Applied rewrites8.8%

    \[\leadsto \frac{\frac{\mathsf{fma}\left(-0.16666666666666666, \frac{r}{s \cdot \pi}, 0.25 \cdot \frac{1}{\pi}\right)}{r}}{s} \]
  6. Evaluated real constant8.8%

    \[\leadsto \frac{\frac{\mathsf{fma}\left(-0.16666666666666666, \frac{r}{s \cdot \pi}, 0.07957746833562851\right)}{r}}{s} \]
  7. Taylor expanded in s around inf

    \[\leadsto \frac{\frac{\frac{10680707}{134217728}}{r}}{s} \]
  8. Applied rewrites8.9%

    \[\leadsto \frac{\frac{0.07957746833562851}{r}}{s} \]
  9. Add Preprocessing

Alternative 18: 8.9% accurate, 8.9× speedup?

\[\left(0 \leq s \land s \leq 256\right) \land \left(10^{-6} < r \land r < 1000000\right)\]
\[\frac{0.07957746933150284}{r \cdot s} \]
(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}
Derivation
  1. Initial program 99.5%

    \[\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} \]
  2. Applied rewrites98.7%

    \[\leadsto \frac{\mathsf{fma}\left(e^{\frac{r}{-3 \cdot s}} \cdot \frac{0.125}{s \cdot \pi}, \left(\left(\pi + \pi\right) \cdot s\right) \cdot r, r \cdot \left(0.25 \cdot e^{\frac{-r}{s}}\right)\right)}{r \cdot \left(\left(\left(\pi + \pi\right) \cdot s\right) \cdot r\right)} \]
  3. Taylor expanded in s around inf

    \[\leadsto \frac{\frac{1}{2} \cdot r}{r \cdot \left(\left(\left(\pi + \pi\right) \cdot s\right) \cdot r\right)} \]
  4. Applied rewrites8.9%

    \[\leadsto \frac{0.5 \cdot r}{r \cdot \left(\left(\left(\pi + \pi\right) \cdot s\right) \cdot r\right)} \]
  5. Evaluated real constant8.9%

    \[\leadsto \frac{0.5 \cdot r}{r \cdot \left(\left(6.2831854820251465 \cdot s\right) \cdot r\right)} \]
  6. Taylor expanded in s around inf

    \[\leadsto \frac{\frac{1048576}{13176795}}{r \cdot s} \]
  7. Applied rewrites8.9%

    \[\leadsto \frac{0.07957746933150284}{r \cdot s} \]
  8. Add Preprocessing

Reproduce

?
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))))