(FPCore (dist radius sigma) :precision binary64 (/ (- dist radius) sigma))
double code(double dist, double radius, double sigma) { return (dist - radius) / sigma; }
real(8) function code(dist, radius, sigma) real(8), intent (in) :: dist real(8), intent (in) :: radius real(8), intent (in) :: sigma code = (dist - radius) / sigma end function
public static double code(double dist, double radius, double sigma) { return (dist - radius) / sigma; }
def code(dist, radius, sigma): return (dist - radius) / sigma
function code(dist, radius, sigma) return Float64(Float64(dist - radius) / sigma) end
function tmp = code(dist, radius, sigma) tmp = (dist - radius) / sigma; end
code[dist_, radius_, sigma_] := N[(N[(dist - radius), $MachinePrecision] / sigma), $MachinePrecision]
\begin{array}{l} \\ \frac{dist - radius}{sigma} \end{array}
Sampling outcomes in binary64 precision:
Herbie found 2 alternatives:
Alternative | Accuracy | Speedup |
---|
(FPCore (dist radius sigma) :precision binary64 (/ (- dist radius) sigma))
double code(double dist, double radius, double sigma) { return (dist - radius) / sigma; }
real(8) function code(dist, radius, sigma) real(8), intent (in) :: dist real(8), intent (in) :: radius real(8), intent (in) :: sigma code = (dist - radius) / sigma end function
public static double code(double dist, double radius, double sigma) { return (dist - radius) / sigma; }
def code(dist, radius, sigma): return (dist - radius) / sigma
function code(dist, radius, sigma) return Float64(Float64(dist - radius) / sigma) end
function tmp = code(dist, radius, sigma) tmp = (dist - radius) / sigma; end
code[dist_, radius_, sigma_] := N[(N[(dist - radius), $MachinePrecision] / sigma), $MachinePrecision]
\begin{array}{l} \\ \frac{dist - radius}{sigma} \end{array}
(FPCore (dist radius sigma) :precision binary64 (/ (- dist radius) sigma))
double code(double dist, double radius, double sigma) { return (dist - radius) / sigma; }
real(8) function code(dist, radius, sigma) real(8), intent (in) :: dist real(8), intent (in) :: radius real(8), intent (in) :: sigma code = (dist - radius) / sigma end function
public static double code(double dist, double radius, double sigma) { return (dist - radius) / sigma; }
def code(dist, radius, sigma): return (dist - radius) / sigma
function code(dist, radius, sigma) return Float64(Float64(dist - radius) / sigma) end
function tmp = code(dist, radius, sigma) tmp = (dist - radius) / sigma; end
code[dist_, radius_, sigma_] := N[(N[(dist - radius), $MachinePrecision] / sigma), $MachinePrecision]
\begin{array}{l} \\ \frac{dist - radius}{sigma} \end{array}
Initial program 100.0%
(FPCore (dist radius sigma) :precision binary64 (/ dist sigma))
double code(double dist, double radius, double sigma) { return dist / sigma; }
real(8) function code(dist, radius, sigma) real(8), intent (in) :: dist real(8), intent (in) :: radius real(8), intent (in) :: sigma code = dist / sigma end function
public static double code(double dist, double radius, double sigma) { return dist / sigma; }
def code(dist, radius, sigma): return dist / sigma
function code(dist, radius, sigma) return Float64(dist / sigma) end
function tmp = code(dist, radius, sigma) tmp = dist / sigma; end
code[dist_, radius_, sigma_] := N[(dist / sigma), $MachinePrecision]
\begin{array}{l} \\ \frac{dist}{sigma} \end{array}
Initial program 100.0%
Taylor expanded in dist around inf
lower-/.f64
18.6
Applied rewrites18.6%
herbie shell --seed 1
(FPCore (dist radius sigma)
:name "(dist - radius) / sigma"
:precision binary64
:pre (and (and (and (<= 1.0 dist) (<= dist 4.0)) (and (<= 1.0 radius) (<= radius 1.0))) (and (<= 0.001 sigma) (<= sigma 0.1)))
(/ (- dist radius) sigma))