
(FPCore (x y z) :precision binary64 (/ (- (+ (* x x) (* y y)) (* z z)) (* y 2.0)))
double code(double x, double y, double z) {
return (((x * x) + (y * y)) - (z * z)) / (y * 2.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 * x) + (y * y)) - (z * z)) / (y * 2.0d0)
end function
public static double code(double x, double y, double z) {
return (((x * x) + (y * y)) - (z * z)) / (y * 2.0);
}
def code(x, y, z): return (((x * x) + (y * y)) - (z * z)) / (y * 2.0)
function code(x, y, z) return Float64(Float64(Float64(Float64(x * x) + Float64(y * y)) - Float64(z * z)) / Float64(y * 2.0)) end
function tmp = code(x, y, z) tmp = (((x * x) + (y * y)) - (z * z)) / (y * 2.0); end
code[x_, y_, z_] := N[(N[(N[(N[(x * x), $MachinePrecision] + N[(y * y), $MachinePrecision]), $MachinePrecision] - N[(z * z), $MachinePrecision]), $MachinePrecision] / N[(y * 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 11 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z) :precision binary64 (/ (- (+ (* x x) (* y y)) (* z z)) (* y 2.0)))
double code(double x, double y, double z) {
return (((x * x) + (y * y)) - (z * z)) / (y * 2.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 * x) + (y * y)) - (z * z)) / (y * 2.0d0)
end function
public static double code(double x, double y, double z) {
return (((x * x) + (y * y)) - (z * z)) / (y * 2.0);
}
def code(x, y, z): return (((x * x) + (y * y)) - (z * z)) / (y * 2.0)
function code(x, y, z) return Float64(Float64(Float64(Float64(x * x) + Float64(y * y)) - Float64(z * z)) / Float64(y * 2.0)) end
function tmp = code(x, y, z) tmp = (((x * x) + (y * y)) - (z * z)) / (y * 2.0); end
code[x_, y_, z_] := N[(N[(N[(N[(x * x), $MachinePrecision] + N[(y * y), $MachinePrecision]), $MachinePrecision] - N[(z * z), $MachinePrecision]), $MachinePrecision] / N[(y * 2.0), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\frac{\left(x \cdot x + y \cdot y\right) - z \cdot z}{y \cdot 2}
\end{array}
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x y_m z_m)
:precision binary64
(*
y_s
(if (<= (* z_m z_m) 5e+169)
(+
(pow (/ x (sqrt (* 2.0 y_m))) 2.0)
(* (* 0.5 (+ z_m y_m)) (- 1.0 (/ z_m y_m))))
(* (/ (+ z_m x) y_m) (/ (- x z_m) 2.0)))))z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if ((z_m * z_m) <= 5e+169) {
tmp = pow((x / sqrt((2.0 * y_m))), 2.0) + ((0.5 * (z_m + y_m)) * (1.0 - (z_m / y_m)));
} else {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
}
return y_s * tmp;
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if ((z_m * z_m) <= 5d+169) then
tmp = ((x / sqrt((2.0d0 * y_m))) ** 2.0d0) + ((0.5d0 * (z_m + y_m)) * (1.0d0 - (z_m / y_m)))
else
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0d0)
end if
code = y_s * tmp
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if ((z_m * z_m) <= 5e+169) {
tmp = Math.pow((x / Math.sqrt((2.0 * y_m))), 2.0) + ((0.5 * (z_m + y_m)) * (1.0 - (z_m / y_m)));
} else {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
}
return y_s * tmp;
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): tmp = 0 if (z_m * z_m) <= 5e+169: tmp = math.pow((x / math.sqrt((2.0 * y_m))), 2.0) + ((0.5 * (z_m + y_m)) * (1.0 - (z_m / y_m))) else: tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0) return y_s * tmp
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (Float64(z_m * z_m) <= 5e+169) tmp = Float64((Float64(x / sqrt(Float64(2.0 * y_m))) ^ 2.0) + Float64(Float64(0.5 * Float64(z_m + y_m)) * Float64(1.0 - Float64(z_m / y_m)))); else tmp = Float64(Float64(Float64(z_m + x) / y_m) * Float64(Float64(x - z_m) / 2.0)); end return Float64(y_s * tmp) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x, y_m, z_m) tmp = 0.0; if ((z_m * z_m) <= 5e+169) tmp = ((x / sqrt((2.0 * y_m))) ^ 2.0) + ((0.5 * (z_m + y_m)) * (1.0 - (z_m / y_m))); else tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0); end tmp_2 = y_s * tmp; end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[N[(z$95$m * z$95$m), $MachinePrecision], 5e+169], N[(N[Power[N[(x / N[Sqrt[N[(2.0 * y$95$m), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], 2.0], $MachinePrecision] + N[(N[(0.5 * N[(z$95$m + y$95$m), $MachinePrecision]), $MachinePrecision] * N[(1.0 - N[(z$95$m / y$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(z$95$m + x), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(N[(x - z$95$m), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;z_m \cdot z_m \leq 5 \cdot 10^{+169}:\\
\;\;\;\;{\left(\frac{x}{\sqrt{2 \cdot y_m}}\right)}^{2} + \left(0.5 \cdot \left(z_m + y_m\right)\right) \cdot \left(1 - \frac{z_m}{y_m}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{z_m + x}{y_m} \cdot \frac{x - z_m}{2}\\
\end{array}
\end{array}
if (*.f64 z z) < 5.00000000000000017e169Initial program 76.5%
associate--l+76.5%
+-commutative76.5%
sqr-neg76.5%
difference-of-squares76.5%
fma-def76.5%
sub-neg76.5%
sub-neg76.5%
remove-double-neg76.5%
Simplified76.5%
Taylor expanded in x around 0 75.2%
Applied egg-rr50.5%
fma-udef50.5%
unpow250.5%
*-commutative50.5%
*-commutative50.5%
associate-/l*40.6%
associate-*r/50.5%
associate-*r*50.5%
+-commutative50.5%
div-sub50.5%
*-inverses50.5%
Simplified50.5%
if 5.00000000000000017e169 < (*.f64 z z) Initial program 68.4%
flip-+43.6%
clear-num43.6%
pow243.6%
pow243.6%
pow243.6%
pow243.6%
pow-prod-up43.6%
metadata-eval43.6%
pow243.6%
pow243.6%
pow-prod-up43.6%
metadata-eval43.6%
Applied egg-rr43.6%
Taylor expanded in x around inf 71.8%
remove-double-div71.8%
unpow271.8%
Applied egg-rr71.8%
difference-of-squares85.0%
times-frac94.7%
Applied egg-rr94.7%
Final simplification66.7%
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x y_m z_m)
:precision binary64
(*
y_s
(if (<= (* x x) 1e-102)
(* (/ (+ z_m y_m) y_m) (* 0.5 (- y_m z_m)))
(if (<= (* x x) 4e+279)
(/ (fma (- y_m z_m) (+ z_m y_m) (* x x)) (* 2.0 y_m))
(* (/ (+ z_m x) y_m) (/ (- x z_m) 2.0))))))z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if ((x * x) <= 1e-102) {
tmp = ((z_m + y_m) / y_m) * (0.5 * (y_m - z_m));
} else if ((x * x) <= 4e+279) {
tmp = fma((y_m - z_m), (z_m + y_m), (x * x)) / (2.0 * y_m);
} else {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
}
return y_s * tmp;
}
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (Float64(x * x) <= 1e-102) tmp = Float64(Float64(Float64(z_m + y_m) / y_m) * Float64(0.5 * Float64(y_m - z_m))); elseif (Float64(x * x) <= 4e+279) tmp = Float64(fma(Float64(y_m - z_m), Float64(z_m + y_m), Float64(x * x)) / Float64(2.0 * y_m)); else tmp = Float64(Float64(Float64(z_m + x) / y_m) * Float64(Float64(x - z_m) / 2.0)); end return Float64(y_s * tmp) end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[N[(x * x), $MachinePrecision], 1e-102], N[(N[(N[(z$95$m + y$95$m), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(0.5 * N[(y$95$m - z$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(x * x), $MachinePrecision], 4e+279], N[(N[(N[(y$95$m - z$95$m), $MachinePrecision] * N[(z$95$m + y$95$m), $MachinePrecision] + N[(x * x), $MachinePrecision]), $MachinePrecision] / N[(2.0 * y$95$m), $MachinePrecision]), $MachinePrecision], N[(N[(N[(z$95$m + x), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(N[(x - z$95$m), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;x \cdot x \leq 10^{-102}:\\
\;\;\;\;\frac{z_m + y_m}{y_m} \cdot \left(0.5 \cdot \left(y_m - z_m\right)\right)\\
\mathbf{elif}\;x \cdot x \leq 4 \cdot 10^{+279}:\\
\;\;\;\;\frac{\mathsf{fma}\left(y_m - z_m, z_m + y_m, x \cdot x\right)}{2 \cdot y_m}\\
\mathbf{else}:\\
\;\;\;\;\frac{z_m + x}{y_m} \cdot \frac{x - z_m}{2}\\
\end{array}
\end{array}
if (*.f64 x x) < 9.99999999999999933e-103Initial program 73.5%
associate--l+73.5%
+-commutative73.5%
sqr-neg73.5%
difference-of-squares74.6%
fma-def74.6%
sub-neg74.6%
sub-neg74.6%
remove-double-neg74.6%
Simplified74.6%
Taylor expanded in x around 0 72.1%
times-frac95.5%
div-inv95.5%
metadata-eval95.5%
Applied egg-rr95.5%
if 9.99999999999999933e-103 < (*.f64 x x) < 4.00000000000000023e279Initial program 86.1%
associate--l+86.1%
+-commutative86.1%
sqr-neg86.1%
difference-of-squares87.6%
fma-def87.7%
sub-neg87.7%
sub-neg87.7%
remove-double-neg87.7%
Simplified87.7%
if 4.00000000000000023e279 < (*.f64 x x) Initial program 59.7%
flip-+4.3%
clear-num4.3%
pow24.3%
pow24.3%
pow24.3%
pow24.3%
pow-prod-up4.3%
metadata-eval4.3%
pow24.3%
pow24.3%
pow-prod-up4.3%
metadata-eval4.3%
Applied egg-rr4.3%
Taylor expanded in x around inf 61.1%
remove-double-div61.1%
unpow261.1%
Applied egg-rr61.1%
difference-of-squares78.8%
times-frac92.1%
Applied egg-rr92.1%
Final simplification92.2%
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x y_m z_m)
:precision binary64
(*
y_s
(if (<= (* x x) 4e+279)
(* 0.5 (+ (/ (+ z_m y_m) (/ y_m (- y_m z_m))) (/ (pow x 2.0) y_m)))
(* (/ (+ z_m x) y_m) (/ (- x z_m) 2.0)))))z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if ((x * x) <= 4e+279) {
tmp = 0.5 * (((z_m + y_m) / (y_m / (y_m - z_m))) + (pow(x, 2.0) / y_m));
} else {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
}
return y_s * tmp;
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if ((x * x) <= 4d+279) then
tmp = 0.5d0 * (((z_m + y_m) / (y_m / (y_m - z_m))) + ((x ** 2.0d0) / y_m))
else
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0d0)
end if
code = y_s * tmp
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if ((x * x) <= 4e+279) {
tmp = 0.5 * (((z_m + y_m) / (y_m / (y_m - z_m))) + (Math.pow(x, 2.0) / y_m));
} else {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
}
return y_s * tmp;
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): tmp = 0 if (x * x) <= 4e+279: tmp = 0.5 * (((z_m + y_m) / (y_m / (y_m - z_m))) + (math.pow(x, 2.0) / y_m)) else: tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0) return y_s * tmp
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (Float64(x * x) <= 4e+279) tmp = Float64(0.5 * Float64(Float64(Float64(z_m + y_m) / Float64(y_m / Float64(y_m - z_m))) + Float64((x ^ 2.0) / y_m))); else tmp = Float64(Float64(Float64(z_m + x) / y_m) * Float64(Float64(x - z_m) / 2.0)); end return Float64(y_s * tmp) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x, y_m, z_m) tmp = 0.0; if ((x * x) <= 4e+279) tmp = 0.5 * (((z_m + y_m) / (y_m / (y_m - z_m))) + ((x ^ 2.0) / y_m)); else tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0); end tmp_2 = y_s * tmp; end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[N[(x * x), $MachinePrecision], 4e+279], N[(0.5 * N[(N[(N[(z$95$m + y$95$m), $MachinePrecision] / N[(y$95$m / N[(y$95$m - z$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[(N[Power[x, 2.0], $MachinePrecision] / y$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(z$95$m + x), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(N[(x - z$95$m), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;x \cdot x \leq 4 \cdot 10^{+279}:\\
\;\;\;\;0.5 \cdot \left(\frac{z_m + y_m}{\frac{y_m}{y_m - z_m}} + \frac{{x}^{2}}{y_m}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{z_m + x}{y_m} \cdot \frac{x - z_m}{2}\\
\end{array}
\end{array}
if (*.f64 x x) < 4.00000000000000023e279Initial program 78.7%
associate--l+78.7%
+-commutative78.7%
sqr-neg78.7%
difference-of-squares80.0%
fma-def80.0%
sub-neg80.0%
sub-neg80.0%
remove-double-neg80.0%
Simplified80.0%
Taylor expanded in x around 0 76.8%
distribute-lft-out76.8%
associate-/l*95.5%
Applied egg-rr95.5%
if 4.00000000000000023e279 < (*.f64 x x) Initial program 59.7%
flip-+4.3%
clear-num4.3%
pow24.3%
pow24.3%
pow24.3%
pow24.3%
pow-prod-up4.3%
metadata-eval4.3%
pow24.3%
pow24.3%
pow-prod-up4.3%
metadata-eval4.3%
Applied egg-rr4.3%
Taylor expanded in x around inf 61.1%
remove-double-div61.1%
unpow261.1%
Applied egg-rr61.1%
difference-of-squares78.8%
times-frac92.1%
Applied egg-rr92.1%
Final simplification94.5%
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x y_m z_m)
:precision binary64
(*
y_s
(if (<= (* x x) 1e-102)
(* (/ (+ z_m y_m) y_m) (* 0.5 (- y_m z_m)))
(if (<= (* x x) 4e+279)
(/ (- (+ (* x x) (* y_m y_m)) (* z_m z_m)) (* 2.0 y_m))
(* (/ (+ z_m x) y_m) (/ (- x z_m) 2.0))))))z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if ((x * x) <= 1e-102) {
tmp = ((z_m + y_m) / y_m) * (0.5 * (y_m - z_m));
} else if ((x * x) <= 4e+279) {
tmp = (((x * x) + (y_m * y_m)) - (z_m * z_m)) / (2.0 * y_m);
} else {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
}
return y_s * tmp;
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if ((x * x) <= 1d-102) then
tmp = ((z_m + y_m) / y_m) * (0.5d0 * (y_m - z_m))
else if ((x * x) <= 4d+279) then
tmp = (((x * x) + (y_m * y_m)) - (z_m * z_m)) / (2.0d0 * y_m)
else
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0d0)
end if
code = y_s * tmp
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if ((x * x) <= 1e-102) {
tmp = ((z_m + y_m) / y_m) * (0.5 * (y_m - z_m));
} else if ((x * x) <= 4e+279) {
tmp = (((x * x) + (y_m * y_m)) - (z_m * z_m)) / (2.0 * y_m);
} else {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
}
return y_s * tmp;
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): tmp = 0 if (x * x) <= 1e-102: tmp = ((z_m + y_m) / y_m) * (0.5 * (y_m - z_m)) elif (x * x) <= 4e+279: tmp = (((x * x) + (y_m * y_m)) - (z_m * z_m)) / (2.0 * y_m) else: tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0) return y_s * tmp
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (Float64(x * x) <= 1e-102) tmp = Float64(Float64(Float64(z_m + y_m) / y_m) * Float64(0.5 * Float64(y_m - z_m))); elseif (Float64(x * x) <= 4e+279) tmp = Float64(Float64(Float64(Float64(x * x) + Float64(y_m * y_m)) - Float64(z_m * z_m)) / Float64(2.0 * y_m)); else tmp = Float64(Float64(Float64(z_m + x) / y_m) * Float64(Float64(x - z_m) / 2.0)); end return Float64(y_s * tmp) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x, y_m, z_m) tmp = 0.0; if ((x * x) <= 1e-102) tmp = ((z_m + y_m) / y_m) * (0.5 * (y_m - z_m)); elseif ((x * x) <= 4e+279) tmp = (((x * x) + (y_m * y_m)) - (z_m * z_m)) / (2.0 * y_m); else tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0); end tmp_2 = y_s * tmp; end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[N[(x * x), $MachinePrecision], 1e-102], N[(N[(N[(z$95$m + y$95$m), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(0.5 * N[(y$95$m - z$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(x * x), $MachinePrecision], 4e+279], N[(N[(N[(N[(x * x), $MachinePrecision] + N[(y$95$m * y$95$m), $MachinePrecision]), $MachinePrecision] - N[(z$95$m * z$95$m), $MachinePrecision]), $MachinePrecision] / N[(2.0 * y$95$m), $MachinePrecision]), $MachinePrecision], N[(N[(N[(z$95$m + x), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(N[(x - z$95$m), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;x \cdot x \leq 10^{-102}:\\
\;\;\;\;\frac{z_m + y_m}{y_m} \cdot \left(0.5 \cdot \left(y_m - z_m\right)\right)\\
\mathbf{elif}\;x \cdot x \leq 4 \cdot 10^{+279}:\\
\;\;\;\;\frac{\left(x \cdot x + y_m \cdot y_m\right) - z_m \cdot z_m}{2 \cdot y_m}\\
\mathbf{else}:\\
\;\;\;\;\frac{z_m + x}{y_m} \cdot \frac{x - z_m}{2}\\
\end{array}
\end{array}
if (*.f64 x x) < 9.99999999999999933e-103Initial program 73.5%
associate--l+73.5%
+-commutative73.5%
sqr-neg73.5%
difference-of-squares74.6%
fma-def74.6%
sub-neg74.6%
sub-neg74.6%
remove-double-neg74.6%
Simplified74.6%
Taylor expanded in x around 0 72.1%
times-frac95.5%
div-inv95.5%
metadata-eval95.5%
Applied egg-rr95.5%
if 9.99999999999999933e-103 < (*.f64 x x) < 4.00000000000000023e279Initial program 86.1%
if 4.00000000000000023e279 < (*.f64 x x) Initial program 59.7%
flip-+4.3%
clear-num4.3%
pow24.3%
pow24.3%
pow24.3%
pow24.3%
pow-prod-up4.3%
metadata-eval4.3%
pow24.3%
pow24.3%
pow-prod-up4.3%
metadata-eval4.3%
Applied egg-rr4.3%
Taylor expanded in x around inf 61.1%
remove-double-div61.1%
unpow261.1%
Applied egg-rr61.1%
difference-of-squares78.8%
times-frac92.1%
Applied egg-rr92.1%
Final simplification91.8%
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x y_m z_m)
:precision binary64
(*
y_s
(if (<= y_m 3.6e-22)
(* (/ (+ z_m x) y_m) (/ (- x z_m) 2.0))
(if (<= y_m 1.52e+172)
(* (* (+ z_m y_m) (- y_m z_m)) (/ 0.5 y_m))
(* y_m 0.5)))))z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (y_m <= 3.6e-22) {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
} else if (y_m <= 1.52e+172) {
tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5 / y_m);
} else {
tmp = y_m * 0.5;
}
return y_s * tmp;
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if (y_m <= 3.6d-22) then
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0d0)
else if (y_m <= 1.52d+172) then
tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5d0 / y_m)
else
tmp = y_m * 0.5d0
end if
code = y_s * tmp
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (y_m <= 3.6e-22) {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
} else if (y_m <= 1.52e+172) {
tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5 / y_m);
} else {
tmp = y_m * 0.5;
}
return y_s * tmp;
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): tmp = 0 if y_m <= 3.6e-22: tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0) elif y_m <= 1.52e+172: tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5 / y_m) else: tmp = y_m * 0.5 return y_s * tmp
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (y_m <= 3.6e-22) tmp = Float64(Float64(Float64(z_m + x) / y_m) * Float64(Float64(x - z_m) / 2.0)); elseif (y_m <= 1.52e+172) tmp = Float64(Float64(Float64(z_m + y_m) * Float64(y_m - z_m)) * Float64(0.5 / y_m)); else tmp = Float64(y_m * 0.5); end return Float64(y_s * tmp) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x, y_m, z_m) tmp = 0.0; if (y_m <= 3.6e-22) tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0); elseif (y_m <= 1.52e+172) tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5 / y_m); else tmp = y_m * 0.5; end tmp_2 = y_s * tmp; end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[y$95$m, 3.6e-22], N[(N[(N[(z$95$m + x), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(N[(x - z$95$m), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[y$95$m, 1.52e+172], N[(N[(N[(z$95$m + y$95$m), $MachinePrecision] * N[(y$95$m - z$95$m), $MachinePrecision]), $MachinePrecision] * N[(0.5 / y$95$m), $MachinePrecision]), $MachinePrecision], N[(y$95$m * 0.5), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;y_m \leq 3.6 \cdot 10^{-22}:\\
\;\;\;\;\frac{z_m + x}{y_m} \cdot \frac{x - z_m}{2}\\
\mathbf{elif}\;y_m \leq 1.52 \cdot 10^{+172}:\\
\;\;\;\;\left(\left(z_m + y_m\right) \cdot \left(y_m - z_m\right)\right) \cdot \frac{0.5}{y_m}\\
\mathbf{else}:\\
\;\;\;\;y_m \cdot 0.5\\
\end{array}
\end{array}
if y < 3.5999999999999998e-22Initial program 77.9%
flip-+46.1%
clear-num46.1%
pow246.1%
pow246.1%
pow246.1%
pow246.1%
pow-prod-up46.1%
metadata-eval46.1%
pow246.1%
pow246.1%
pow-prod-up46.0%
metadata-eval46.0%
Applied egg-rr46.0%
Taylor expanded in x around inf 67.8%
remove-double-div68.2%
unpow268.2%
Applied egg-rr68.2%
difference-of-squares73.2%
times-frac79.7%
Applied egg-rr79.7%
if 3.5999999999999998e-22 < y < 1.5200000000000001e172Initial program 85.6%
associate--l+85.6%
+-commutative85.6%
sqr-neg85.6%
difference-of-squares85.6%
fma-def85.8%
sub-neg85.8%
sub-neg85.8%
remove-double-neg85.8%
Simplified85.8%
Taylor expanded in x around 0 53.8%
div-inv53.8%
metadata-eval53.8%
div-inv53.8%
clear-num53.8%
Applied egg-rr53.8%
if 1.5200000000000001e172 < y Initial program 4.8%
Taylor expanded in y around inf 69.3%
Final simplification75.5%
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x y_m z_m)
:precision binary64
(*
y_s
(if (<= (* x x) 1e-90)
(* (/ (+ z_m y_m) y_m) (* 0.5 (- y_m z_m)))
(* (/ (+ z_m x) y_m) (/ (- x z_m) 2.0)))))z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if ((x * x) <= 1e-90) {
tmp = ((z_m + y_m) / y_m) * (0.5 * (y_m - z_m));
} else {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
}
return y_s * tmp;
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if ((x * x) <= 1d-90) then
tmp = ((z_m + y_m) / y_m) * (0.5d0 * (y_m - z_m))
else
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0d0)
end if
code = y_s * tmp
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if ((x * x) <= 1e-90) {
tmp = ((z_m + y_m) / y_m) * (0.5 * (y_m - z_m));
} else {
tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0);
}
return y_s * tmp;
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): tmp = 0 if (x * x) <= 1e-90: tmp = ((z_m + y_m) / y_m) * (0.5 * (y_m - z_m)) else: tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0) return y_s * tmp
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (Float64(x * x) <= 1e-90) tmp = Float64(Float64(Float64(z_m + y_m) / y_m) * Float64(0.5 * Float64(y_m - z_m))); else tmp = Float64(Float64(Float64(z_m + x) / y_m) * Float64(Float64(x - z_m) / 2.0)); end return Float64(y_s * tmp) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x, y_m, z_m) tmp = 0.0; if ((x * x) <= 1e-90) tmp = ((z_m + y_m) / y_m) * (0.5 * (y_m - z_m)); else tmp = ((z_m + x) / y_m) * ((x - z_m) / 2.0); end tmp_2 = y_s * tmp; end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[N[(x * x), $MachinePrecision], 1e-90], N[(N[(N[(z$95$m + y$95$m), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(0.5 * N[(y$95$m - z$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[(N[(z$95$m + x), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(N[(x - z$95$m), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;x \cdot x \leq 10^{-90}:\\
\;\;\;\;\frac{z_m + y_m}{y_m} \cdot \left(0.5 \cdot \left(y_m - z_m\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{z_m + x}{y_m} \cdot \frac{x - z_m}{2}\\
\end{array}
\end{array}
if (*.f64 x x) < 9.99999999999999995e-91Initial program 73.4%
associate--l+73.4%
+-commutative73.4%
sqr-neg73.4%
difference-of-squares74.4%
fma-def74.4%
sub-neg74.4%
sub-neg74.4%
remove-double-neg74.4%
Simplified74.4%
Taylor expanded in x around 0 71.2%
times-frac94.8%
div-inv94.8%
metadata-eval94.8%
Applied egg-rr94.8%
if 9.99999999999999995e-91 < (*.f64 x x) Initial program 73.6%
flip-+32.2%
clear-num32.2%
pow232.2%
pow232.2%
pow232.2%
pow232.2%
pow-prod-up32.2%
metadata-eval32.2%
pow232.2%
pow232.2%
pow-prod-up32.2%
metadata-eval32.2%
Applied egg-rr32.2%
Taylor expanded in x around inf 68.8%
remove-double-div68.8%
unpow268.8%
Applied egg-rr68.8%
difference-of-squares77.4%
times-frac85.7%
Applied egg-rr85.7%
Final simplification89.7%
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x y_m z_m)
:precision binary64
(*
y_s
(if (<= x 1.95e+89)
(* (* (+ z_m y_m) (- y_m z_m)) (/ 0.5 y_m))
(/ (* x 0.5) (/ y_m x)))))z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (x <= 1.95e+89) {
tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5 / y_m);
} else {
tmp = (x * 0.5) / (y_m / x);
}
return y_s * tmp;
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if (x <= 1.95d+89) then
tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5d0 / y_m)
else
tmp = (x * 0.5d0) / (y_m / x)
end if
code = y_s * tmp
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (x <= 1.95e+89) {
tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5 / y_m);
} else {
tmp = (x * 0.5) / (y_m / x);
}
return y_s * tmp;
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): tmp = 0 if x <= 1.95e+89: tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5 / y_m) else: tmp = (x * 0.5) / (y_m / x) return y_s * tmp
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (x <= 1.95e+89) tmp = Float64(Float64(Float64(z_m + y_m) * Float64(y_m - z_m)) * Float64(0.5 / y_m)); else tmp = Float64(Float64(x * 0.5) / Float64(y_m / x)); end return Float64(y_s * tmp) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x, y_m, z_m) tmp = 0.0; if (x <= 1.95e+89) tmp = ((z_m + y_m) * (y_m - z_m)) * (0.5 / y_m); else tmp = (x * 0.5) / (y_m / x); end tmp_2 = y_s * tmp; end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[x, 1.95e+89], N[(N[(N[(z$95$m + y$95$m), $MachinePrecision] * N[(y$95$m - z$95$m), $MachinePrecision]), $MachinePrecision] * N[(0.5 / y$95$m), $MachinePrecision]), $MachinePrecision], N[(N[(x * 0.5), $MachinePrecision] / N[(y$95$m / x), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;x \leq 1.95 \cdot 10^{+89}:\\
\;\;\;\;\left(\left(z_m + y_m\right) \cdot \left(y_m - z_m\right)\right) \cdot \frac{0.5}{y_m}\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 0.5}{\frac{y_m}{x}}\\
\end{array}
\end{array}
if x < 1.95000000000000005e89Initial program 75.0%
associate--l+75.0%
+-commutative75.0%
sqr-neg75.0%
difference-of-squares76.7%
fma-def77.6%
sub-neg77.6%
sub-neg77.6%
remove-double-neg77.6%
Simplified77.6%
Taylor expanded in x around 0 56.0%
div-inv56.0%
metadata-eval56.0%
div-inv56.0%
clear-num56.0%
Applied egg-rr56.0%
if 1.95000000000000005e89 < x Initial program 65.1%
Taylor expanded in x around inf 73.5%
unpow273.5%
times-frac85.9%
Applied egg-rr85.9%
*-commutative85.9%
clear-num85.8%
un-div-inv85.9%
div-inv85.9%
metadata-eval85.9%
Applied egg-rr85.9%
Final simplification60.6%
z_m = (fabs.f64 z) y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) (FPCore (y_s x y_m z_m) :precision binary64 (* y_s (if (<= x 7.6e-44) (* y_m 0.5) (* (/ x y_m) (/ x 2.0)))))
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (x <= 7.6e-44) {
tmp = y_m * 0.5;
} else {
tmp = (x / y_m) * (x / 2.0);
}
return y_s * tmp;
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if (x <= 7.6d-44) then
tmp = y_m * 0.5d0
else
tmp = (x / y_m) * (x / 2.0d0)
end if
code = y_s * tmp
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (x <= 7.6e-44) {
tmp = y_m * 0.5;
} else {
tmp = (x / y_m) * (x / 2.0);
}
return y_s * tmp;
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): tmp = 0 if x <= 7.6e-44: tmp = y_m * 0.5 else: tmp = (x / y_m) * (x / 2.0) return y_s * tmp
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (x <= 7.6e-44) tmp = Float64(y_m * 0.5); else tmp = Float64(Float64(x / y_m) * Float64(x / 2.0)); end return Float64(y_s * tmp) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x, y_m, z_m) tmp = 0.0; if (x <= 7.6e-44) tmp = y_m * 0.5; else tmp = (x / y_m) * (x / 2.0); end tmp_2 = y_s * tmp; end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[x, 7.6e-44], N[(y$95$m * 0.5), $MachinePrecision], N[(N[(x / y$95$m), $MachinePrecision] * N[(x / 2.0), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;x \leq 7.6 \cdot 10^{-44}:\\
\;\;\;\;y_m \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y_m} \cdot \frac{x}{2}\\
\end{array}
\end{array}
if x < 7.6000000000000002e-44Initial program 73.8%
Taylor expanded in y around inf 32.7%
if 7.6000000000000002e-44 < x Initial program 72.7%
Taylor expanded in x around inf 54.0%
unpow254.0%
times-frac61.0%
Applied egg-rr61.0%
Final simplification40.2%
z_m = (fabs.f64 z) y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) (FPCore (y_s x y_m z_m) :precision binary64 (* y_s (if (<= x 5.5e-44) (* y_m 0.5) (/ x (* y_m (/ 2.0 x))))))
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (x <= 5.5e-44) {
tmp = y_m * 0.5;
} else {
tmp = x / (y_m * (2.0 / x));
}
return y_s * tmp;
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if (x <= 5.5d-44) then
tmp = y_m * 0.5d0
else
tmp = x / (y_m * (2.0d0 / x))
end if
code = y_s * tmp
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (x <= 5.5e-44) {
tmp = y_m * 0.5;
} else {
tmp = x / (y_m * (2.0 / x));
}
return y_s * tmp;
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): tmp = 0 if x <= 5.5e-44: tmp = y_m * 0.5 else: tmp = x / (y_m * (2.0 / x)) return y_s * tmp
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (x <= 5.5e-44) tmp = Float64(y_m * 0.5); else tmp = Float64(x / Float64(y_m * Float64(2.0 / x))); end return Float64(y_s * tmp) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x, y_m, z_m) tmp = 0.0; if (x <= 5.5e-44) tmp = y_m * 0.5; else tmp = x / (y_m * (2.0 / x)); end tmp_2 = y_s * tmp; end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[x, 5.5e-44], N[(y$95$m * 0.5), $MachinePrecision], N[(x / N[(y$95$m * N[(2.0 / x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;x \leq 5.5 \cdot 10^{-44}:\\
\;\;\;\;y_m \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y_m \cdot \frac{2}{x}}\\
\end{array}
\end{array}
if x < 5.49999999999999993e-44Initial program 73.8%
Taylor expanded in y around inf 32.7%
if 5.49999999999999993e-44 < x Initial program 72.7%
Taylor expanded in x around inf 54.0%
unpow254.0%
times-frac61.0%
Applied egg-rr61.0%
*-commutative61.0%
clear-num61.0%
frac-times61.0%
*-un-lft-identity61.0%
Applied egg-rr61.0%
Final simplification40.2%
z_m = (fabs.f64 z) y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) (FPCore (y_s x y_m z_m) :precision binary64 (* y_s (if (<= x 5.2e-44) (* y_m 0.5) (/ (* x 0.5) (/ y_m x)))))
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (x <= 5.2e-44) {
tmp = y_m * 0.5;
} else {
tmp = (x * 0.5) / (y_m / x);
}
return y_s * tmp;
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if (x <= 5.2d-44) then
tmp = y_m * 0.5d0
else
tmp = (x * 0.5d0) / (y_m / x)
end if
code = y_s * tmp
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
double tmp;
if (x <= 5.2e-44) {
tmp = y_m * 0.5;
} else {
tmp = (x * 0.5) / (y_m / x);
}
return y_s * tmp;
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): tmp = 0 if x <= 5.2e-44: tmp = y_m * 0.5 else: tmp = (x * 0.5) / (y_m / x) return y_s * tmp
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) tmp = 0.0 if (x <= 5.2e-44) tmp = Float64(y_m * 0.5); else tmp = Float64(Float64(x * 0.5) / Float64(y_m / x)); end return Float64(y_s * tmp) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x, y_m, z_m) tmp = 0.0; if (x <= 5.2e-44) tmp = y_m * 0.5; else tmp = (x * 0.5) / (y_m / x); end tmp_2 = y_s * tmp; end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[x, 5.2e-44], N[(y$95$m * 0.5), $MachinePrecision], N[(N[(x * 0.5), $MachinePrecision] / N[(y$95$m / x), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \begin{array}{l}
\mathbf{if}\;x \leq 5.2 \cdot 10^{-44}:\\
\;\;\;\;y_m \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\frac{x \cdot 0.5}{\frac{y_m}{x}}\\
\end{array}
\end{array}
if x < 5.1999999999999996e-44Initial program 73.8%
Taylor expanded in y around inf 32.7%
if 5.1999999999999996e-44 < x Initial program 72.7%
Taylor expanded in x around inf 54.0%
unpow254.0%
times-frac61.0%
Applied egg-rr61.0%
*-commutative61.0%
clear-num60.9%
un-div-inv61.1%
div-inv61.1%
metadata-eval61.1%
Applied egg-rr61.1%
Final simplification40.3%
z_m = (fabs.f64 z) y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) (FPCore (y_s x y_m z_m) :precision binary64 (* y_s (* y_m 0.5)))
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x, double y_m, double z_m) {
return y_s * (y_m * 0.5);
}
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
code = y_s * (y_m * 0.5d0)
end function
z_m = Math.abs(z);
y_m = Math.abs(y);
y_s = Math.copySign(1.0, y);
public static double code(double y_s, double x, double y_m, double z_m) {
return y_s * (y_m * 0.5);
}
z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x, y_m, z_m): return y_s * (y_m * 0.5)
z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x, y_m, z_m) return Float64(y_s * Float64(y_m * 0.5)) end
z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp = code(y_s, x, y_m, z_m) tmp = y_s * (y_m * 0.5); end
z_m = N[Abs[z], $MachinePrecision]
y_m = N[Abs[y], $MachinePrecision]
y_s = N[With[{TMP1 = Abs[1.0], TMP2 = Sign[y]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision]
code[y$95$s_, x_, y$95$m_, z$95$m_] := N[(y$95$s * N[(y$95$m * 0.5), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
y_s \cdot \left(y_m \cdot 0.5\right)
\end{array}
Initial program 73.5%
Taylor expanded in y around inf 28.0%
Final simplification28.0%
(FPCore (x y z) :precision binary64 (- (* y 0.5) (* (* (/ 0.5 y) (+ z x)) (- z x))))
double code(double x, double y, double z) {
return (y * 0.5) - (((0.5 / y) * (z + x)) * (z - x));
}
real(8) function code(x, y, z)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
code = (y * 0.5d0) - (((0.5d0 / y) * (z + x)) * (z - x))
end function
public static double code(double x, double y, double z) {
return (y * 0.5) - (((0.5 / y) * (z + x)) * (z - x));
}
def code(x, y, z): return (y * 0.5) - (((0.5 / y) * (z + x)) * (z - x))
function code(x, y, z) return Float64(Float64(y * 0.5) - Float64(Float64(Float64(0.5 / y) * Float64(z + x)) * Float64(z - x))) end
function tmp = code(x, y, z) tmp = (y * 0.5) - (((0.5 / y) * (z + x)) * (z - x)); end
code[x_, y_, z_] := N[(N[(y * 0.5), $MachinePrecision] - N[(N[(N[(0.5 / y), $MachinePrecision] * N[(z + x), $MachinePrecision]), $MachinePrecision] * N[(z - x), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
y \cdot 0.5 - \left(\frac{0.5}{y} \cdot \left(z + x\right)\right) \cdot \left(z - x\right)
\end{array}
herbie shell --seed 2024019
(FPCore (x y z)
:name "Diagrams.TwoD.Apollonian:initialConfig from diagrams-contrib-1.3.0.5, A"
:precision binary64
:herbie-target
(- (* y 0.5) (* (* (/ 0.5 y) (+ z x)) (- z x)))
(/ (- (+ (* x x) (* y y)) (* z z)) (* y 2.0)))