
(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 7 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}
x_m = (fabs.f64 x)
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x_m y_m z_m)
:precision binary64
(*
y_s
(if (<= y_m 2.35e-75)
(* (/ (+ x_m z_m) y_m) (/ (- x_m z_m) 2.0))
(if (<= y_m 2e+143)
(/ (- (+ (* x_m x_m) (* y_m y_m)) (* z_m z_m)) (* y_m 2.0))
(* 0.5 (- y_m (/ z_m (/ y_m z_m))))))))x_m = fabs(x);
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x_m, double y_m, double z_m) {
double tmp;
if (y_m <= 2.35e-75) {
tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0);
} else if (y_m <= 2e+143) {
tmp = (((x_m * x_m) + (y_m * y_m)) - (z_m * z_m)) / (y_m * 2.0);
} else {
tmp = 0.5 * (y_m - (z_m / (y_m / z_m)));
}
return y_s * tmp;
}
x_m = abs(x)
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x_m, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x_m
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if (y_m <= 2.35d-75) then
tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0d0)
else if (y_m <= 2d+143) then
tmp = (((x_m * x_m) + (y_m * y_m)) - (z_m * z_m)) / (y_m * 2.0d0)
else
tmp = 0.5d0 * (y_m - (z_m / (y_m / z_m)))
end if
code = y_s * tmp
end function
x_m = Math.abs(x);
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_m, double y_m, double z_m) {
double tmp;
if (y_m <= 2.35e-75) {
tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0);
} else if (y_m <= 2e+143) {
tmp = (((x_m * x_m) + (y_m * y_m)) - (z_m * z_m)) / (y_m * 2.0);
} else {
tmp = 0.5 * (y_m - (z_m / (y_m / z_m)));
}
return y_s * tmp;
}
x_m = math.fabs(x) z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x_m, y_m, z_m): tmp = 0 if y_m <= 2.35e-75: tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0) elif y_m <= 2e+143: tmp = (((x_m * x_m) + (y_m * y_m)) - (z_m * z_m)) / (y_m * 2.0) else: tmp = 0.5 * (y_m - (z_m / (y_m / z_m))) return y_s * tmp
x_m = abs(x) z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x_m, y_m, z_m) tmp = 0.0 if (y_m <= 2.35e-75) tmp = Float64(Float64(Float64(x_m + z_m) / y_m) * Float64(Float64(x_m - z_m) / 2.0)); elseif (y_m <= 2e+143) tmp = Float64(Float64(Float64(Float64(x_m * x_m) + Float64(y_m * y_m)) - Float64(z_m * z_m)) / Float64(y_m * 2.0)); else tmp = Float64(0.5 * Float64(y_m - Float64(z_m / Float64(y_m / z_m)))); end return Float64(y_s * tmp) end
x_m = abs(x); z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x_m, y_m, z_m) tmp = 0.0; if (y_m <= 2.35e-75) tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0); elseif (y_m <= 2e+143) tmp = (((x_m * x_m) + (y_m * y_m)) - (z_m * z_m)) / (y_m * 2.0); else tmp = 0.5 * (y_m - (z_m / (y_m / z_m))); end tmp_2 = y_s * tmp; end
x_m = N[Abs[x], $MachinePrecision]
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$95$m_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[y$95$m, 2.35e-75], N[(N[(N[(x$95$m + z$95$m), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(N[(x$95$m - z$95$m), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[y$95$m, 2e+143], N[(N[(N[(N[(x$95$m * x$95$m), $MachinePrecision] + N[(y$95$m * y$95$m), $MachinePrecision]), $MachinePrecision] - N[(z$95$m * z$95$m), $MachinePrecision]), $MachinePrecision] / N[(y$95$m * 2.0), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(y$95$m - N[(z$95$m / N[(y$95$m / z$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]), $MachinePrecision]
\begin{array}{l}
x_m = \left|x\right|
\\
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 2.35 \cdot 10^{-75}:\\
\;\;\;\;\frac{x\_m + z\_m}{y\_m} \cdot \frac{x\_m - z\_m}{2}\\
\mathbf{elif}\;y\_m \leq 2 \cdot 10^{+143}:\\
\;\;\;\;\frac{\left(x\_m \cdot x\_m + y\_m \cdot y\_m\right) - z\_m \cdot z\_m}{y\_m \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(y\_m - \frac{z\_m}{\frac{y\_m}{z\_m}}\right)\\
\end{array}
\end{array}
if y < 2.3499999999999999e-75Initial program 75.1%
add-cube-cbrt74.8%
pow374.8%
add-sqr-sqrt74.8%
pow274.8%
hypot-def74.8%
Applied egg-rr74.8%
Taylor expanded in y around 0 65.9%
unpow1/366.8%
Simplified66.8%
rem-cube-cbrt66.9%
unpow266.9%
Applied egg-rr66.9%
difference-of-squares71.4%
times-frac75.8%
Applied egg-rr75.8%
if 2.3499999999999999e-75 < y < 2e143Initial program 95.0%
if 2e143 < y Initial program 7.7%
Taylor expanded in x around 0 7.7%
div-sub7.7%
unpow27.7%
associate-/l*74.2%
*-inverses74.2%
/-rgt-identity74.2%
Simplified74.2%
pow274.2%
*-un-lft-identity74.2%
times-frac91.5%
Applied egg-rr91.5%
/-rgt-identity91.5%
clear-num91.5%
un-div-inv91.5%
Applied egg-rr91.5%
Final simplification80.7%
x_m = (fabs.f64 x)
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x_m y_m z_m)
:precision binary64
(let* ((t_0 (* 0.5 (- y_m (/ z_m (/ y_m z_m))))))
(*
y_s
(if (<= x_m 62000000.0)
t_0
(if (<= x_m 3550000000000.0)
(/ (* x_m 0.5) (/ y_m x_m))
(if (or (<= x_m 2.35e+60)
(and (not (<= x_m 3.3e+153)) (<= x_m 3.5e+162)))
t_0
(* (/ x_m y_m) (/ x_m 2.0))))))))x_m = fabs(x);
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x_m, double y_m, double z_m) {
double t_0 = 0.5 * (y_m - (z_m / (y_m / z_m)));
double tmp;
if (x_m <= 62000000.0) {
tmp = t_0;
} else if (x_m <= 3550000000000.0) {
tmp = (x_m * 0.5) / (y_m / x_m);
} else if ((x_m <= 2.35e+60) || (!(x_m <= 3.3e+153) && (x_m <= 3.5e+162))) {
tmp = t_0;
} else {
tmp = (x_m / y_m) * (x_m / 2.0);
}
return y_s * tmp;
}
x_m = abs(x)
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x_m, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x_m
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: t_0
real(8) :: tmp
t_0 = 0.5d0 * (y_m - (z_m / (y_m / z_m)))
if (x_m <= 62000000.0d0) then
tmp = t_0
else if (x_m <= 3550000000000.0d0) then
tmp = (x_m * 0.5d0) / (y_m / x_m)
else if ((x_m <= 2.35d+60) .or. (.not. (x_m <= 3.3d+153)) .and. (x_m <= 3.5d+162)) then
tmp = t_0
else
tmp = (x_m / y_m) * (x_m / 2.0d0)
end if
code = y_s * tmp
end function
x_m = Math.abs(x);
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_m, double y_m, double z_m) {
double t_0 = 0.5 * (y_m - (z_m / (y_m / z_m)));
double tmp;
if (x_m <= 62000000.0) {
tmp = t_0;
} else if (x_m <= 3550000000000.0) {
tmp = (x_m * 0.5) / (y_m / x_m);
} else if ((x_m <= 2.35e+60) || (!(x_m <= 3.3e+153) && (x_m <= 3.5e+162))) {
tmp = t_0;
} else {
tmp = (x_m / y_m) * (x_m / 2.0);
}
return y_s * tmp;
}
x_m = math.fabs(x) z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x_m, y_m, z_m): t_0 = 0.5 * (y_m - (z_m / (y_m / z_m))) tmp = 0 if x_m <= 62000000.0: tmp = t_0 elif x_m <= 3550000000000.0: tmp = (x_m * 0.5) / (y_m / x_m) elif (x_m <= 2.35e+60) or (not (x_m <= 3.3e+153) and (x_m <= 3.5e+162)): tmp = t_0 else: tmp = (x_m / y_m) * (x_m / 2.0) return y_s * tmp
x_m = abs(x) z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x_m, y_m, z_m) t_0 = Float64(0.5 * Float64(y_m - Float64(z_m / Float64(y_m / z_m)))) tmp = 0.0 if (x_m <= 62000000.0) tmp = t_0; elseif (x_m <= 3550000000000.0) tmp = Float64(Float64(x_m * 0.5) / Float64(y_m / x_m)); elseif ((x_m <= 2.35e+60) || (!(x_m <= 3.3e+153) && (x_m <= 3.5e+162))) tmp = t_0; else tmp = Float64(Float64(x_m / y_m) * Float64(x_m / 2.0)); end return Float64(y_s * tmp) end
x_m = abs(x); z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x_m, y_m, z_m) t_0 = 0.5 * (y_m - (z_m / (y_m / z_m))); tmp = 0.0; if (x_m <= 62000000.0) tmp = t_0; elseif (x_m <= 3550000000000.0) tmp = (x_m * 0.5) / (y_m / x_m); elseif ((x_m <= 2.35e+60) || (~((x_m <= 3.3e+153)) && (x_m <= 3.5e+162))) tmp = t_0; else tmp = (x_m / y_m) * (x_m / 2.0); end tmp_2 = y_s * tmp; end
x_m = N[Abs[x], $MachinePrecision]
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$95$m_, y$95$m_, z$95$m_] := Block[{t$95$0 = N[(0.5 * N[(y$95$m - N[(z$95$m / N[(y$95$m / z$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(y$95$s * If[LessEqual[x$95$m, 62000000.0], t$95$0, If[LessEqual[x$95$m, 3550000000000.0], N[(N[(x$95$m * 0.5), $MachinePrecision] / N[(y$95$m / x$95$m), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[x$95$m, 2.35e+60], And[N[Not[LessEqual[x$95$m, 3.3e+153]], $MachinePrecision], LessEqual[x$95$m, 3.5e+162]]], t$95$0, N[(N[(x$95$m / y$95$m), $MachinePrecision] * N[(x$95$m / 2.0), $MachinePrecision]), $MachinePrecision]]]]), $MachinePrecision]]
\begin{array}{l}
x_m = \left|x\right|
\\
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(y\_m - \frac{z\_m}{\frac{y\_m}{z\_m}}\right)\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;x\_m \leq 62000000:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;x\_m \leq 3550000000000:\\
\;\;\;\;\frac{x\_m \cdot 0.5}{\frac{y\_m}{x\_m}}\\
\mathbf{elif}\;x\_m \leq 2.35 \cdot 10^{+60} \lor \neg \left(x\_m \leq 3.3 \cdot 10^{+153}\right) \land x\_m \leq 3.5 \cdot 10^{+162}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;\frac{x\_m}{y\_m} \cdot \frac{x\_m}{2}\\
\end{array}
\end{array}
\end{array}
if x < 6.2e7 or 3.55e12 < x < 2.3499999999999999e60 or 3.29999999999999994e153 < x < 3.50000000000000018e162Initial program 70.1%
Taylor expanded in x around 0 46.6%
div-sub46.6%
unpow246.6%
associate-/l*65.4%
*-inverses65.4%
/-rgt-identity65.4%
Simplified65.4%
pow265.4%
*-un-lft-identity65.4%
times-frac72.1%
Applied egg-rr72.1%
/-rgt-identity72.1%
clear-num72.1%
un-div-inv72.1%
Applied egg-rr72.1%
if 6.2e7 < x < 3.55e12Initial program 99.2%
clear-num99.2%
inv-pow99.2%
*-commutative99.2%
*-un-lft-identity99.2%
times-frac99.2%
metadata-eval99.2%
add-sqr-sqrt99.2%
pow299.2%
hypot-def99.2%
pow299.2%
Applied egg-rr99.2%
Taylor expanded in x around inf 99.2%
unpow-199.2%
associate-*r/99.2%
*-commutative99.2%
clear-num99.2%
rem-cube-cbrt99.2%
sqr-pow98.8%
times-frac98.8%
sqrt-pow1100.0%
rem-cube-cbrt100.0%
unpow2100.0%
sqrt-prod100.0%
add-sqr-sqrt100.0%
sqrt-pow199.2%
rem-cube-cbrt99.2%
unpow299.2%
sqrt-prod99.2%
add-sqr-sqrt99.2%
Applied egg-rr99.2%
*-commutative99.2%
clear-num99.2%
un-div-inv100.0%
div-inv100.0%
metadata-eval100.0%
Applied egg-rr100.0%
if 2.3499999999999999e60 < x < 3.29999999999999994e153 or 3.50000000000000018e162 < x Initial program 60.0%
clear-num59.9%
inv-pow59.9%
*-commutative59.9%
*-un-lft-identity59.9%
times-frac59.9%
metadata-eval59.9%
add-sqr-sqrt59.9%
pow259.9%
hypot-def59.9%
pow259.9%
Applied egg-rr59.9%
Taylor expanded in x around inf 56.0%
unpow-156.0%
associate-*r/56.0%
*-commutative56.0%
clear-num56.1%
rem-cube-cbrt56.0%
sqr-pow56.0%
times-frac56.0%
sqrt-pow156.0%
rem-cube-cbrt56.0%
unpow256.0%
sqrt-prod56.0%
add-sqr-sqrt56.0%
sqrt-pow156.0%
rem-cube-cbrt56.1%
unpow256.1%
sqrt-prod60.1%
add-sqr-sqrt60.1%
Applied egg-rr60.1%
Final simplification70.4%
x_m = (fabs.f64 x)
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x_m y_m z_m)
:precision binary64
(let* ((t_0 (* 0.5 (- y_m (/ z_m (/ y_m z_m))))))
(*
y_s
(if (<= x_m 62000000.0)
t_0
(if (<= x_m 3550000000000.0)
(/ (* x_m 0.5) (/ y_m x_m))
(if (<= x_m 1.65e+60)
(* 0.5 (- y_m (* z_m (/ z_m y_m))))
(if (or (<= x_m 3.3e+153) (not (<= x_m 1.35e+160)))
(* (/ x_m y_m) (/ x_m 2.0))
t_0)))))))x_m = fabs(x);
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x_m, double y_m, double z_m) {
double t_0 = 0.5 * (y_m - (z_m / (y_m / z_m)));
double tmp;
if (x_m <= 62000000.0) {
tmp = t_0;
} else if (x_m <= 3550000000000.0) {
tmp = (x_m * 0.5) / (y_m / x_m);
} else if (x_m <= 1.65e+60) {
tmp = 0.5 * (y_m - (z_m * (z_m / y_m)));
} else if ((x_m <= 3.3e+153) || !(x_m <= 1.35e+160)) {
tmp = (x_m / y_m) * (x_m / 2.0);
} else {
tmp = t_0;
}
return y_s * tmp;
}
x_m = abs(x)
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x_m, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x_m
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: t_0
real(8) :: tmp
t_0 = 0.5d0 * (y_m - (z_m / (y_m / z_m)))
if (x_m <= 62000000.0d0) then
tmp = t_0
else if (x_m <= 3550000000000.0d0) then
tmp = (x_m * 0.5d0) / (y_m / x_m)
else if (x_m <= 1.65d+60) then
tmp = 0.5d0 * (y_m - (z_m * (z_m / y_m)))
else if ((x_m <= 3.3d+153) .or. (.not. (x_m <= 1.35d+160))) then
tmp = (x_m / y_m) * (x_m / 2.0d0)
else
tmp = t_0
end if
code = y_s * tmp
end function
x_m = Math.abs(x);
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_m, double y_m, double z_m) {
double t_0 = 0.5 * (y_m - (z_m / (y_m / z_m)));
double tmp;
if (x_m <= 62000000.0) {
tmp = t_0;
} else if (x_m <= 3550000000000.0) {
tmp = (x_m * 0.5) / (y_m / x_m);
} else if (x_m <= 1.65e+60) {
tmp = 0.5 * (y_m - (z_m * (z_m / y_m)));
} else if ((x_m <= 3.3e+153) || !(x_m <= 1.35e+160)) {
tmp = (x_m / y_m) * (x_m / 2.0);
} else {
tmp = t_0;
}
return y_s * tmp;
}
x_m = math.fabs(x) z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x_m, y_m, z_m): t_0 = 0.5 * (y_m - (z_m / (y_m / z_m))) tmp = 0 if x_m <= 62000000.0: tmp = t_0 elif x_m <= 3550000000000.0: tmp = (x_m * 0.5) / (y_m / x_m) elif x_m <= 1.65e+60: tmp = 0.5 * (y_m - (z_m * (z_m / y_m))) elif (x_m <= 3.3e+153) or not (x_m <= 1.35e+160): tmp = (x_m / y_m) * (x_m / 2.0) else: tmp = t_0 return y_s * tmp
x_m = abs(x) z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x_m, y_m, z_m) t_0 = Float64(0.5 * Float64(y_m - Float64(z_m / Float64(y_m / z_m)))) tmp = 0.0 if (x_m <= 62000000.0) tmp = t_0; elseif (x_m <= 3550000000000.0) tmp = Float64(Float64(x_m * 0.5) / Float64(y_m / x_m)); elseif (x_m <= 1.65e+60) tmp = Float64(0.5 * Float64(y_m - Float64(z_m * Float64(z_m / y_m)))); elseif ((x_m <= 3.3e+153) || !(x_m <= 1.35e+160)) tmp = Float64(Float64(x_m / y_m) * Float64(x_m / 2.0)); else tmp = t_0; end return Float64(y_s * tmp) end
x_m = abs(x); z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x_m, y_m, z_m) t_0 = 0.5 * (y_m - (z_m / (y_m / z_m))); tmp = 0.0; if (x_m <= 62000000.0) tmp = t_0; elseif (x_m <= 3550000000000.0) tmp = (x_m * 0.5) / (y_m / x_m); elseif (x_m <= 1.65e+60) tmp = 0.5 * (y_m - (z_m * (z_m / y_m))); elseif ((x_m <= 3.3e+153) || ~((x_m <= 1.35e+160))) tmp = (x_m / y_m) * (x_m / 2.0); else tmp = t_0; end tmp_2 = y_s * tmp; end
x_m = N[Abs[x], $MachinePrecision]
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$95$m_, y$95$m_, z$95$m_] := Block[{t$95$0 = N[(0.5 * N[(y$95$m - N[(z$95$m / N[(y$95$m / z$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, N[(y$95$s * If[LessEqual[x$95$m, 62000000.0], t$95$0, If[LessEqual[x$95$m, 3550000000000.0], N[(N[(x$95$m * 0.5), $MachinePrecision] / N[(y$95$m / x$95$m), $MachinePrecision]), $MachinePrecision], If[LessEqual[x$95$m, 1.65e+60], N[(0.5 * N[(y$95$m - N[(z$95$m * N[(z$95$m / y$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[x$95$m, 3.3e+153], N[Not[LessEqual[x$95$m, 1.35e+160]], $MachinePrecision]], N[(N[(x$95$m / y$95$m), $MachinePrecision] * N[(x$95$m / 2.0), $MachinePrecision]), $MachinePrecision], t$95$0]]]]), $MachinePrecision]]
\begin{array}{l}
x_m = \left|x\right|
\\
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
\begin{array}{l}
t_0 := 0.5 \cdot \left(y\_m - \frac{z\_m}{\frac{y\_m}{z\_m}}\right)\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;x\_m \leq 62000000:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;x\_m \leq 3550000000000:\\
\;\;\;\;\frac{x\_m \cdot 0.5}{\frac{y\_m}{x\_m}}\\
\mathbf{elif}\;x\_m \leq 1.65 \cdot 10^{+60}:\\
\;\;\;\;0.5 \cdot \left(y\_m - z\_m \cdot \frac{z\_m}{y\_m}\right)\\
\mathbf{elif}\;x\_m \leq 3.3 \cdot 10^{+153} \lor \neg \left(x\_m \leq 1.35 \cdot 10^{+160}\right):\\
\;\;\;\;\frac{x\_m}{y\_m} \cdot \frac{x\_m}{2}\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
\end{array}
if x < 6.2e7 or 3.29999999999999994e153 < x < 1.35e160Initial program 69.1%
Taylor expanded in x around 0 46.9%
div-sub46.9%
unpow246.9%
associate-/l*66.1%
*-inverses66.1%
/-rgt-identity66.1%
Simplified66.1%
pow266.1%
*-un-lft-identity66.1%
times-frac73.2%
Applied egg-rr73.2%
/-rgt-identity73.2%
clear-num73.2%
un-div-inv73.2%
Applied egg-rr73.2%
if 6.2e7 < x < 3.55e12Initial program 99.2%
clear-num99.2%
inv-pow99.2%
*-commutative99.2%
*-un-lft-identity99.2%
times-frac99.2%
metadata-eval99.2%
add-sqr-sqrt99.2%
pow299.2%
hypot-def99.2%
pow299.2%
Applied egg-rr99.2%
Taylor expanded in x around inf 99.2%
unpow-199.2%
associate-*r/99.2%
*-commutative99.2%
clear-num99.2%
rem-cube-cbrt99.2%
sqr-pow98.8%
times-frac98.8%
sqrt-pow1100.0%
rem-cube-cbrt100.0%
unpow2100.0%
sqrt-prod100.0%
add-sqr-sqrt100.0%
sqrt-pow199.2%
rem-cube-cbrt99.2%
unpow299.2%
sqrt-prod99.2%
add-sqr-sqrt99.2%
Applied egg-rr99.2%
*-commutative99.2%
clear-num99.2%
un-div-inv100.0%
div-inv100.0%
metadata-eval100.0%
Applied egg-rr100.0%
if 3.55e12 < x < 1.6499999999999999e60Initial program 90.5%
Taylor expanded in x around 0 41.4%
div-sub41.4%
unpow241.4%
associate-/l*50.9%
*-inverses50.9%
/-rgt-identity50.9%
Simplified50.9%
pow250.9%
*-un-lft-identity50.9%
times-frac50.9%
Applied egg-rr50.9%
if 1.6499999999999999e60 < x < 3.29999999999999994e153 or 1.35e160 < x Initial program 60.0%
clear-num59.9%
inv-pow59.9%
*-commutative59.9%
*-un-lft-identity59.9%
times-frac59.9%
metadata-eval59.9%
add-sqr-sqrt59.9%
pow259.9%
hypot-def59.9%
pow259.9%
Applied egg-rr59.9%
Taylor expanded in x around inf 56.0%
unpow-156.0%
associate-*r/56.0%
*-commutative56.0%
clear-num56.1%
rem-cube-cbrt56.0%
sqr-pow56.0%
times-frac56.0%
sqrt-pow156.0%
rem-cube-cbrt56.0%
unpow256.0%
sqrt-prod56.0%
add-sqr-sqrt56.0%
sqrt-pow156.0%
rem-cube-cbrt56.1%
unpow256.1%
sqrt-prod60.1%
add-sqr-sqrt60.1%
Applied egg-rr60.1%
Final simplification70.4%
x_m = (fabs.f64 x)
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x_m y_m z_m)
:precision binary64
(let* ((t_0 (* (/ x_m y_m) (/ x_m 2.0))))
(*
y_s
(if (<= z_m 1.25e-216)
t_0
(if (<= z_m 1.02e-156)
(* y_m 0.5)
(if (<= z_m 3.55e-107)
t_0
(if (<= z_m 9.2e-63)
(* y_m 0.5)
(if (<= z_m 9.6e+140) t_0 (* z_m (* z_m (/ -0.5 y_m)))))))))))x_m = fabs(x);
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x_m, double y_m, double z_m) {
double t_0 = (x_m / y_m) * (x_m / 2.0);
double tmp;
if (z_m <= 1.25e-216) {
tmp = t_0;
} else if (z_m <= 1.02e-156) {
tmp = y_m * 0.5;
} else if (z_m <= 3.55e-107) {
tmp = t_0;
} else if (z_m <= 9.2e-63) {
tmp = y_m * 0.5;
} else if (z_m <= 9.6e+140) {
tmp = t_0;
} else {
tmp = z_m * (z_m * (-0.5 / y_m));
}
return y_s * tmp;
}
x_m = abs(x)
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x_m, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x_m
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: t_0
real(8) :: tmp
t_0 = (x_m / y_m) * (x_m / 2.0d0)
if (z_m <= 1.25d-216) then
tmp = t_0
else if (z_m <= 1.02d-156) then
tmp = y_m * 0.5d0
else if (z_m <= 3.55d-107) then
tmp = t_0
else if (z_m <= 9.2d-63) then
tmp = y_m * 0.5d0
else if (z_m <= 9.6d+140) then
tmp = t_0
else
tmp = z_m * (z_m * ((-0.5d0) / y_m))
end if
code = y_s * tmp
end function
x_m = Math.abs(x);
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_m, double y_m, double z_m) {
double t_0 = (x_m / y_m) * (x_m / 2.0);
double tmp;
if (z_m <= 1.25e-216) {
tmp = t_0;
} else if (z_m <= 1.02e-156) {
tmp = y_m * 0.5;
} else if (z_m <= 3.55e-107) {
tmp = t_0;
} else if (z_m <= 9.2e-63) {
tmp = y_m * 0.5;
} else if (z_m <= 9.6e+140) {
tmp = t_0;
} else {
tmp = z_m * (z_m * (-0.5 / y_m));
}
return y_s * tmp;
}
x_m = math.fabs(x) z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x_m, y_m, z_m): t_0 = (x_m / y_m) * (x_m / 2.0) tmp = 0 if z_m <= 1.25e-216: tmp = t_0 elif z_m <= 1.02e-156: tmp = y_m * 0.5 elif z_m <= 3.55e-107: tmp = t_0 elif z_m <= 9.2e-63: tmp = y_m * 0.5 elif z_m <= 9.6e+140: tmp = t_0 else: tmp = z_m * (z_m * (-0.5 / y_m)) return y_s * tmp
x_m = abs(x) z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x_m, y_m, z_m) t_0 = Float64(Float64(x_m / y_m) * Float64(x_m / 2.0)) tmp = 0.0 if (z_m <= 1.25e-216) tmp = t_0; elseif (z_m <= 1.02e-156) tmp = Float64(y_m * 0.5); elseif (z_m <= 3.55e-107) tmp = t_0; elseif (z_m <= 9.2e-63) tmp = Float64(y_m * 0.5); elseif (z_m <= 9.6e+140) tmp = t_0; else tmp = Float64(z_m * Float64(z_m * Float64(-0.5 / y_m))); end return Float64(y_s * tmp) end
x_m = abs(x); z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x_m, y_m, z_m) t_0 = (x_m / y_m) * (x_m / 2.0); tmp = 0.0; if (z_m <= 1.25e-216) tmp = t_0; elseif (z_m <= 1.02e-156) tmp = y_m * 0.5; elseif (z_m <= 3.55e-107) tmp = t_0; elseif (z_m <= 9.2e-63) tmp = y_m * 0.5; elseif (z_m <= 9.6e+140) tmp = t_0; else tmp = z_m * (z_m * (-0.5 / y_m)); end tmp_2 = y_s * tmp; end
x_m = N[Abs[x], $MachinePrecision]
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$95$m_, y$95$m_, z$95$m_] := Block[{t$95$0 = N[(N[(x$95$m / y$95$m), $MachinePrecision] * N[(x$95$m / 2.0), $MachinePrecision]), $MachinePrecision]}, N[(y$95$s * If[LessEqual[z$95$m, 1.25e-216], t$95$0, If[LessEqual[z$95$m, 1.02e-156], N[(y$95$m * 0.5), $MachinePrecision], If[LessEqual[z$95$m, 3.55e-107], t$95$0, If[LessEqual[z$95$m, 9.2e-63], N[(y$95$m * 0.5), $MachinePrecision], If[LessEqual[z$95$m, 9.6e+140], t$95$0, N[(z$95$m * N[(z$95$m * N[(-0.5 / y$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]]), $MachinePrecision]]
\begin{array}{l}
x_m = \left|x\right|
\\
z_m = \left|z\right|
\\
y_m = \left|y\right|
\\
y_s = \mathsf{copysign}\left(1, y\right)
\\
\begin{array}{l}
t_0 := \frac{x\_m}{y\_m} \cdot \frac{x\_m}{2}\\
y\_s \cdot \begin{array}{l}
\mathbf{if}\;z\_m \leq 1.25 \cdot 10^{-216}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;z\_m \leq 1.02 \cdot 10^{-156}:\\
\;\;\;\;y\_m \cdot 0.5\\
\mathbf{elif}\;z\_m \leq 3.55 \cdot 10^{-107}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;z\_m \leq 9.2 \cdot 10^{-63}:\\
\;\;\;\;y\_m \cdot 0.5\\
\mathbf{elif}\;z\_m \leq 9.6 \cdot 10^{+140}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;z\_m \cdot \left(z\_m \cdot \frac{-0.5}{y\_m}\right)\\
\end{array}
\end{array}
\end{array}
if z < 1.25000000000000005e-216 or 1.02e-156 < z < 3.5499999999999998e-107 or 9.2e-63 < z < 9.5999999999999999e140Initial program 72.1%
clear-num72.0%
inv-pow72.0%
*-commutative72.0%
*-un-lft-identity72.0%
times-frac72.0%
metadata-eval72.0%
add-sqr-sqrt72.0%
pow272.0%
hypot-def72.0%
pow272.0%
Applied egg-rr72.0%
Taylor expanded in x around inf 38.0%
unpow-138.0%
associate-*r/38.0%
*-commutative38.0%
clear-num38.0%
rem-cube-cbrt37.9%
sqr-pow37.9%
times-frac37.9%
sqrt-pow137.9%
rem-cube-cbrt37.9%
unpow237.9%
sqrt-prod16.7%
add-sqr-sqrt20.0%
sqrt-pow120.0%
rem-cube-cbrt20.0%
unpow220.0%
sqrt-prod18.0%
add-sqr-sqrt40.7%
Applied egg-rr40.7%
if 1.25000000000000005e-216 < z < 1.02e-156 or 3.5499999999999998e-107 < z < 9.2e-63Initial program 51.7%
Taylor expanded in y around inf 65.7%
if 9.5999999999999999e140 < z Initial program 61.4%
Taylor expanded in z around inf 75.3%
associate-*r/75.3%
associate-/l*75.3%
Simplified75.3%
associate-/r/75.3%
pow275.3%
associate-*r*77.8%
Applied egg-rr77.8%
Final simplification48.1%
x_m = (fabs.f64 x)
z_m = (fabs.f64 z)
y_m = (fabs.f64 y)
y_s = (copysign.f64 1 y)
(FPCore (y_s x_m y_m z_m)
:precision binary64
(*
y_s
(if (<= y_m 1.52e+29)
(* (/ (+ x_m z_m) y_m) (/ (- x_m z_m) 2.0))
(* 0.5 (- y_m (/ z_m (/ y_m z_m)))))))x_m = fabs(x);
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x_m, double y_m, double z_m) {
double tmp;
if (y_m <= 1.52e+29) {
tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0);
} else {
tmp = 0.5 * (y_m - (z_m / (y_m / z_m)));
}
return y_s * tmp;
}
x_m = abs(x)
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x_m, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x_m
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if (y_m <= 1.52d+29) then
tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0d0)
else
tmp = 0.5d0 * (y_m - (z_m / (y_m / z_m)))
end if
code = y_s * tmp
end function
x_m = Math.abs(x);
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_m, double y_m, double z_m) {
double tmp;
if (y_m <= 1.52e+29) {
tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0);
} else {
tmp = 0.5 * (y_m - (z_m / (y_m / z_m)));
}
return y_s * tmp;
}
x_m = math.fabs(x) z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x_m, y_m, z_m): tmp = 0 if y_m <= 1.52e+29: tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0) else: tmp = 0.5 * (y_m - (z_m / (y_m / z_m))) return y_s * tmp
x_m = abs(x) z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x_m, y_m, z_m) tmp = 0.0 if (y_m <= 1.52e+29) tmp = Float64(Float64(Float64(x_m + z_m) / y_m) * Float64(Float64(x_m - z_m) / 2.0)); else tmp = Float64(0.5 * Float64(y_m - Float64(z_m / Float64(y_m / z_m)))); end return Float64(y_s * tmp) end
x_m = abs(x); z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x_m, y_m, z_m) tmp = 0.0; if (y_m <= 1.52e+29) tmp = ((x_m + z_m) / y_m) * ((x_m - z_m) / 2.0); else tmp = 0.5 * (y_m - (z_m / (y_m / z_m))); end tmp_2 = y_s * tmp; end
x_m = N[Abs[x], $MachinePrecision]
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$95$m_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[y$95$m, 1.52e+29], N[(N[(N[(x$95$m + z$95$m), $MachinePrecision] / y$95$m), $MachinePrecision] * N[(N[(x$95$m - z$95$m), $MachinePrecision] / 2.0), $MachinePrecision]), $MachinePrecision], N[(0.5 * N[(y$95$m - N[(z$95$m / N[(y$95$m / z$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
x_m = \left|x\right|
\\
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 1.52 \cdot 10^{+29}:\\
\;\;\;\;\frac{x\_m + z\_m}{y\_m} \cdot \frac{x\_m - z\_m}{2}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(y\_m - \frac{z\_m}{\frac{y\_m}{z\_m}}\right)\\
\end{array}
\end{array}
if y < 1.52e29Initial program 77.3%
add-cube-cbrt77.0%
pow377.0%
add-sqr-sqrt77.0%
pow277.0%
hypot-def77.0%
Applied egg-rr77.0%
Taylor expanded in y around 0 67.4%
unpow1/368.3%
Simplified68.3%
rem-cube-cbrt68.4%
unpow268.4%
Applied egg-rr68.4%
difference-of-squares72.5%
times-frac76.5%
Applied egg-rr76.5%
if 1.52e29 < y Initial program 36.8%
Taylor expanded in x around 0 29.1%
div-sub29.1%
unpow229.1%
associate-/l*72.2%
*-inverses72.2%
/-rgt-identity72.2%
Simplified72.2%
pow272.2%
*-un-lft-identity72.2%
times-frac85.1%
Applied egg-rr85.1%
/-rgt-identity85.1%
clear-num85.1%
un-div-inv85.1%
Applied egg-rr85.1%
Final simplification78.3%
x_m = (fabs.f64 x) z_m = (fabs.f64 z) y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) (FPCore (y_s x_m y_m z_m) :precision binary64 (* y_s (if (<= z_m 3.5e+115) (* y_m 0.5) (* z_m (* z_m (/ -0.5 y_m))))))
x_m = fabs(x);
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x_m, double y_m, double z_m) {
double tmp;
if (z_m <= 3.5e+115) {
tmp = y_m * 0.5;
} else {
tmp = z_m * (z_m * (-0.5 / y_m));
}
return y_s * tmp;
}
x_m = abs(x)
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x_m, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x_m
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
real(8) :: tmp
if (z_m <= 3.5d+115) then
tmp = y_m * 0.5d0
else
tmp = z_m * (z_m * ((-0.5d0) / y_m))
end if
code = y_s * tmp
end function
x_m = Math.abs(x);
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_m, double y_m, double z_m) {
double tmp;
if (z_m <= 3.5e+115) {
tmp = y_m * 0.5;
} else {
tmp = z_m * (z_m * (-0.5 / y_m));
}
return y_s * tmp;
}
x_m = math.fabs(x) z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x_m, y_m, z_m): tmp = 0 if z_m <= 3.5e+115: tmp = y_m * 0.5 else: tmp = z_m * (z_m * (-0.5 / y_m)) return y_s * tmp
x_m = abs(x) z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x_m, y_m, z_m) tmp = 0.0 if (z_m <= 3.5e+115) tmp = Float64(y_m * 0.5); else tmp = Float64(z_m * Float64(z_m * Float64(-0.5 / y_m))); end return Float64(y_s * tmp) end
x_m = abs(x); z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp_2 = code(y_s, x_m, y_m, z_m) tmp = 0.0; if (z_m <= 3.5e+115) tmp = y_m * 0.5; else tmp = z_m * (z_m * (-0.5 / y_m)); end tmp_2 = y_s * tmp; end
x_m = N[Abs[x], $MachinePrecision]
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$95$m_, y$95$m_, z$95$m_] := N[(y$95$s * If[LessEqual[z$95$m, 3.5e+115], N[(y$95$m * 0.5), $MachinePrecision], N[(z$95$m * N[(z$95$m * N[(-0.5 / y$95$m), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\begin{array}{l}
x_m = \left|x\right|
\\
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 \leq 3.5 \cdot 10^{+115}:\\
\;\;\;\;y\_m \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;z\_m \cdot \left(z\_m \cdot \frac{-0.5}{y\_m}\right)\\
\end{array}
\end{array}
if z < 3.50000000000000005e115Initial program 70.2%
Taylor expanded in y around inf 36.7%
if 3.50000000000000005e115 < z Initial program 59.9%
Taylor expanded in z around inf 73.3%
associate-*r/73.3%
associate-/l*73.3%
Simplified73.3%
associate-/r/73.3%
pow273.3%
associate-*r*75.8%
Applied egg-rr75.8%
Final simplification42.3%
x_m = (fabs.f64 x) z_m = (fabs.f64 z) y_m = (fabs.f64 y) y_s = (copysign.f64 1 y) (FPCore (y_s x_m y_m z_m) :precision binary64 (* y_s (* y_m 0.5)))
x_m = fabs(x);
z_m = fabs(z);
y_m = fabs(y);
y_s = copysign(1.0, y);
double code(double y_s, double x_m, double y_m, double z_m) {
return y_s * (y_m * 0.5);
}
x_m = abs(x)
z_m = abs(z)
y_m = abs(y)
y_s = copysign(1.0d0, y)
real(8) function code(y_s, x_m, y_m, z_m)
real(8), intent (in) :: y_s
real(8), intent (in) :: x_m
real(8), intent (in) :: y_m
real(8), intent (in) :: z_m
code = y_s * (y_m * 0.5d0)
end function
x_m = Math.abs(x);
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_m, double y_m, double z_m) {
return y_s * (y_m * 0.5);
}
x_m = math.fabs(x) z_m = math.fabs(z) y_m = math.fabs(y) y_s = math.copysign(1.0, y) def code(y_s, x_m, y_m, z_m): return y_s * (y_m * 0.5)
x_m = abs(x) z_m = abs(z) y_m = abs(y) y_s = copysign(1.0, y) function code(y_s, x_m, y_m, z_m) return Float64(y_s * Float64(y_m * 0.5)) end
x_m = abs(x); z_m = abs(z); y_m = abs(y); y_s = sign(y) * abs(1.0); function tmp = code(y_s, x_m, y_m, z_m) tmp = y_s * (y_m * 0.5); end
x_m = N[Abs[x], $MachinePrecision]
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$95$m_, y$95$m_, z$95$m_] := N[(y$95$s * N[(y$95$m * 0.5), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
x_m = \left|x\right|
\\
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 68.7%
Taylor expanded in y around inf 34.6%
Final simplification34.6%
(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 2024029
(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)))