
(FPCore (x y z) :precision binary64 (/ (* x y) (* (* z z) (+ z 1.0))))
double code(double x, double y, double z) {
return (x * y) / ((z * z) * (z + 1.0));
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = (x * y) / ((z * z) * (z + 1.0d0))
end function
public static double code(double x, double y, double z) {
return (x * y) / ((z * z) * (z + 1.0));
}
def code(x, y, z): return (x * y) / ((z * z) * (z + 1.0))
function code(x, y, z) return Float64(Float64(x * y) / Float64(Float64(z * z) * Float64(z + 1.0))) end
function tmp = code(x, y, z) tmp = (x * y) / ((z * z) * (z + 1.0)); end
code[x_, y_, z_] := N[(N[(x * y), $MachinePrecision] / N[(N[(z * z), $MachinePrecision] * N[(z + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 13 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z) :precision binary64 (/ (* x y) (* (* z z) (+ z 1.0))))
double code(double x, double y, double z) {
return (x * y) / ((z * z) * (z + 1.0));
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = (x * y) / ((z * z) * (z + 1.0d0))
end function
public static double code(double x, double y, double z) {
return (x * y) / ((z * z) * (z + 1.0));
}
def code(x, y, z): return (x * y) / ((z * z) * (z + 1.0))
function code(x, y, z) return Float64(Float64(x * y) / Float64(Float64(z * z) * Float64(z + 1.0))) end
function tmp = code(x, y, z) tmp = (x * y) / ((z * z) * (z + 1.0)); end
code[x_, y_, z_] := N[(N[(x * y), $MachinePrecision] / N[(N[(z * z), $MachinePrecision] * N[(z + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{x \cdot y}{\left(z \cdot z\right) \cdot \left(z + 1\right)}
\end{array}
y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) NOTE: x, y_m, and z should be sorted in increasing order before calling this function. (FPCore (y_s x y_m z) :precision binary64 (* y_s (/ (* (/ y_m (+ z 1.0)) (/ x z)) z)))
y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
return y_s * (((y_m / (z + 1.0)) * (x / z)) / z);
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
code = y_s * (((y_m / (z + 1.0d0)) * (x / z)) / z)
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
return y_s * (((y_m / (z + 1.0)) * (x / z)) / z);
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): return y_s * (((y_m / (z + 1.0)) * (x / z)) / z)
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) return Float64(y_s * Float64(Float64(Float64(y_m / Float64(z + 1.0)) * Float64(x / z)) / z)) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp = code(y_s, x, y_m, z)
tmp = y_s * (((y_m / (z + 1.0)) * (x / z)) / z);
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * N[(N[(N[(y$95$m / N[(z + 1.0), $MachinePrecision]), $MachinePrecision] * N[(x / z), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \frac{\frac{y\_m}{z + 1} \cdot \frac{x}{z}}{z}
\end{array}
Initial program 83.9%
sqr-neg83.9%
times-frac87.7%
sqr-neg87.7%
Simplified87.7%
*-commutative87.7%
associate-/r*93.1%
associate-*r/96.9%
Applied egg-rr96.9%
Final simplification96.9%
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
(FPCore (y_s x y_m z)
:precision binary64
(*
y_s
(if (or (<= z -18000000000000.0) (not (<= z 1.0)))
(* (/ x (* z z)) (/ y_m z))
(* y_m (/ (/ x z) z)))))y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
double tmp;
if ((z <= -18000000000000.0) || !(z <= 1.0)) {
tmp = (x / (z * z)) * (y_m / z);
} else {
tmp = y_m * ((x / z) / z);
}
return y_s * tmp;
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
real(8) :: tmp
if ((z <= (-18000000000000.0d0)) .or. (.not. (z <= 1.0d0))) then
tmp = (x / (z * z)) * (y_m / z)
else
tmp = y_m * ((x / z) / z)
end if
code = y_s * tmp
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
double tmp;
if ((z <= -18000000000000.0) || !(z <= 1.0)) {
tmp = (x / (z * z)) * (y_m / z);
} else {
tmp = y_m * ((x / z) / z);
}
return y_s * tmp;
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): tmp = 0 if (z <= -18000000000000.0) or not (z <= 1.0): tmp = (x / (z * z)) * (y_m / z) else: tmp = y_m * ((x / z) / z) return y_s * tmp
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) tmp = 0.0 if ((z <= -18000000000000.0) || !(z <= 1.0)) tmp = Float64(Float64(x / Float64(z * z)) * Float64(y_m / z)); else tmp = Float64(y_m * Float64(Float64(x / z) / z)); end return Float64(y_s * tmp) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp_2 = code(y_s, x, y_m, z)
tmp = 0.0;
if ((z <= -18000000000000.0) || ~((z <= 1.0)))
tmp = (x / (z * z)) * (y_m / z);
else
tmp = y_m * ((x / z) / z);
end
tmp_2 = y_s * tmp;
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * If[Or[LessEqual[z, -18000000000000.0], N[Not[LessEqual[z, 1.0]], $MachinePrecision]], N[(N[(x / N[(z * z), $MachinePrecision]), $MachinePrecision] * N[(y$95$m / z), $MachinePrecision]), $MachinePrecision], N[(y$95$m * N[(N[(x / z), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;z \leq -18000000000000 \lor \neg \left(z \leq 1\right):\\
\;\;\;\;\frac{x}{z \cdot z} \cdot \frac{y\_m}{z}\\
\mathbf{else}:\\
\;\;\;\;y\_m \cdot \frac{\frac{x}{z}}{z}\\
\end{array}
\end{array}
if z < -1.8e13 or 1 < z Initial program 81.7%
sqr-neg81.7%
times-frac91.6%
sqr-neg91.6%
Simplified91.6%
Taylor expanded in z around inf 90.1%
if -1.8e13 < z < 1Initial program 85.7%
sqr-neg85.7%
times-frac84.4%
sqr-neg84.4%
Simplified84.4%
associate-/r*89.9%
div-inv89.8%
Applied egg-rr89.8%
associate-*r/89.9%
*-rgt-identity89.9%
Simplified89.9%
Taylor expanded in z around 0 87.5%
Final simplification88.7%
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
(FPCore (y_s x y_m z)
:precision binary64
(*
y_s
(if (or (<= z -18000000000000.0) (not (<= z 1.0)))
(* (/ x z) (/ y_m (* z z)))
(* y_m (/ (/ x z) z)))))y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
double tmp;
if ((z <= -18000000000000.0) || !(z <= 1.0)) {
tmp = (x / z) * (y_m / (z * z));
} else {
tmp = y_m * ((x / z) / z);
}
return y_s * tmp;
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
real(8) :: tmp
if ((z <= (-18000000000000.0d0)) .or. (.not. (z <= 1.0d0))) then
tmp = (x / z) * (y_m / (z * z))
else
tmp = y_m * ((x / z) / z)
end if
code = y_s * tmp
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
double tmp;
if ((z <= -18000000000000.0) || !(z <= 1.0)) {
tmp = (x / z) * (y_m / (z * z));
} else {
tmp = y_m * ((x / z) / z);
}
return y_s * tmp;
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): tmp = 0 if (z <= -18000000000000.0) or not (z <= 1.0): tmp = (x / z) * (y_m / (z * z)) else: tmp = y_m * ((x / z) / z) return y_s * tmp
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) tmp = 0.0 if ((z <= -18000000000000.0) || !(z <= 1.0)) tmp = Float64(Float64(x / z) * Float64(y_m / Float64(z * z))); else tmp = Float64(y_m * Float64(Float64(x / z) / z)); end return Float64(y_s * tmp) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp_2 = code(y_s, x, y_m, z)
tmp = 0.0;
if ((z <= -18000000000000.0) || ~((z <= 1.0)))
tmp = (x / z) * (y_m / (z * z));
else
tmp = y_m * ((x / z) / z);
end
tmp_2 = y_s * tmp;
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * If[Or[LessEqual[z, -18000000000000.0], N[Not[LessEqual[z, 1.0]], $MachinePrecision]], N[(N[(x / z), $MachinePrecision] * N[(y$95$m / N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(y$95$m * N[(N[(x / z), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;z \leq -18000000000000 \lor \neg \left(z \leq 1\right):\\
\;\;\;\;\frac{x}{z} \cdot \frac{y\_m}{z \cdot z}\\
\mathbf{else}:\\
\;\;\;\;y\_m \cdot \frac{\frac{x}{z}}{z}\\
\end{array}
\end{array}
if z < -1.8e13 or 1 < z Initial program 81.7%
*-commutative81.7%
sqr-neg81.7%
times-frac92.5%
sqr-neg92.5%
Simplified92.5%
Taylor expanded in z around inf 90.9%
if -1.8e13 < z < 1Initial program 85.7%
sqr-neg85.7%
times-frac84.4%
sqr-neg84.4%
Simplified84.4%
associate-/r*89.9%
div-inv89.8%
Applied egg-rr89.8%
associate-*r/89.9%
*-rgt-identity89.9%
Simplified89.9%
Taylor expanded in z around 0 87.5%
Final simplification89.1%
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
(FPCore (y_s x y_m z)
:precision binary64
(*
y_s
(if (or (<= z -1.0) (not (<= z 0.75)))
(* (/ x z) (/ y_m (* z z)))
(/ (* y_m (- (/ x z) x)) z))))y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
double tmp;
if ((z <= -1.0) || !(z <= 0.75)) {
tmp = (x / z) * (y_m / (z * z));
} else {
tmp = (y_m * ((x / z) - x)) / z;
}
return y_s * tmp;
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
real(8) :: tmp
if ((z <= (-1.0d0)) .or. (.not. (z <= 0.75d0))) then
tmp = (x / z) * (y_m / (z * z))
else
tmp = (y_m * ((x / z) - x)) / z
end if
code = y_s * tmp
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
double tmp;
if ((z <= -1.0) || !(z <= 0.75)) {
tmp = (x / z) * (y_m / (z * z));
} else {
tmp = (y_m * ((x / z) - x)) / z;
}
return y_s * tmp;
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): tmp = 0 if (z <= -1.0) or not (z <= 0.75): tmp = (x / z) * (y_m / (z * z)) else: tmp = (y_m * ((x / z) - x)) / z return y_s * tmp
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) tmp = 0.0 if ((z <= -1.0) || !(z <= 0.75)) tmp = Float64(Float64(x / z) * Float64(y_m / Float64(z * z))); else tmp = Float64(Float64(y_m * Float64(Float64(x / z) - x)) / z); end return Float64(y_s * tmp) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp_2 = code(y_s, x, y_m, z)
tmp = 0.0;
if ((z <= -1.0) || ~((z <= 0.75)))
tmp = (x / z) * (y_m / (z * z));
else
tmp = (y_m * ((x / z) - x)) / z;
end
tmp_2 = y_s * tmp;
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * If[Or[LessEqual[z, -1.0], N[Not[LessEqual[z, 0.75]], $MachinePrecision]], N[(N[(x / z), $MachinePrecision] * N[(y$95$m / N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(y$95$m * N[(N[(x / z), $MachinePrecision] - x), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;z \leq -1 \lor \neg \left(z \leq 0.75\right):\\
\;\;\;\;\frac{x}{z} \cdot \frac{y\_m}{z \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{y\_m \cdot \left(\frac{x}{z} - x\right)}{z}\\
\end{array}
\end{array}
if z < -1 or 0.75 < z Initial program 81.9%
*-commutative81.9%
sqr-neg81.9%
times-frac92.5%
sqr-neg92.5%
Simplified92.5%
Taylor expanded in z around inf 91.0%
if -1 < z < 0.75Initial program 85.6%
sqr-neg85.6%
times-frac84.3%
sqr-neg84.3%
Simplified84.3%
*-commutative84.3%
associate-/r*89.8%
associate-*r/96.3%
Applied egg-rr96.3%
frac-times92.3%
associate-/l*96.7%
associate-*l/96.7%
*-commutative96.7%
Applied egg-rr96.7%
Taylor expanded in z around 0 83.6%
+-commutative83.6%
associate-*l/87.6%
associate-*r*87.6%
neg-mul-187.6%
distribute-rgt-out94.8%
unsub-neg94.8%
Simplified94.8%
Final simplification93.1%
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
(FPCore (y_s x y_m z)
:precision binary64
(*
y_s
(if (or (<= z -1.0) (not (<= z 0.75)))
(/ (* (/ x z) (/ y_m z)) z)
(/ (* y_m (- (/ x z) x)) z))))y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
double tmp;
if ((z <= -1.0) || !(z <= 0.75)) {
tmp = ((x / z) * (y_m / z)) / z;
} else {
tmp = (y_m * ((x / z) - x)) / z;
}
return y_s * tmp;
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
real(8) :: tmp
if ((z <= (-1.0d0)) .or. (.not. (z <= 0.75d0))) then
tmp = ((x / z) * (y_m / z)) / z
else
tmp = (y_m * ((x / z) - x)) / z
end if
code = y_s * tmp
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
double tmp;
if ((z <= -1.0) || !(z <= 0.75)) {
tmp = ((x / z) * (y_m / z)) / z;
} else {
tmp = (y_m * ((x / z) - x)) / z;
}
return y_s * tmp;
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): tmp = 0 if (z <= -1.0) or not (z <= 0.75): tmp = ((x / z) * (y_m / z)) / z else: tmp = (y_m * ((x / z) - x)) / z return y_s * tmp
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) tmp = 0.0 if ((z <= -1.0) || !(z <= 0.75)) tmp = Float64(Float64(Float64(x / z) * Float64(y_m / z)) / z); else tmp = Float64(Float64(y_m * Float64(Float64(x / z) - x)) / z); end return Float64(y_s * tmp) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp_2 = code(y_s, x, y_m, z)
tmp = 0.0;
if ((z <= -1.0) || ~((z <= 0.75)))
tmp = ((x / z) * (y_m / z)) / z;
else
tmp = (y_m * ((x / z) - x)) / z;
end
tmp_2 = y_s * tmp;
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * If[Or[LessEqual[z, -1.0], N[Not[LessEqual[z, 0.75]], $MachinePrecision]], N[(N[(N[(x / z), $MachinePrecision] * N[(y$95$m / z), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision], N[(N[(y$95$m * N[(N[(x / z), $MachinePrecision] - x), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;z \leq -1 \lor \neg \left(z \leq 0.75\right):\\
\;\;\;\;\frac{\frac{x}{z} \cdot \frac{y\_m}{z}}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{y\_m \cdot \left(\frac{x}{z} - x\right)}{z}\\
\end{array}
\end{array}
if z < -1 or 0.75 < z Initial program 81.9%
sqr-neg81.9%
times-frac91.7%
sqr-neg91.7%
Simplified91.7%
Taylor expanded in z around inf 90.2%
*-commutative90.2%
associate-/r*95.5%
associate-*r/96.2%
Applied egg-rr96.2%
if -1 < z < 0.75Initial program 85.6%
sqr-neg85.6%
times-frac84.3%
sqr-neg84.3%
Simplified84.3%
*-commutative84.3%
associate-/r*89.8%
associate-*r/96.3%
Applied egg-rr96.3%
frac-times92.3%
associate-/l*96.7%
associate-*l/96.7%
*-commutative96.7%
Applied egg-rr96.7%
Taylor expanded in z around 0 83.6%
+-commutative83.6%
associate-*l/87.6%
associate-*r*87.6%
neg-mul-187.6%
distribute-rgt-out94.8%
unsub-neg94.8%
Simplified94.8%
Final simplification95.4%
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
(FPCore (y_s x y_m z)
:precision binary64
(*
y_s
(if (<= z -1.0)
(/ (* (/ x z) (/ y_m z)) z)
(if (<= z 0.76) (/ (* y_m (- (/ x z) x)) z) (/ (/ (/ x (/ z y_m)) z) z)))))y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
double tmp;
if (z <= -1.0) {
tmp = ((x / z) * (y_m / z)) / z;
} else if (z <= 0.76) {
tmp = (y_m * ((x / z) - x)) / z;
} else {
tmp = ((x / (z / y_m)) / z) / z;
}
return y_s * tmp;
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
real(8) :: tmp
if (z <= (-1.0d0)) then
tmp = ((x / z) * (y_m / z)) / z
else if (z <= 0.76d0) then
tmp = (y_m * ((x / z) - x)) / z
else
tmp = ((x / (z / y_m)) / z) / z
end if
code = y_s * tmp
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
double tmp;
if (z <= -1.0) {
tmp = ((x / z) * (y_m / z)) / z;
} else if (z <= 0.76) {
tmp = (y_m * ((x / z) - x)) / z;
} else {
tmp = ((x / (z / y_m)) / z) / z;
}
return y_s * tmp;
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): tmp = 0 if z <= -1.0: tmp = ((x / z) * (y_m / z)) / z elif z <= 0.76: tmp = (y_m * ((x / z) - x)) / z else: tmp = ((x / (z / y_m)) / z) / z return y_s * tmp
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) tmp = 0.0 if (z <= -1.0) tmp = Float64(Float64(Float64(x / z) * Float64(y_m / z)) / z); elseif (z <= 0.76) tmp = Float64(Float64(y_m * Float64(Float64(x / z) - x)) / z); else tmp = Float64(Float64(Float64(x / Float64(z / y_m)) / z) / z); end return Float64(y_s * tmp) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp_2 = code(y_s, x, y_m, z)
tmp = 0.0;
if (z <= -1.0)
tmp = ((x / z) * (y_m / z)) / z;
elseif (z <= 0.76)
tmp = (y_m * ((x / z) - x)) / z;
else
tmp = ((x / (z / y_m)) / z) / z;
end
tmp_2 = y_s * tmp;
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * If[LessEqual[z, -1.0], N[(N[(N[(x / z), $MachinePrecision] * N[(y$95$m / z), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision], If[LessEqual[z, 0.76], N[(N[(y$95$m * N[(N[(x / z), $MachinePrecision] - x), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision], N[(N[(N[(x / N[(z / y$95$m), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision] / z), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;z \leq -1:\\
\;\;\;\;\frac{\frac{x}{z} \cdot \frac{y\_m}{z}}{z}\\
\mathbf{elif}\;z \leq 0.76:\\
\;\;\;\;\frac{y\_m \cdot \left(\frac{x}{z} - x\right)}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{x}{\frac{z}{y\_m}}}{z}}{z}\\
\end{array}
\end{array}
if z < -1Initial program 80.8%
sqr-neg80.8%
times-frac96.7%
sqr-neg96.7%
Simplified96.7%
Taylor expanded in z around inf 96.6%
*-commutative96.6%
associate-/r*98.1%
associate-*r/98.2%
Applied egg-rr98.2%
if -1 < z < 0.76000000000000001Initial program 85.6%
sqr-neg85.6%
times-frac84.3%
sqr-neg84.3%
Simplified84.3%
*-commutative84.3%
associate-/r*89.8%
associate-*r/96.3%
Applied egg-rr96.3%
frac-times92.3%
associate-/l*96.7%
associate-*l/96.7%
*-commutative96.7%
Applied egg-rr96.7%
Taylor expanded in z around 0 83.6%
+-commutative83.6%
associate-*l/87.6%
associate-*r*87.6%
neg-mul-187.6%
distribute-rgt-out94.8%
unsub-neg94.8%
Simplified94.8%
if 0.76000000000000001 < z Initial program 83.0%
sqr-neg83.0%
times-frac86.5%
sqr-neg86.5%
Simplified86.5%
Taylor expanded in z around inf 83.5%
*-commutative83.5%
associate-/r*92.8%
associate-*r/94.0%
Applied egg-rr94.0%
associate-*l/96.3%
associate-*r/81.0%
*-commutative81.0%
associate-/l*93.1%
Simplified93.1%
Final simplification95.2%
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
(FPCore (y_s x y_m z)
:precision binary64
(*
y_s
(if (<= z -6.1e-121)
(* (/ y_m (+ z 1.0)) (/ x (* z z)))
(if (<= z 0.76) (/ (* y_m (- (/ x z) x)) z) (/ (/ (/ x (/ z y_m)) z) z)))))y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
double tmp;
if (z <= -6.1e-121) {
tmp = (y_m / (z + 1.0)) * (x / (z * z));
} else if (z <= 0.76) {
tmp = (y_m * ((x / z) - x)) / z;
} else {
tmp = ((x / (z / y_m)) / z) / z;
}
return y_s * tmp;
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
real(8) :: tmp
if (z <= (-6.1d-121)) then
tmp = (y_m / (z + 1.0d0)) * (x / (z * z))
else if (z <= 0.76d0) then
tmp = (y_m * ((x / z) - x)) / z
else
tmp = ((x / (z / y_m)) / z) / z
end if
code = y_s * tmp
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
double tmp;
if (z <= -6.1e-121) {
tmp = (y_m / (z + 1.0)) * (x / (z * z));
} else if (z <= 0.76) {
tmp = (y_m * ((x / z) - x)) / z;
} else {
tmp = ((x / (z / y_m)) / z) / z;
}
return y_s * tmp;
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): tmp = 0 if z <= -6.1e-121: tmp = (y_m / (z + 1.0)) * (x / (z * z)) elif z <= 0.76: tmp = (y_m * ((x / z) - x)) / z else: tmp = ((x / (z / y_m)) / z) / z return y_s * tmp
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) tmp = 0.0 if (z <= -6.1e-121) tmp = Float64(Float64(y_m / Float64(z + 1.0)) * Float64(x / Float64(z * z))); elseif (z <= 0.76) tmp = Float64(Float64(y_m * Float64(Float64(x / z) - x)) / z); else tmp = Float64(Float64(Float64(x / Float64(z / y_m)) / z) / z); end return Float64(y_s * tmp) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp_2 = code(y_s, x, y_m, z)
tmp = 0.0;
if (z <= -6.1e-121)
tmp = (y_m / (z + 1.0)) * (x / (z * z));
elseif (z <= 0.76)
tmp = (y_m * ((x / z) - x)) / z;
else
tmp = ((x / (z / y_m)) / z) / z;
end
tmp_2 = y_s * tmp;
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * If[LessEqual[z, -6.1e-121], N[(N[(y$95$m / N[(z + 1.0), $MachinePrecision]), $MachinePrecision] * N[(x / N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[z, 0.76], N[(N[(y$95$m * N[(N[(x / z), $MachinePrecision] - x), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision], N[(N[(N[(x / N[(z / y$95$m), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision] / z), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;z \leq -6.1 \cdot 10^{-121}:\\
\;\;\;\;\frac{y\_m}{z + 1} \cdot \frac{x}{z \cdot z}\\
\mathbf{elif}\;z \leq 0.76:\\
\;\;\;\;\frac{y\_m \cdot \left(\frac{x}{z} - x\right)}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{x}{\frac{z}{y\_m}}}{z}}{z}\\
\end{array}
\end{array}
if z < -6.09999999999999978e-121Initial program 85.1%
sqr-neg85.1%
times-frac91.6%
sqr-neg91.6%
Simplified91.6%
if -6.09999999999999978e-121 < z < 0.76000000000000001Initial program 83.3%
sqr-neg83.3%
times-frac85.0%
sqr-neg85.0%
Simplified85.0%
*-commutative85.0%
associate-/r*92.1%
associate-*r/97.9%
Applied egg-rr97.9%
frac-times91.9%
associate-/l*98.2%
associate-*l/98.2%
*-commutative98.2%
Applied egg-rr98.2%
Taylor expanded in z around 0 81.4%
+-commutative81.4%
associate-*l/87.4%
associate-*r*87.4%
neg-mul-187.4%
distribute-rgt-out96.7%
unsub-neg96.7%
Simplified96.7%
if 0.76000000000000001 < z Initial program 83.0%
sqr-neg83.0%
times-frac86.5%
sqr-neg86.5%
Simplified86.5%
Taylor expanded in z around inf 83.5%
*-commutative83.5%
associate-/r*92.8%
associate-*r/94.0%
Applied egg-rr94.0%
associate-*l/96.3%
associate-*r/81.0%
*-commutative81.0%
associate-/l*93.1%
Simplified93.1%
Final simplification94.1%
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
(FPCore (y_s x y_m z)
:precision binary64
(*
y_s
(if (<= z -7.5e-34)
(* (/ y_m (* z z)) (/ x (+ z 1.0)))
(if (<= z 0.75) (/ (* y_m (- (/ x z) x)) z) (/ (/ (/ x (/ z y_m)) z) z)))))y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
double tmp;
if (z <= -7.5e-34) {
tmp = (y_m / (z * z)) * (x / (z + 1.0));
} else if (z <= 0.75) {
tmp = (y_m * ((x / z) - x)) / z;
} else {
tmp = ((x / (z / y_m)) / z) / z;
}
return y_s * tmp;
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
real(8) :: tmp
if (z <= (-7.5d-34)) then
tmp = (y_m / (z * z)) * (x / (z + 1.0d0))
else if (z <= 0.75d0) then
tmp = (y_m * ((x / z) - x)) / z
else
tmp = ((x / (z / y_m)) / z) / z
end if
code = y_s * tmp
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
double tmp;
if (z <= -7.5e-34) {
tmp = (y_m / (z * z)) * (x / (z + 1.0));
} else if (z <= 0.75) {
tmp = (y_m * ((x / z) - x)) / z;
} else {
tmp = ((x / (z / y_m)) / z) / z;
}
return y_s * tmp;
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): tmp = 0 if z <= -7.5e-34: tmp = (y_m / (z * z)) * (x / (z + 1.0)) elif z <= 0.75: tmp = (y_m * ((x / z) - x)) / z else: tmp = ((x / (z / y_m)) / z) / z return y_s * tmp
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) tmp = 0.0 if (z <= -7.5e-34) tmp = Float64(Float64(y_m / Float64(z * z)) * Float64(x / Float64(z + 1.0))); elseif (z <= 0.75) tmp = Float64(Float64(y_m * Float64(Float64(x / z) - x)) / z); else tmp = Float64(Float64(Float64(x / Float64(z / y_m)) / z) / z); end return Float64(y_s * tmp) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp_2 = code(y_s, x, y_m, z)
tmp = 0.0;
if (z <= -7.5e-34)
tmp = (y_m / (z * z)) * (x / (z + 1.0));
elseif (z <= 0.75)
tmp = (y_m * ((x / z) - x)) / z;
else
tmp = ((x / (z / y_m)) / z) / z;
end
tmp_2 = y_s * tmp;
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * If[LessEqual[z, -7.5e-34], N[(N[(y$95$m / N[(z * z), $MachinePrecision]), $MachinePrecision] * N[(x / N[(z + 1.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[z, 0.75], N[(N[(y$95$m * N[(N[(x / z), $MachinePrecision] - x), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision], N[(N[(N[(x / N[(z / y$95$m), $MachinePrecision]), $MachinePrecision] / z), $MachinePrecision] / z), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;z \leq -7.5 \cdot 10^{-34}:\\
\;\;\;\;\frac{y\_m}{z \cdot z} \cdot \frac{x}{z + 1}\\
\mathbf{elif}\;z \leq 0.75:\\
\;\;\;\;\frac{y\_m \cdot \left(\frac{x}{z} - x\right)}{z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{x}{\frac{z}{y\_m}}}{z}}{z}\\
\end{array}
\end{array}
if z < -7.5000000000000004e-34Initial program 82.4%
*-commutative82.4%
sqr-neg82.4%
times-frac98.3%
sqr-neg98.3%
Simplified98.3%
if -7.5000000000000004e-34 < z < 0.75Initial program 85.2%
sqr-neg85.2%
times-frac83.0%
sqr-neg83.0%
Simplified83.0%
*-commutative83.0%
associate-/r*89.0%
associate-*r/96.0%
Applied egg-rr96.0%
frac-times92.4%
associate-/l*96.4%
associate-*l/96.4%
*-commutative96.4%
Applied egg-rr96.4%
Taylor expanded in z around 0 83.5%
+-commutative83.5%
associate-*l/87.1%
associate-*r*87.1%
neg-mul-187.1%
distribute-rgt-out95.0%
unsub-neg95.0%
Simplified95.0%
if 0.75 < z Initial program 83.0%
sqr-neg83.0%
times-frac86.5%
sqr-neg86.5%
Simplified86.5%
Taylor expanded in z around inf 83.5%
*-commutative83.5%
associate-/r*92.8%
associate-*r/94.0%
Applied egg-rr94.0%
associate-*l/96.3%
associate-*r/81.0%
*-commutative81.0%
associate-/l*93.1%
Simplified93.1%
Final simplification95.5%
y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) NOTE: x, y_m, and z should be sorted in increasing order before calling this function. (FPCore (y_s x y_m z) :precision binary64 (* y_s (* (/ y_m (+ z 1.0)) (/ (/ x z) z))))
y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
return y_s * ((y_m / (z + 1.0)) * ((x / z) / z));
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
code = y_s * ((y_m / (z + 1.0d0)) * ((x / z) / z))
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
return y_s * ((y_m / (z + 1.0)) * ((x / z) / z));
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): return y_s * ((y_m / (z + 1.0)) * ((x / z) / z))
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) return Float64(y_s * Float64(Float64(y_m / Float64(z + 1.0)) * Float64(Float64(x / z) / z))) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp = code(y_s, x, y_m, z)
tmp = y_s * ((y_m / (z + 1.0)) * ((x / z) / z));
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * N[(N[(y$95$m / N[(z + 1.0), $MachinePrecision]), $MachinePrecision] * N[(N[(x / z), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \left(\frac{y\_m}{z + 1} \cdot \frac{\frac{x}{z}}{z}\right)
\end{array}
Initial program 83.9%
sqr-neg83.9%
times-frac87.7%
sqr-neg87.7%
Simplified87.7%
associate-/r*93.1%
div-inv93.1%
Applied egg-rr93.1%
associate-*r/93.1%
*-rgt-identity93.1%
Simplified93.1%
Final simplification93.1%
y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) NOTE: x, y_m, and z should be sorted in increasing order before calling this function. (FPCore (y_s x y_m z) :precision binary64 (* y_s (* y_m (/ x (* z z)))))
y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
return y_s * (y_m * (x / (z * z)));
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
code = y_s * (y_m * (x / (z * z)))
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
return y_s * (y_m * (x / (z * z)));
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): return y_s * (y_m * (x / (z * z)))
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) return Float64(y_s * Float64(y_m * Float64(x / Float64(z * z)))) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp = code(y_s, x, y_m, z)
tmp = y_s * (y_m * (x / (z * z)));
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * N[(y$95$m * N[(x / N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \left(y\_m \cdot \frac{x}{z \cdot z}\right)
\end{array}
Initial program 83.9%
sqr-neg83.9%
times-frac87.7%
sqr-neg87.7%
Simplified87.7%
Taylor expanded in z around 0 72.9%
Final simplification72.9%
y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) NOTE: x, y_m, and z should be sorted in increasing order before calling this function. (FPCore (y_s x y_m z) :precision binary64 (* y_s (* y_m (/ (/ x z) z))))
y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
return y_s * (y_m * ((x / z) / z));
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
code = y_s * (y_m * ((x / z) / z))
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
return y_s * (y_m * ((x / z) / z));
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): return y_s * (y_m * ((x / z) / z))
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) return Float64(y_s * Float64(y_m * Float64(Float64(x / z) / z))) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp = code(y_s, x, y_m, z)
tmp = y_s * (y_m * ((x / z) / z));
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * N[(y$95$m * N[(N[(x / z), $MachinePrecision] / z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \left(y\_m \cdot \frac{\frac{x}{z}}{z}\right)
\end{array}
Initial program 83.9%
sqr-neg83.9%
times-frac87.7%
sqr-neg87.7%
Simplified87.7%
associate-/r*93.1%
div-inv93.1%
Applied egg-rr93.1%
associate-*r/93.1%
*-rgt-identity93.1%
Simplified93.1%
Taylor expanded in z around 0 74.3%
Final simplification74.3%
y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) NOTE: x, y_m, and z should be sorted in increasing order before calling this function. (FPCore (y_s x y_m z) :precision binary64 (* y_s (* x (/ (- y_m) z))))
y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
return y_s * (x * (-y_m / z));
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
code = y_s * (x * (-y_m / z))
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
return y_s * (x * (-y_m / z));
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): return y_s * (x * (-y_m / z))
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) return Float64(y_s * Float64(x * Float64(Float64(-y_m) / z))) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp = code(y_s, x, y_m, z)
tmp = y_s * (x * (-y_m / z));
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * N[(x * N[((-y$95$m) / z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \left(x \cdot \frac{-y\_m}{z}\right)
\end{array}
Initial program 83.9%
sqr-neg83.9%
times-frac87.7%
sqr-neg87.7%
Simplified87.7%
associate-/r*93.1%
div-inv93.1%
Applied egg-rr93.1%
associate-*r/93.1%
*-rgt-identity93.1%
Simplified93.1%
associate-*l/96.9%
*-commutative96.9%
frac-times89.4%
associate-/l*94.6%
associate-*l/97.0%
associate-/r*92.3%
associate-/l/96.5%
div-inv96.3%
clear-num96.1%
associate-*l/96.2%
*-un-lft-identity96.2%
associate-/r*96.2%
clear-num96.2%
Applied egg-rr96.2%
Taylor expanded in z around 0 66.2%
neg-mul-166.2%
+-commutative66.2%
unsub-neg66.2%
Simplified66.2%
Taylor expanded in z around inf 23.1%
mul-1-neg23.1%
*-commutative23.1%
associate-*l/25.6%
*-commutative25.6%
distribute-rgt-neg-in25.6%
distribute-frac-neg25.6%
Simplified25.6%
Final simplification25.6%
y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) NOTE: x, y_m, and z should be sorted in increasing order before calling this function. (FPCore (y_s x y_m z) :precision binary64 (* y_s (* y_m (/ (- x) z))))
y_m = fabs(y);
y_s = copysign(1.0, y);
assert(x < y_m && y_m < z);
double code(double y_s, double x, double y_m, double z) {
return y_s * (y_m * (-x / z));
}
y_m = abs(y)
y_s = copysign(1.0d0, y)
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
real(8) function code(y_s, x, y_m, z)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z
code = y_s * (y_m * (-x / z))
end function
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
assert x < y_m && y_m < z;
public static double code(double y_s, double x, double y_m, double z) {
return y_s * (y_m * (-x / z));
}
y_m = math.fabs(y) y_s = math.copysign(1.0, y) [x, y_m, z] = sort([x, y_m, z]) def code(y_s, x, y_m, z): return y_s * (y_m * (-x / z))
y_m = abs(y) y_s = copysign(1.0, y) x, y_m, z = sort([x, y_m, z]) function code(y_s, x, y_m, z) return Float64(y_s * Float64(y_m * Float64(Float64(-x) / z))) end
y_m = abs(y);
y_s = sign(y) * abs(1.0);
x, y_m, z = num2cell(sort([x, y_m, z])){:}
function tmp = code(y_s, x, y_m, z)
tmp = y_s * (y_m * (-x / z));
end
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
NOTE: x, y_m, and z should be sorted in increasing order before calling this function.
code[y$95$s_, x_, y$95$m_, z_] := N[(y$95$s * N[(y$95$m * N[((-x) / z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
[x, y_m, z] = \mathsf{sort}([x, y_m, z])\\
\\
y\_s \cdot \left(y\_m \cdot \frac{-x}{z}\right)
\end{array}
Initial program 83.9%
sqr-neg83.9%
times-frac87.7%
sqr-neg87.7%
Simplified87.7%
associate-/r*93.1%
div-inv93.1%
Applied egg-rr93.1%
associate-*r/93.1%
*-rgt-identity93.1%
Simplified93.1%
associate-*l/96.9%
*-commutative96.9%
frac-times89.4%
associate-/l*94.6%
associate-*l/97.0%
associate-/r*92.3%
associate-/l/96.5%
div-inv96.3%
clear-num96.1%
associate-*l/96.2%
*-un-lft-identity96.2%
associate-/r*96.2%
clear-num96.2%
Applied egg-rr96.2%
Taylor expanded in z around 0 66.2%
neg-mul-166.2%
+-commutative66.2%
unsub-neg66.2%
Simplified66.2%
Taylor expanded in z around inf 23.1%
associate-*r/23.1%
mul-1-neg23.1%
distribute-rgt-neg-out23.1%
associate-*l/28.8%
Simplified28.8%
Final simplification28.8%
(FPCore (x y z) :precision binary64 (if (< z 249.6182814532307) (/ (* y (/ x z)) (+ z (* z z))) (/ (* (/ (/ y z) (+ 1.0 z)) x) z)))
double code(double x, double y, double z) {
double tmp;
if (z < 249.6182814532307) {
tmp = (y * (x / z)) / (z + (z * z));
} else {
tmp = (((y / z) / (1.0 + z)) * x) / z;
}
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 (z < 249.6182814532307d0) then
tmp = (y * (x / z)) / (z + (z * z))
else
tmp = (((y / z) / (1.0d0 + z)) * x) / z
end if
code = tmp
end function
public static double code(double x, double y, double z) {
double tmp;
if (z < 249.6182814532307) {
tmp = (y * (x / z)) / (z + (z * z));
} else {
tmp = (((y / z) / (1.0 + z)) * x) / z;
}
return tmp;
}
def code(x, y, z): tmp = 0 if z < 249.6182814532307: tmp = (y * (x / z)) / (z + (z * z)) else: tmp = (((y / z) / (1.0 + z)) * x) / z return tmp
function code(x, y, z) tmp = 0.0 if (z < 249.6182814532307) tmp = Float64(Float64(y * Float64(x / z)) / Float64(z + Float64(z * z))); else tmp = Float64(Float64(Float64(Float64(y / z) / Float64(1.0 + z)) * x) / z); end return tmp end
function tmp_2 = code(x, y, z) tmp = 0.0; if (z < 249.6182814532307) tmp = (y * (x / z)) / (z + (z * z)); else tmp = (((y / z) / (1.0 + z)) * x) / z; end tmp_2 = tmp; end
code[x_, y_, z_] := If[Less[z, 249.6182814532307], N[(N[(y * N[(x / z), $MachinePrecision]), $MachinePrecision] / N[(z + N[(z * z), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(N[(y / z), $MachinePrecision] / N[(1.0 + z), $MachinePrecision]), $MachinePrecision] * x), $MachinePrecision] / z), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;z < 249.6182814532307:\\
\;\;\;\;\frac{y \cdot \frac{x}{z}}{z + z \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{y}{z}}{1 + z} \cdot x}{z}\\
\end{array}
\end{array}
herbie shell --seed 2024034
(FPCore (x y z)
:name "Statistics.Distribution.Beta:$cvariance from math-functions-0.1.5.2"
:precision binary64
:herbie-target
(if (< z 249.6182814532307) (/ (* y (/ x z)) (+ z (* z z))) (/ (* (/ (/ y z) (+ 1.0 z)) x) z))
(/ (* x y) (* (* z z) (+ z 1.0))))