
(FPCore (x y) :precision binary64 (exp (* (* x y) y)))
double code(double x, double y) {
return exp(((x * y) * y));
}
real(8) function code(x, y)
real(8), intent (in) :: x
real(8), intent (in) :: y
code = exp(((x * y) * y))
end function
public static double code(double x, double y) {
return Math.exp(((x * y) * y));
}
def code(x, y): return math.exp(((x * y) * y))
function code(x, y) return exp(Float64(Float64(x * y) * y)) end
function tmp = code(x, y) tmp = exp(((x * y) * y)); end
code[x_, y_] := N[Exp[N[(N[(x * y), $MachinePrecision] * y), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
e^{\left(x \cdot y\right) \cdot y}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 9 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y) :precision binary64 (exp (* (* x y) y)))
double code(double x, double y) {
return exp(((x * y) * y));
}
real(8) function code(x, y)
real(8), intent (in) :: x
real(8), intent (in) :: y
code = exp(((x * y) * y))
end function
public static double code(double x, double y) {
return Math.exp(((x * y) * y));
}
def code(x, y): return math.exp(((x * y) * y))
function code(x, y) return exp(Float64(Float64(x * y) * y)) end
function tmp = code(x, y) tmp = exp(((x * y) * y)); end
code[x_, y_] := N[Exp[N[(N[(x * y), $MachinePrecision] * y), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
e^{\left(x \cdot y\right) \cdot y}
\end{array}
(FPCore (x y) :precision binary64 (let* ((t_0 (* x (pow y 2.0)))) (* (cbrt (exp (pow (cbrt t_0) 3.0))) (cbrt (pow (exp t_0) 2.0)))))
double code(double x, double y) {
double t_0 = x * pow(y, 2.0);
return cbrt(exp(pow(cbrt(t_0), 3.0))) * cbrt(pow(exp(t_0), 2.0));
}
public static double code(double x, double y) {
double t_0 = x * Math.pow(y, 2.0);
return Math.cbrt(Math.exp(Math.pow(Math.cbrt(t_0), 3.0))) * Math.cbrt(Math.pow(Math.exp(t_0), 2.0));
}
function code(x, y) t_0 = Float64(x * (y ^ 2.0)) return Float64(cbrt(exp((cbrt(t_0) ^ 3.0))) * cbrt((exp(t_0) ^ 2.0))) end
code[x_, y_] := Block[{t$95$0 = N[(x * N[Power[y, 2.0], $MachinePrecision]), $MachinePrecision]}, N[(N[Power[N[Exp[N[Power[N[Power[t$95$0, 1/3], $MachinePrecision], 3.0], $MachinePrecision]], $MachinePrecision], 1/3], $MachinePrecision] * N[Power[N[Power[N[Exp[t$95$0], $MachinePrecision], 2.0], $MachinePrecision], 1/3], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := x \cdot {y}^{2}\\
\sqrt[3]{e^{{\left(\sqrt[3]{t_0}\right)}^{3}}} \cdot \sqrt[3]{{\left(e^{t_0}\right)}^{2}}
\end{array}
\end{array}
(FPCore (x y) :precision binary64 (* (pow (pow (exp 2.0) (* x (pow y 2.0))) 0.16666666666666666) (pow E (* x (* (pow y 2.0) 0.6666666666666666)))))
double code(double x, double y) {
return pow(pow(exp(2.0), (x * pow(y, 2.0))), 0.16666666666666666) * pow(((double) M_E), (x * (pow(y, 2.0) * 0.6666666666666666)));
}
public static double code(double x, double y) {
return Math.pow(Math.pow(Math.exp(2.0), (x * Math.pow(y, 2.0))), 0.16666666666666666) * Math.pow(Math.E, (x * (Math.pow(y, 2.0) * 0.6666666666666666)));
}
def code(x, y): return math.pow(math.pow(math.exp(2.0), (x * math.pow(y, 2.0))), 0.16666666666666666) * math.pow(math.e, (x * (math.pow(y, 2.0) * 0.6666666666666666)))
function code(x, y) return Float64(((exp(2.0) ^ Float64(x * (y ^ 2.0))) ^ 0.16666666666666666) * (exp(1) ^ Float64(x * Float64((y ^ 2.0) * 0.6666666666666666)))) end
function tmp = code(x, y) tmp = ((exp(2.0) ^ (x * (y ^ 2.0))) ^ 0.16666666666666666) * (2.71828182845904523536 ^ (x * ((y ^ 2.0) * 0.6666666666666666))); end
code[x_, y_] := N[(N[Power[N[Power[N[Exp[2.0], $MachinePrecision], N[(x * N[Power[y, 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 0.16666666666666666], $MachinePrecision] * N[Power[E, N[(x * N[(N[Power[y, 2.0], $MachinePrecision] * 0.6666666666666666), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{\left({\left(e^{2}\right)}^{\left(x \cdot {y}^{2}\right)}\right)}^{0.16666666666666666} \cdot {e}^{\left(x \cdot \left({y}^{2} \cdot 0.6666666666666666\right)\right)}
\end{array}
(FPCore (x y) :precision binary64 (* (pow E (* x (* (pow y 2.0) 0.6666666666666666))) (pow (exp (* x (pow y 2.0))) 0.3333333333333333)))
double code(double x, double y) {
return pow(((double) M_E), (x * (pow(y, 2.0) * 0.6666666666666666))) * pow(exp((x * pow(y, 2.0))), 0.3333333333333333);
}
public static double code(double x, double y) {
return Math.pow(Math.E, (x * (Math.pow(y, 2.0) * 0.6666666666666666))) * Math.pow(Math.exp((x * Math.pow(y, 2.0))), 0.3333333333333333);
}
def code(x, y): return math.pow(math.e, (x * (math.pow(y, 2.0) * 0.6666666666666666))) * math.pow(math.exp((x * math.pow(y, 2.0))), 0.3333333333333333)
function code(x, y) return Float64((exp(1) ^ Float64(x * Float64((y ^ 2.0) * 0.6666666666666666))) * (exp(Float64(x * (y ^ 2.0))) ^ 0.3333333333333333)) end
function tmp = code(x, y) tmp = (2.71828182845904523536 ^ (x * ((y ^ 2.0) * 0.6666666666666666))) * (exp((x * (y ^ 2.0))) ^ 0.3333333333333333); end
code[x_, y_] := N[(N[Power[E, N[(x * N[(N[Power[y, 2.0], $MachinePrecision] * 0.6666666666666666), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[Power[N[Exp[N[(x * N[Power[y, 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision], 0.3333333333333333], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
{e}^{\left(x \cdot \left({y}^{2} \cdot 0.6666666666666666\right)\right)} \cdot {\left(e^{x \cdot {y}^{2}}\right)}^{0.3333333333333333}
\end{array}
(FPCore (x y) :precision binary64 (* (exp (* x (* (pow y 2.0) 0.3333333333333333))) (pow (exp 0.6666666666666666) (* x (pow y 2.0)))))
double code(double x, double y) {
return exp((x * (pow(y, 2.0) * 0.3333333333333333))) * pow(exp(0.6666666666666666), (x * pow(y, 2.0)));
}
real(8) function code(x, y)
real(8), intent (in) :: x
real(8), intent (in) :: y
code = exp((x * ((y ** 2.0d0) * 0.3333333333333333d0))) * (exp(0.6666666666666666d0) ** (x * (y ** 2.0d0)))
end function
public static double code(double x, double y) {
return Math.exp((x * (Math.pow(y, 2.0) * 0.3333333333333333))) * Math.pow(Math.exp(0.6666666666666666), (x * Math.pow(y, 2.0)));
}
def code(x, y): return math.exp((x * (math.pow(y, 2.0) * 0.3333333333333333))) * math.pow(math.exp(0.6666666666666666), (x * math.pow(y, 2.0)))
function code(x, y) return Float64(exp(Float64(x * Float64((y ^ 2.0) * 0.3333333333333333))) * (exp(0.6666666666666666) ^ Float64(x * (y ^ 2.0)))) end
function tmp = code(x, y) tmp = exp((x * ((y ^ 2.0) * 0.3333333333333333))) * (exp(0.6666666666666666) ^ (x * (y ^ 2.0))); end
code[x_, y_] := N[(N[Exp[N[(x * N[(N[Power[y, 2.0], $MachinePrecision] * 0.3333333333333333), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] * N[Power[N[Exp[0.6666666666666666], $MachinePrecision], N[(x * N[Power[y, 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
e^{x \cdot \left({y}^{2} \cdot 0.3333333333333333\right)} \cdot {\left(e^{0.6666666666666666}\right)}^{\left(x \cdot {y}^{2}\right)}
\end{array}
(FPCore (x y) :precision binary64 (/ (pow E (+ (* x (pow y 2.0)) 1.0)) E))
double code(double x, double y) {
return pow(((double) M_E), ((x * pow(y, 2.0)) + 1.0)) / ((double) M_E);
}
public static double code(double x, double y) {
return Math.pow(Math.E, ((x * Math.pow(y, 2.0)) + 1.0)) / Math.E;
}
def code(x, y): return math.pow(math.e, ((x * math.pow(y, 2.0)) + 1.0)) / math.e
function code(x, y) return Float64((exp(1) ^ Float64(Float64(x * (y ^ 2.0)) + 1.0)) / exp(1)) end
function tmp = code(x, y) tmp = (2.71828182845904523536 ^ ((x * (y ^ 2.0)) + 1.0)) / 2.71828182845904523536; end
code[x_, y_] := N[(N[Power[E, N[(N[(x * N[Power[y, 2.0], $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision]], $MachinePrecision] / E), $MachinePrecision]
\begin{array}{l}
\\
\frac{{e}^{\left(x \cdot {y}^{2} + 1\right)}}{e}
\end{array}
(FPCore (x y) :precision binary64 (pow E (* x (pow y 2.0))))
double code(double x, double y) {
return pow(((double) M_E), (x * pow(y, 2.0)));
}
public static double code(double x, double y) {
return Math.pow(Math.E, (x * Math.pow(y, 2.0)));
}
def code(x, y): return math.pow(math.e, (x * math.pow(y, 2.0)))
function code(x, y) return exp(1) ^ Float64(x * (y ^ 2.0)) end
function tmp = code(x, y) tmp = 2.71828182845904523536 ^ (x * (y ^ 2.0)); end
code[x_, y_] := N[Power[E, N[(x * N[Power[y, 2.0], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
{e}^{\left(x \cdot {y}^{2}\right)}
\end{array}
(FPCore (x y) :precision binary64 (exp (* x (* y y))))
double code(double x, double y) {
return exp((x * (y * y)));
}
real(8) function code(x, y)
real(8), intent (in) :: x
real(8), intent (in) :: y
code = exp((x * (y * y)))
end function
public static double code(double x, double y) {
return Math.exp((x * (y * y)));
}
def code(x, y): return math.exp((x * (y * y)))
function code(x, y) return exp(Float64(x * Float64(y * y))) end
function tmp = code(x, y) tmp = exp((x * (y * y))); end
code[x_, y_] := N[Exp[N[(x * N[(y * y), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
e^{x \cdot \left(y \cdot y\right)}
\end{array}
(FPCore (x y) :precision binary64 (exp (* y (* x y))))
double code(double x, double y) {
return exp((y * (x * y)));
}
real(8) function code(x, y)
real(8), intent (in) :: x
real(8), intent (in) :: y
code = exp((y * (x * y)))
end function
public static double code(double x, double y) {
return Math.exp((y * (x * y)));
}
def code(x, y): return math.exp((y * (x * y)))
function code(x, y) return exp(Float64(y * Float64(x * y))) end
function tmp = code(x, y) tmp = exp((y * (x * y))); end
code[x_, y_] := N[Exp[N[(y * N[(x * y), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\begin{array}{l}
\\
e^{y \cdot \left(x \cdot y\right)}
\end{array}
(FPCore (x y) :precision binary64 1.0)
double code(double x, double y) {
return 1.0;
}
real(8) function code(x, y)
real(8), intent (in) :: x
real(8), intent (in) :: y
code = 1.0d0
end function
public static double code(double x, double y) {
return 1.0;
}
def code(x, y): return 1.0
function code(x, y) return 1.0 end
function tmp = code(x, y) tmp = 1.0; end
code[x_, y_] := 1.0
\begin{array}{l}
\\
1
\end{array}
herbie shell --seed 2024008
(FPCore (x y)
:name "Data.Random.Distribution.Normal:normalF from random-fu-0.2.6.2"
:precision binary64
(exp (* (* x y) y)))