
(FPCore (x y z) :precision binary64 (+ x (/ (exp (* y (log (/ y (+ z y))))) y)))
double code(double x, double y, double z) {
return x + (exp((y * log((y / (z + y))))) / y);
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = x + (exp((y * log((y / (z + y))))) / y)
end function
public static double code(double x, double y, double z) {
return x + (Math.exp((y * Math.log((y / (z + y))))) / y);
}
def code(x, y, z): return x + (math.exp((y * math.log((y / (z + y))))) / y)
function code(x, y, z) return Float64(x + Float64(exp(Float64(y * log(Float64(y / Float64(z + y))))) / y)) end
function tmp = code(x, y, z) tmp = x + (exp((y * log((y / (z + y))))) / y); end
code[x_, y_, z_] := N[(x + N[(N[Exp[N[(y * N[Log[N[(y / N[(z + y), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 10 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z) :precision binary64 (+ x (/ (exp (* y (log (/ y (+ z y))))) y)))
double code(double x, double y, double z) {
return x + (exp((y * log((y / (z + y))))) / y);
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = x + (exp((y * log((y / (z + y))))) / y)
end function
public static double code(double x, double y, double z) {
return x + (Math.exp((y * Math.log((y / (z + y))))) / y);
}
def code(x, y, z): return x + (math.exp((y * math.log((y / (z + y))))) / y)
function code(x, y, z) return Float64(x + Float64(exp(Float64(y * log(Float64(y / Float64(z + y))))) / y)) end
function tmp = code(x, y, z) tmp = x + (exp((y * log((y / (z + y))))) / y); end
code[x_, y_, z_] := N[(x + N[(N[Exp[N[(y * N[Log[N[(y / N[(z + y), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x + \frac{e^{y \cdot \log \left(\frac{y}{z + y}\right)}}{y}
\end{array}
(FPCore (x y z) :precision binary64 (let* ((t_0 (+ x (/ (exp (- 0.0 z)) y)))) (if (<= y -13600000000.0) t_0 (if (<= y 4e-7) (+ x (/ 1.0 y)) t_0))))
double code(double x, double y, double z) {
double t_0 = x + (exp((0.0 - z)) / y);
double tmp;
if (y <= -13600000000.0) {
tmp = t_0;
} else if (y <= 4e-7) {
tmp = x + (1.0 / y);
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: t_0
real(8) :: tmp
t_0 = x + (exp((0.0d0 - z)) / y)
if (y <= (-13600000000.0d0)) then
tmp = t_0
else if (y <= 4d-7) then
tmp = x + (1.0d0 / y)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = x + (Math.exp((0.0 - z)) / y);
double tmp;
if (y <= -13600000000.0) {
tmp = t_0;
} else if (y <= 4e-7) {
tmp = x + (1.0 / y);
} else {
tmp = t_0;
}
return tmp;
}
def code(x, y, z): t_0 = x + (math.exp((0.0 - z)) / y) tmp = 0 if y <= -13600000000.0: tmp = t_0 elif y <= 4e-7: tmp = x + (1.0 / y) else: tmp = t_0 return tmp
function code(x, y, z) t_0 = Float64(x + Float64(exp(Float64(0.0 - z)) / y)) tmp = 0.0 if (y <= -13600000000.0) tmp = t_0; elseif (y <= 4e-7) tmp = Float64(x + Float64(1.0 / y)); else tmp = t_0; end return tmp end
function tmp_2 = code(x, y, z) t_0 = x + (exp((0.0 - z)) / y); tmp = 0.0; if (y <= -13600000000.0) tmp = t_0; elseif (y <= 4e-7) tmp = x + (1.0 / y); else tmp = t_0; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(x + N[(N[Exp[N[(0.0 - z), $MachinePrecision]], $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[y, -13600000000.0], t$95$0, If[LessEqual[y, 4e-7], N[(x + N[(1.0 / y), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := x + \frac{e^{0 - z}}{y}\\
\mathbf{if}\;y \leq -13600000000:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;y \leq 4 \cdot 10^{-7}:\\
\;\;\;\;x + \frac{1}{y}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if y < -1.36e10 or 3.9999999999999998e-7 < y Initial program 83.8%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6483.8%
Simplified83.8%
Taylor expanded in y around inf
+-lowering-+.f64N/A
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f64100.0%
Simplified100.0%
if -1.36e10 < y < 3.9999999999999998e-7Initial program 82.8%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6482.8%
Simplified82.8%
Taylor expanded in z around 0
+-lowering-+.f64N/A
/-lowering-/.f6499.1%
Simplified99.1%
(FPCore (x y z) :precision binary64 (let* ((t_0 (+ x (/ 1.0 y)))) (if (<= z -6.2e+133) t_0 (if (<= z -1750000.0) (/ (exp (- 0.0 z)) y) t_0))))
double code(double x, double y, double z) {
double t_0 = x + (1.0 / y);
double tmp;
if (z <= -6.2e+133) {
tmp = t_0;
} else if (z <= -1750000.0) {
tmp = exp((0.0 - z)) / y;
} else {
tmp = t_0;
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: t_0
real(8) :: tmp
t_0 = x + (1.0d0 / y)
if (z <= (-6.2d+133)) then
tmp = t_0
else if (z <= (-1750000.0d0)) then
tmp = exp((0.0d0 - z)) / y
else
tmp = t_0
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = x + (1.0 / y);
double tmp;
if (z <= -6.2e+133) {
tmp = t_0;
} else if (z <= -1750000.0) {
tmp = Math.exp((0.0 - z)) / y;
} else {
tmp = t_0;
}
return tmp;
}
def code(x, y, z): t_0 = x + (1.0 / y) tmp = 0 if z <= -6.2e+133: tmp = t_0 elif z <= -1750000.0: tmp = math.exp((0.0 - z)) / y else: tmp = t_0 return tmp
function code(x, y, z) t_0 = Float64(x + Float64(1.0 / y)) tmp = 0.0 if (z <= -6.2e+133) tmp = t_0; elseif (z <= -1750000.0) tmp = Float64(exp(Float64(0.0 - z)) / y); else tmp = t_0; end return tmp end
function tmp_2 = code(x, y, z) t_0 = x + (1.0 / y); tmp = 0.0; if (z <= -6.2e+133) tmp = t_0; elseif (z <= -1750000.0) tmp = exp((0.0 - z)) / y; else tmp = t_0; end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(x + N[(1.0 / y), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[z, -6.2e+133], t$95$0, If[LessEqual[z, -1750000.0], N[(N[Exp[N[(0.0 - z), $MachinePrecision]], $MachinePrecision] / y), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := x + \frac{1}{y}\\
\mathbf{if}\;z \leq -6.2 \cdot 10^{+133}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;z \leq -1750000:\\
\;\;\;\;\frac{e^{0 - z}}{y}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if z < -6.2e133 or -1.75e6 < z Initial program 88.3%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6488.3%
Simplified88.3%
Taylor expanded in z around 0
+-lowering-+.f64N/A
/-lowering-/.f6491.6%
Simplified91.6%
if -6.2e133 < z < -1.75e6Initial program 40.1%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6440.1%
Simplified40.1%
Taylor expanded in y around inf
+-lowering-+.f64N/A
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f6482.1%
Simplified82.1%
Taylor expanded in x around 0
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
neg-sub0N/A
--lowering--.f6482.1%
Simplified82.1%
(FPCore (x y z)
:precision binary64
(let* ((t_0 (+ 0.5 (* z -0.16666666666666666))) (t_1 (* z t_0)))
(if (<= y -6.2e+203)
x
(if (<= y -13600000000.0)
(+ x (/ (+ 1.0 (/ (* z (- 1.0 (* z (* t_0 t_1)))) (- -1.0 t_1))) y))
(+ x (/ 1.0 y))))))
double code(double x, double y, double z) {
double t_0 = 0.5 + (z * -0.16666666666666666);
double t_1 = z * t_0;
double tmp;
if (y <= -6.2e+203) {
tmp = x;
} else if (y <= -13600000000.0) {
tmp = x + ((1.0 + ((z * (1.0 - (z * (t_0 * t_1)))) / (-1.0 - t_1))) / y);
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: t_0
real(8) :: t_1
real(8) :: tmp
t_0 = 0.5d0 + (z * (-0.16666666666666666d0))
t_1 = z * t_0
if (y <= (-6.2d+203)) then
tmp = x
else if (y <= (-13600000000.0d0)) then
tmp = x + ((1.0d0 + ((z * (1.0d0 - (z * (t_0 * t_1)))) / ((-1.0d0) - t_1))) / y)
else
tmp = x + (1.0d0 / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double t_0 = 0.5 + (z * -0.16666666666666666);
double t_1 = z * t_0;
double tmp;
if (y <= -6.2e+203) {
tmp = x;
} else if (y <= -13600000000.0) {
tmp = x + ((1.0 + ((z * (1.0 - (z * (t_0 * t_1)))) / (-1.0 - t_1))) / y);
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
def code(x, y, z): t_0 = 0.5 + (z * -0.16666666666666666) t_1 = z * t_0 tmp = 0 if y <= -6.2e+203: tmp = x elif y <= -13600000000.0: tmp = x + ((1.0 + ((z * (1.0 - (z * (t_0 * t_1)))) / (-1.0 - t_1))) / y) else: tmp = x + (1.0 / y) return tmp
function code(x, y, z) t_0 = Float64(0.5 + Float64(z * -0.16666666666666666)) t_1 = Float64(z * t_0) tmp = 0.0 if (y <= -6.2e+203) tmp = x; elseif (y <= -13600000000.0) tmp = Float64(x + Float64(Float64(1.0 + Float64(Float64(z * Float64(1.0 - Float64(z * Float64(t_0 * t_1)))) / Float64(-1.0 - t_1))) / y)); else tmp = Float64(x + Float64(1.0 / y)); end return tmp end
function tmp_2 = code(x, y, z) t_0 = 0.5 + (z * -0.16666666666666666); t_1 = z * t_0; tmp = 0.0; if (y <= -6.2e+203) tmp = x; elseif (y <= -13600000000.0) tmp = x + ((1.0 + ((z * (1.0 - (z * (t_0 * t_1)))) / (-1.0 - t_1))) / y); else tmp = x + (1.0 / y); end tmp_2 = tmp; end
code[x_, y_, z_] := Block[{t$95$0 = N[(0.5 + N[(z * -0.16666666666666666), $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[(z * t$95$0), $MachinePrecision]}, If[LessEqual[y, -6.2e+203], x, If[LessEqual[y, -13600000000.0], N[(x + N[(N[(1.0 + N[(N[(z * N[(1.0 - N[(z * N[(t$95$0 * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(-1.0 - t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision], N[(x + N[(1.0 / y), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := 0.5 + z \cdot -0.16666666666666666\\
t_1 := z \cdot t\_0\\
\mathbf{if}\;y \leq -6.2 \cdot 10^{+203}:\\
\;\;\;\;x\\
\mathbf{elif}\;y \leq -13600000000:\\
\;\;\;\;x + \frac{1 + \frac{z \cdot \left(1 - z \cdot \left(t\_0 \cdot t\_1\right)\right)}{-1 - t\_1}}{y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{1}{y}\\
\end{array}
\end{array}
if y < -6.2e203Initial program 72.9%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6472.9%
Simplified72.9%
Taylor expanded in x around inf
Simplified72.3%
if -6.2e203 < y < -1.36e10Initial program 88.7%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6488.7%
Simplified88.7%
Taylor expanded in y around inf
+-lowering-+.f64N/A
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f64100.0%
Simplified100.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6485.9%
Simplified85.9%
*-commutativeN/A
flip-+N/A
associate-*l/N/A
/-lowering-/.f64N/A
Applied egg-rr90.1%
if -1.36e10 < y Initial program 84.0%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6484.0%
Simplified84.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
/-lowering-/.f6490.8%
Simplified90.8%
Final simplification88.4%
(FPCore (x y z)
:precision binary64
(if (<= y -200000000000.0)
(+
(/ 1.0 y)
(*
x
(+
1.0
(* (+ (* z (+ 0.5 (* z -0.16666666666666666))) -1.0) (/ z (* y x))))))
(+ x (/ 1.0 y))))
double code(double x, double y, double z) {
double tmp;
if (y <= -200000000000.0) {
tmp = (1.0 / y) + (x * (1.0 + (((z * (0.5 + (z * -0.16666666666666666))) + -1.0) * (z / (y * x)))));
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if (y <= (-200000000000.0d0)) then
tmp = (1.0d0 / y) + (x * (1.0d0 + (((z * (0.5d0 + (z * (-0.16666666666666666d0)))) + (-1.0d0)) * (z / (y * x)))))
else
tmp = x + (1.0d0 / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (y <= -200000000000.0) {
tmp = (1.0 / y) + (x * (1.0 + (((z * (0.5 + (z * -0.16666666666666666))) + -1.0) * (z / (y * x)))));
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
def code(x, y, z): tmp = 0 if y <= -200000000000.0: tmp = (1.0 / y) + (x * (1.0 + (((z * (0.5 + (z * -0.16666666666666666))) + -1.0) * (z / (y * x))))) else: tmp = x + (1.0 / y) return tmp
function code(x, y, z) tmp = 0.0 if (y <= -200000000000.0) tmp = Float64(Float64(1.0 / y) + Float64(x * Float64(1.0 + Float64(Float64(Float64(z * Float64(0.5 + Float64(z * -0.16666666666666666))) + -1.0) * Float64(z / Float64(y * x)))))); else tmp = Float64(x + Float64(1.0 / y)); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (y <= -200000000000.0) tmp = (1.0 / y) + (x * (1.0 + (((z * (0.5 + (z * -0.16666666666666666))) + -1.0) * (z / (y * x))))); else tmp = x + (1.0 / y); end tmp_2 = tmp; end
code[x_, y_, z_] := If[LessEqual[y, -200000000000.0], N[(N[(1.0 / y), $MachinePrecision] + N[(x * N[(1.0 + N[(N[(N[(z * N[(0.5 + N[(z * -0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision] * N[(z / N[(y * x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(x + N[(1.0 / y), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -200000000000:\\
\;\;\;\;\frac{1}{y} + x \cdot \left(1 + \left(z \cdot \left(0.5 + z \cdot -0.16666666666666666\right) + -1\right) \cdot \frac{z}{y \cdot x}\right)\\
\mathbf{else}:\\
\;\;\;\;x + \frac{1}{y}\\
\end{array}
\end{array}
if y < -2e11Initial program 82.0%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6482.0%
Simplified82.0%
Taylor expanded in y around inf
+-lowering-+.f64N/A
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f64100.0%
Simplified100.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6473.7%
Simplified73.7%
Taylor expanded in x around inf
associate-+r+N/A
+-commutativeN/A
associate-+l+N/A
distribute-lft-inN/A
associate-/r*N/A
associate-*r/N/A
rgt-mult-inverseN/A
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
Simplified76.3%
if -2e11 < y Initial program 84.0%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6484.0%
Simplified84.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
/-lowering-/.f6490.8%
Simplified90.8%
(FPCore (x y z)
:precision binary64
(if (<= y -2.8e+222)
x
(if (<= y -13600000000.0)
(+ x (/ (+ (- 1.0 z) (* (+ 0.5 (* z -0.16666666666666666)) (* z z))) y))
(+ x (/ 1.0 y)))))
double code(double x, double y, double z) {
double tmp;
if (y <= -2.8e+222) {
tmp = x;
} else if (y <= -13600000000.0) {
tmp = x + (((1.0 - z) + ((0.5 + (z * -0.16666666666666666)) * (z * z))) / y);
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if (y <= (-2.8d+222)) then
tmp = x
else if (y <= (-13600000000.0d0)) then
tmp = x + (((1.0d0 - z) + ((0.5d0 + (z * (-0.16666666666666666d0))) * (z * z))) / y)
else
tmp = x + (1.0d0 / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (y <= -2.8e+222) {
tmp = x;
} else if (y <= -13600000000.0) {
tmp = x + (((1.0 - z) + ((0.5 + (z * -0.16666666666666666)) * (z * z))) / y);
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
def code(x, y, z): tmp = 0 if y <= -2.8e+222: tmp = x elif y <= -13600000000.0: tmp = x + (((1.0 - z) + ((0.5 + (z * -0.16666666666666666)) * (z * z))) / y) else: tmp = x + (1.0 / y) return tmp
function code(x, y, z) tmp = 0.0 if (y <= -2.8e+222) tmp = x; elseif (y <= -13600000000.0) tmp = Float64(x + Float64(Float64(Float64(1.0 - z) + Float64(Float64(0.5 + Float64(z * -0.16666666666666666)) * Float64(z * z))) / y)); else tmp = Float64(x + Float64(1.0 / y)); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (y <= -2.8e+222) tmp = x; elseif (y <= -13600000000.0) tmp = x + (((1.0 - z) + ((0.5 + (z * -0.16666666666666666)) * (z * z))) / y); else tmp = x + (1.0 / y); end tmp_2 = tmp; end
code[x_, y_, z_] := If[LessEqual[y, -2.8e+222], x, If[LessEqual[y, -13600000000.0], N[(x + N[(N[(N[(1.0 - z), $MachinePrecision] + N[(N[(0.5 + N[(z * -0.16666666666666666), $MachinePrecision]), $MachinePrecision] * N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision], N[(x + N[(1.0 / y), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -2.8 \cdot 10^{+222}:\\
\;\;\;\;x\\
\mathbf{elif}\;y \leq -13600000000:\\
\;\;\;\;x + \frac{\left(1 - z\right) + \left(0.5 + z \cdot -0.16666666666666666\right) \cdot \left(z \cdot z\right)}{y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{1}{y}\\
\end{array}
\end{array}
if y < -2.8000000000000001e222Initial program 74.1%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6474.1%
Simplified74.1%
Taylor expanded in x around inf
Simplified77.2%
if -2.8000000000000001e222 < y < -1.36e10Initial program 86.2%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6486.2%
Simplified86.2%
Taylor expanded in y around inf
+-lowering-+.f64N/A
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f64100.0%
Simplified100.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6483.7%
Simplified83.7%
distribute-lft-inN/A
associate-+r+N/A
*-commutativeN/A
+-lowering-+.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
neg-lowering-neg.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f6483.7%
Applied egg-rr83.7%
+-lowering-+.f64N/A
sub-negN/A
--lowering--.f64N/A
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6483.7%
Applied egg-rr83.7%
if -1.36e10 < y Initial program 84.0%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6484.0%
Simplified84.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
/-lowering-/.f6490.8%
Simplified90.8%
(FPCore (x y z)
:precision binary64
(if (<= y -2.6e+223)
x
(if (<= y -13600000000.0)
(+
x
(/ (+ 1.0 (* z (+ (* z (+ 0.5 (* z -0.16666666666666666))) -1.0))) y))
(+ x (/ 1.0 y)))))
double code(double x, double y, double z) {
double tmp;
if (y <= -2.6e+223) {
tmp = x;
} else if (y <= -13600000000.0) {
tmp = x + ((1.0 + (z * ((z * (0.5 + (z * -0.16666666666666666))) + -1.0))) / y);
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if (y <= (-2.6d+223)) then
tmp = x
else if (y <= (-13600000000.0d0)) then
tmp = x + ((1.0d0 + (z * ((z * (0.5d0 + (z * (-0.16666666666666666d0)))) + (-1.0d0)))) / y)
else
tmp = x + (1.0d0 / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (y <= -2.6e+223) {
tmp = x;
} else if (y <= -13600000000.0) {
tmp = x + ((1.0 + (z * ((z * (0.5 + (z * -0.16666666666666666))) + -1.0))) / y);
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
def code(x, y, z): tmp = 0 if y <= -2.6e+223: tmp = x elif y <= -13600000000.0: tmp = x + ((1.0 + (z * ((z * (0.5 + (z * -0.16666666666666666))) + -1.0))) / y) else: tmp = x + (1.0 / y) return tmp
function code(x, y, z) tmp = 0.0 if (y <= -2.6e+223) tmp = x; elseif (y <= -13600000000.0) tmp = Float64(x + Float64(Float64(1.0 + Float64(z * Float64(Float64(z * Float64(0.5 + Float64(z * -0.16666666666666666))) + -1.0))) / y)); else tmp = Float64(x + Float64(1.0 / y)); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (y <= -2.6e+223) tmp = x; elseif (y <= -13600000000.0) tmp = x + ((1.0 + (z * ((z * (0.5 + (z * -0.16666666666666666))) + -1.0))) / y); else tmp = x + (1.0 / y); end tmp_2 = tmp; end
code[x_, y_, z_] := If[LessEqual[y, -2.6e+223], x, If[LessEqual[y, -13600000000.0], N[(x + N[(N[(1.0 + N[(z * N[(N[(z * N[(0.5 + N[(z * -0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision], N[(x + N[(1.0 / y), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -2.6 \cdot 10^{+223}:\\
\;\;\;\;x\\
\mathbf{elif}\;y \leq -13600000000:\\
\;\;\;\;x + \frac{1 + z \cdot \left(z \cdot \left(0.5 + z \cdot -0.16666666666666666\right) + -1\right)}{y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{1}{y}\\
\end{array}
\end{array}
if y < -2.6000000000000002e223Initial program 74.1%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6474.1%
Simplified74.1%
Taylor expanded in x around inf
Simplified77.2%
if -2.6000000000000002e223 < y < -1.36e10Initial program 86.2%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6486.2%
Simplified86.2%
Taylor expanded in y around inf
+-lowering-+.f64N/A
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f64100.0%
Simplified100.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6483.7%
Simplified83.7%
if -1.36e10 < y Initial program 84.0%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6484.0%
Simplified84.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
/-lowering-/.f6490.8%
Simplified90.8%
Final simplification88.1%
(FPCore (x y z)
:precision binary64
(if (<= y -3.5e+223)
x
(if (<= y -15000000000.0)
(+ x (/ (+ 1.0 (* z (+ -1.0 (* -0.16666666666666666 (* z z))))) y))
(+ x (/ 1.0 y)))))
double code(double x, double y, double z) {
double tmp;
if (y <= -3.5e+223) {
tmp = x;
} else if (y <= -15000000000.0) {
tmp = x + ((1.0 + (z * (-1.0 + (-0.16666666666666666 * (z * z))))) / y);
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if (y <= (-3.5d+223)) then
tmp = x
else if (y <= (-15000000000.0d0)) then
tmp = x + ((1.0d0 + (z * ((-1.0d0) + ((-0.16666666666666666d0) * (z * z))))) / y)
else
tmp = x + (1.0d0 / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (y <= -3.5e+223) {
tmp = x;
} else if (y <= -15000000000.0) {
tmp = x + ((1.0 + (z * (-1.0 + (-0.16666666666666666 * (z * z))))) / y);
} else {
tmp = x + (1.0 / y);
}
return tmp;
}
def code(x, y, z): tmp = 0 if y <= -3.5e+223: tmp = x elif y <= -15000000000.0: tmp = x + ((1.0 + (z * (-1.0 + (-0.16666666666666666 * (z * z))))) / y) else: tmp = x + (1.0 / y) return tmp
function code(x, y, z) tmp = 0.0 if (y <= -3.5e+223) tmp = x; elseif (y <= -15000000000.0) tmp = Float64(x + Float64(Float64(1.0 + Float64(z * Float64(-1.0 + Float64(-0.16666666666666666 * Float64(z * z))))) / y)); else tmp = Float64(x + Float64(1.0 / y)); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (y <= -3.5e+223) tmp = x; elseif (y <= -15000000000.0) tmp = x + ((1.0 + (z * (-1.0 + (-0.16666666666666666 * (z * z))))) / y); else tmp = x + (1.0 / y); end tmp_2 = tmp; end
code[x_, y_, z_] := If[LessEqual[y, -3.5e+223], x, If[LessEqual[y, -15000000000.0], N[(x + N[(N[(1.0 + N[(z * N[(-1.0 + N[(-0.16666666666666666 * N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision], N[(x + N[(1.0 / y), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -3.5 \cdot 10^{+223}:\\
\;\;\;\;x\\
\mathbf{elif}\;y \leq -15000000000:\\
\;\;\;\;x + \frac{1 + z \cdot \left(-1 + -0.16666666666666666 \cdot \left(z \cdot z\right)\right)}{y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{1}{y}\\
\end{array}
\end{array}
if y < -3.5000000000000001e223Initial program 74.1%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6474.1%
Simplified74.1%
Taylor expanded in x around inf
Simplified77.2%
if -3.5000000000000001e223 < y < -1.5e10Initial program 86.2%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6486.2%
Simplified86.2%
Taylor expanded in y around inf
+-lowering-+.f64N/A
/-lowering-/.f64N/A
exp-lowering-exp.f64N/A
mul-1-negN/A
neg-sub0N/A
--lowering--.f64100.0%
Simplified100.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
*-lowering-*.f64N/A
sub-negN/A
metadata-evalN/A
+-commutativeN/A
+-lowering-+.f64N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
*-commutativeN/A
*-lowering-*.f6483.7%
Simplified83.7%
Taylor expanded in z around inf
*-lowering-*.f64N/A
unpow2N/A
*-lowering-*.f6483.0%
Simplified83.0%
if -1.5e10 < y Initial program 84.0%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6484.0%
Simplified84.0%
Taylor expanded in z around 0
+-lowering-+.f64N/A
/-lowering-/.f6490.8%
Simplified90.8%
(FPCore (x y z) :precision binary64 (if (<= y -3.2e+65) x (if (<= y 7.5e-14) (/ 1.0 y) x)))
double code(double x, double y, double z) {
double tmp;
if (y <= -3.2e+65) {
tmp = x;
} else if (y <= 7.5e-14) {
tmp = 1.0 / y;
} else {
tmp = x;
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if (y <= (-3.2d+65)) then
tmp = x
else if (y <= 7.5d-14) then
tmp = 1.0d0 / y
else
tmp = x
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (y <= -3.2e+65) {
tmp = x;
} else if (y <= 7.5e-14) {
tmp = 1.0 / y;
} else {
tmp = x;
}
return tmp;
}
def code(x, y, z): tmp = 0 if y <= -3.2e+65: tmp = x elif y <= 7.5e-14: tmp = 1.0 / y else: tmp = x return tmp
function code(x, y, z) tmp = 0.0 if (y <= -3.2e+65) tmp = x; elseif (y <= 7.5e-14) tmp = Float64(1.0 / y); else tmp = x; end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (y <= -3.2e+65) tmp = x; elseif (y <= 7.5e-14) tmp = 1.0 / y; else tmp = x; end tmp_2 = tmp; end
code[x_, y_, z_] := If[LessEqual[y, -3.2e+65], x, If[LessEqual[y, 7.5e-14], N[(1.0 / y), $MachinePrecision], x]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;y \leq -3.2 \cdot 10^{+65}:\\
\;\;\;\;x\\
\mathbf{elif}\;y \leq 7.5 \cdot 10^{-14}:\\
\;\;\;\;\frac{1}{y}\\
\mathbf{else}:\\
\;\;\;\;x\\
\end{array}
\end{array}
if y < -3.20000000000000007e65 or 7.4999999999999996e-14 < y Initial program 83.1%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6483.1%
Simplified83.1%
Taylor expanded in x around inf
Simplified71.9%
if -3.20000000000000007e65 < y < 7.4999999999999996e-14Initial program 83.7%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6483.7%
Simplified83.7%
Taylor expanded in y around 0
/-lowering-/.f6470.1%
Simplified70.1%
(FPCore (x y z) :precision binary64 (+ x (/ 1.0 y)))
double code(double x, double y, double z) {
return x + (1.0 / y);
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = x + (1.0d0 / y)
end function
public static double code(double x, double y, double z) {
return x + (1.0 / y);
}
def code(x, y, z): return x + (1.0 / y)
function code(x, y, z) return Float64(x + Float64(1.0 / y)) end
function tmp = code(x, y, z) tmp = x + (1.0 / y); end
code[x_, y_, z_] := N[(x + N[(1.0 / y), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x + \frac{1}{y}
\end{array}
Initial program 83.4%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6483.4%
Simplified83.4%
Taylor expanded in z around 0
+-lowering-+.f64N/A
/-lowering-/.f6484.4%
Simplified84.4%
(FPCore (x y z) :precision binary64 x)
double code(double x, double y, double z) {
return x;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = x
end function
public static double code(double x, double y, double z) {
return x;
}
def code(x, y, z): return x
function code(x, y, z) return x end
function tmp = code(x, y, z) tmp = x; end
code[x_, y_, z_] := x
\begin{array}{l}
\\
x
\end{array}
Initial program 83.4%
+-lowering-+.f64N/A
/-lowering-/.f64N/A
*-commutativeN/A
exp-to-powN/A
pow-lowering-pow.f64N/A
/-lowering-/.f64N/A
+-commutativeN/A
+-lowering-+.f6483.4%
Simplified83.4%
Taylor expanded in x around inf
Simplified51.4%
(FPCore (x y z) :precision binary64 (if (< (/ y (+ z y)) 7.11541576e-315) (+ x (/ (exp (/ -1.0 z)) y)) (+ x (/ (exp (log (pow (/ y (+ y z)) y))) y))))
double code(double x, double y, double z) {
double tmp;
if ((y / (z + y)) < 7.11541576e-315) {
tmp = x + (exp((-1.0 / z)) / y);
} else {
tmp = x + (exp(log(pow((y / (y + z)), y))) / y);
}
return tmp;
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8) :: tmp
if ((y / (z + y)) < 7.11541576d-315) then
tmp = x + (exp(((-1.0d0) / z)) / y)
else
tmp = x + (exp(log(((y / (y + z)) ** y))) / y)
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if ((y / (z + y)) < 7.11541576e-315) {
tmp = x + (Math.exp((-1.0 / z)) / y);
} else {
tmp = x + (Math.exp(Math.log(Math.pow((y / (y + z)), y))) / y);
}
return tmp;
}
def code(x, y, z): tmp = 0 if (y / (z + y)) < 7.11541576e-315: tmp = x + (math.exp((-1.0 / z)) / y) else: tmp = x + (math.exp(math.log(math.pow((y / (y + z)), y))) / y) return tmp
function code(x, y, z) tmp = 0.0 if (Float64(y / Float64(z + y)) < 7.11541576e-315) tmp = Float64(x + Float64(exp(Float64(-1.0 / z)) / y)); else tmp = Float64(x + Float64(exp(log((Float64(y / Float64(y + z)) ^ y))) / y)); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if ((y / (z + y)) < 7.11541576e-315) tmp = x + (exp((-1.0 / z)) / y); else tmp = x + (exp(log(((y / (y + z)) ^ y))) / y); end tmp_2 = tmp; end
code[x_, y_, z_] := If[Less[N[(y / N[(z + y), $MachinePrecision]), $MachinePrecision], 7.11541576e-315], N[(x + N[(N[Exp[N[(-1.0 / z), $MachinePrecision]], $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision], N[(x + N[(N[Exp[N[Log[N[Power[N[(y / N[(y + z), $MachinePrecision]), $MachinePrecision], y], $MachinePrecision]], $MachinePrecision]], $MachinePrecision] / y), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\frac{y}{z + y} < 7.11541576 \cdot 10^{-315}:\\
\;\;\;\;x + \frac{e^{\frac{-1}{z}}}{y}\\
\mathbf{else}:\\
\;\;\;\;x + \frac{e^{\log \left({\left(\frac{y}{y + z}\right)}^{y}\right)}}{y}\\
\end{array}
\end{array}
herbie shell --seed 2024158
(FPCore (x y z)
:name "Numeric.SpecFunctions:invIncompleteBetaWorker from math-functions-0.1.5.2, G"
:precision binary64
:alt
(! :herbie-platform default (if (< (/ y (+ z y)) 17788539399477/2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000) (+ x (/ (exp (/ -1 z)) y)) (+ x (/ (exp (log (pow (/ y (+ y z)) y))) y))))
(+ x (/ (exp (* y (log (/ y (+ z y))))) y)))