Average Error: 0.0 → 0.1
Time: 33.9s
Precision: binary64
Cost: 26624
\[\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} \]
\[\begin{array}{l} t_0 := e^{-\frac{r}{s}}\\ \frac{\frac{0.125}{\pi \cdot s} \cdot \left(t_0 + \sqrt[3]{t_0}\right)}{r} \end{array} \]
(FPCore (s r)
 :precision binary64
 (+
  (/ (* 0.25 (exp (/ (- r) s))) (* (* (* 2.0 PI) s) r))
  (/ (* 0.75 (exp (/ (- r) (* 3.0 s)))) (* (* (* 6.0 PI) s) r))))
(FPCore (s r)
 :precision binary64
 (let* ((t_0 (exp (- (/ r s)))))
   (/ (* (/ 0.125 (* PI s)) (+ t_0 (cbrt t_0))) r)))
double code(double s, double r) {
	return ((0.25 * exp((-r / s))) / (((2.0 * ((double) M_PI)) * s) * r)) + ((0.75 * exp((-r / (3.0 * s)))) / (((6.0 * ((double) M_PI)) * s) * r));
}
double code(double s, double r) {
	double t_0 = exp(-(r / s));
	return ((0.125 / (((double) M_PI) * s)) * (t_0 + cbrt(t_0))) / r;
}
public static double code(double s, double r) {
	return ((0.25 * Math.exp((-r / s))) / (((2.0 * Math.PI) * s) * r)) + ((0.75 * Math.exp((-r / (3.0 * s)))) / (((6.0 * Math.PI) * s) * r));
}
public static double code(double s, double r) {
	double t_0 = Math.exp(-(r / s));
	return ((0.125 / (Math.PI * s)) * (t_0 + Math.cbrt(t_0))) / r;
}
function code(s, r)
	return Float64(Float64(Float64(0.25 * exp(Float64(Float64(-r) / s))) / Float64(Float64(Float64(2.0 * pi) * s) * r)) + Float64(Float64(0.75 * exp(Float64(Float64(-r) / Float64(3.0 * s)))) / Float64(Float64(Float64(6.0 * pi) * s) * r)))
end
function code(s, r)
	t_0 = exp(Float64(-Float64(r / s)))
	return Float64(Float64(Float64(0.125 / Float64(pi * s)) * Float64(t_0 + cbrt(t_0))) / r)
end
code[s_, r_] := N[(N[(N[(0.25 * N[Exp[N[((-r) / s), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[(N[(2.0 * Pi), $MachinePrecision] * s), $MachinePrecision] * r), $MachinePrecision]), $MachinePrecision] + N[(N[(0.75 * N[Exp[N[((-r) / N[(3.0 * s), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision] / N[(N[(N[(6.0 * Pi), $MachinePrecision] * s), $MachinePrecision] * r), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
code[s_, r_] := Block[{t$95$0 = N[Exp[(-N[(r / s), $MachinePrecision])], $MachinePrecision]}, N[(N[(N[(0.125 / N[(Pi * s), $MachinePrecision]), $MachinePrecision] * N[(t$95$0 + N[Power[t$95$0, 1/3], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / r), $MachinePrecision]]
\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}
\begin{array}{l}
t_0 := e^{-\frac{r}{s}}\\
\frac{\frac{0.125}{\pi \cdot s} \cdot \left(t_0 + \sqrt[3]{t_0}\right)}{r}
\end{array}

Error

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Initial program 0.0

    \[\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. Simplified0.1

    \[\leadsto \color{blue}{\frac{\frac{0.125}{\pi \cdot s} \cdot \left(e^{-\frac{r}{s}} + \sqrt[3]{e^{-\frac{r}{s}}}\right)}{r}} \]
    Proof

Alternatives

Alternative 1
Error62.3
Cost26432
\[{\left(\sqrt[3]{\frac{\frac{0.125}{e^{\frac{r}{s}}} + 0.125}{\pi \cdot \left(s \cdot r\right)}}\right)}^{3} \]
Alternative 2
Error62.3
Cost13696
\[\frac{\frac{0.125}{e^{\frac{r}{s}}} + 0.125}{\pi \cdot r} \cdot \frac{1}{s} \]
Alternative 3
Error62.3
Cost13568
\[\frac{0.125 + \frac{0.125}{e^{\frac{r}{s}}}}{\left(r \cdot \pi\right) \cdot s} \]
Alternative 4
Error62.3
Cost6784
\[\frac{0.25}{s \cdot \left(r \cdot \pi\right)} \]
Alternative 5
Error62.6
Cost6656
\[\frac{-0.125}{s \cdot \pi} \]

Error

Reproduce

herbie shell --seed 2023010 
(FPCore (s r)
  :name "Disney BSSRDF, PDF of scattering profile"
  :precision binary64
  :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))))