
(FPCore (x y z t) :precision binary64 (- (* x x) (* (* y 4.0) (- (* z z) t))))
double code(double x, double y, double z, double t) {
return (x * x) - ((y * 4.0) * ((z * z) - t));
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = (x * x) - ((y * 4.0d0) * ((z * z) - t))
end function
public static double code(double x, double y, double z, double t) {
return (x * x) - ((y * 4.0) * ((z * z) - t));
}
def code(x, y, z, t): return (x * x) - ((y * 4.0) * ((z * z) - t))
function code(x, y, z, t) return Float64(Float64(x * x) - Float64(Float64(y * 4.0) * Float64(Float64(z * z) - t))) end
function tmp = code(x, y, z, t) tmp = (x * x) - ((y * 4.0) * ((z * z) - t)); end
code[x_, y_, z_, t_] := N[(N[(x * x), $MachinePrecision] - N[(N[(y * 4.0), $MachinePrecision] * N[(N[(z * z), $MachinePrecision] - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 11 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x y z t) :precision binary64 (- (* x x) (* (* y 4.0) (- (* z z) t))))
double code(double x, double y, double z, double t) {
return (x * x) - ((y * 4.0) * ((z * z) - t));
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = (x * x) - ((y * 4.0d0) * ((z * z) - t))
end function
public static double code(double x, double y, double z, double t) {
return (x * x) - ((y * 4.0) * ((z * z) - t));
}
def code(x, y, z, t): return (x * x) - ((y * 4.0) * ((z * z) - t))
function code(x, y, z, t) return Float64(Float64(x * x) - Float64(Float64(y * 4.0) * Float64(Float64(z * z) - t))) end
function tmp = code(x, y, z, t) tmp = (x * x) - ((y * 4.0) * ((z * z) - t)); end
code[x_, y_, z_, t_] := N[(N[(x * x), $MachinePrecision] - N[(N[(y * 4.0), $MachinePrecision] * N[(N[(z * z), $MachinePrecision] - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x \cdot x - \left(y \cdot 4\right) \cdot \left(z \cdot z - t\right)
\end{array}
z_m = (fabs.f64 z) (FPCore (x y z_m t) :precision binary64 (if (<= z_m 4.2e+164) (fma (fma z_m z_m (- 0.0 t)) (* y -4.0) (* x x)) (- (* x x) (fma (* z_m (* y 4.0)) z_m (* t (* y -4.0))))))
z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double tmp;
if (z_m <= 4.2e+164) {
tmp = fma(fma(z_m, z_m, (0.0 - t)), (y * -4.0), (x * x));
} else {
tmp = (x * x) - fma((z_m * (y * 4.0)), z_m, (t * (y * -4.0)));
}
return tmp;
}
z_m = abs(z) function code(x, y, z_m, t) tmp = 0.0 if (z_m <= 4.2e+164) tmp = fma(fma(z_m, z_m, Float64(0.0 - t)), Float64(y * -4.0), Float64(x * x)); else tmp = Float64(Float64(x * x) - fma(Float64(z_m * Float64(y * 4.0)), z_m, Float64(t * Float64(y * -4.0)))); end return tmp end
z_m = N[Abs[z], $MachinePrecision] code[x_, y_, z$95$m_, t_] := If[LessEqual[z$95$m, 4.2e+164], N[(N[(z$95$m * z$95$m + N[(0.0 - t), $MachinePrecision]), $MachinePrecision] * N[(y * -4.0), $MachinePrecision] + N[(x * x), $MachinePrecision]), $MachinePrecision], N[(N[(x * x), $MachinePrecision] - N[(N[(z$95$m * N[(y * 4.0), $MachinePrecision]), $MachinePrecision] * z$95$m + N[(t * N[(y * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
\mathbf{if}\;z\_m \leq 4.2 \cdot 10^{+164}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(z\_m, z\_m, 0 - t\right), y \cdot -4, x \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot x - \mathsf{fma}\left(z\_m \cdot \left(y \cdot 4\right), z\_m, t \cdot \left(y \cdot -4\right)\right)\\
\end{array}
\end{array}
if z < 4.1999999999999998e164Initial program 94.0%
sub-negN/A
+-commutativeN/A
*-commutativeN/A
distribute-rgt-neg-inN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
accelerator-lowering-fma.f64N/A
neg-sub0N/A
--lowering--.f64N/A
distribute-rgt-neg-inN/A
*-lowering-*.f64N/A
metadata-evalN/A
*-lowering-*.f6495.3
Applied egg-rr95.3%
if 4.1999999999999998e164 < z Initial program 61.9%
sub-negN/A
distribute-lft-inN/A
*-commutativeN/A
associate-*r*N/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-commutativeN/A
neg-mul-1N/A
associate-*r*N/A
*-commutativeN/A
neg-mul-1N/A
*-lowering-*.f64N/A
distribute-rgt-neg-inN/A
*-lowering-*.f64N/A
metadata-eval89.8
Applied egg-rr89.8%
Final simplification94.7%
z_m = (fabs.f64 z)
(FPCore (x y z_m t)
:precision binary64
(if (<= (* z_m z_m) 5e+86)
(fma y (* t 4.0) (* x x))
(if (<= (* z_m z_m) 2e+287)
(fma (* z_m z_m) (* y -4.0) (* x x))
(* z_m (* z_m (* y -4.0))))))z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double tmp;
if ((z_m * z_m) <= 5e+86) {
tmp = fma(y, (t * 4.0), (x * x));
} else if ((z_m * z_m) <= 2e+287) {
tmp = fma((z_m * z_m), (y * -4.0), (x * x));
} else {
tmp = z_m * (z_m * (y * -4.0));
}
return tmp;
}
z_m = abs(z) function code(x, y, z_m, t) tmp = 0.0 if (Float64(z_m * z_m) <= 5e+86) tmp = fma(y, Float64(t * 4.0), Float64(x * x)); elseif (Float64(z_m * z_m) <= 2e+287) tmp = fma(Float64(z_m * z_m), Float64(y * -4.0), Float64(x * x)); else tmp = Float64(z_m * Float64(z_m * Float64(y * -4.0))); end return tmp end
z_m = N[Abs[z], $MachinePrecision] code[x_, y_, z$95$m_, t_] := If[LessEqual[N[(z$95$m * z$95$m), $MachinePrecision], 5e+86], N[(y * N[(t * 4.0), $MachinePrecision] + N[(x * x), $MachinePrecision]), $MachinePrecision], If[LessEqual[N[(z$95$m * z$95$m), $MachinePrecision], 2e+287], N[(N[(z$95$m * z$95$m), $MachinePrecision] * N[(y * -4.0), $MachinePrecision] + N[(x * x), $MachinePrecision]), $MachinePrecision], N[(z$95$m * N[(z$95$m * N[(y * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
\mathbf{if}\;z\_m \cdot z\_m \leq 5 \cdot 10^{+86}:\\
\;\;\;\;\mathsf{fma}\left(y, t \cdot 4, x \cdot x\right)\\
\mathbf{elif}\;z\_m \cdot z\_m \leq 2 \cdot 10^{+287}:\\
\;\;\;\;\mathsf{fma}\left(z\_m \cdot z\_m, y \cdot -4, x \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;z\_m \cdot \left(z\_m \cdot \left(y \cdot -4\right)\right)\\
\end{array}
\end{array}
if (*.f64 z z) < 4.9999999999999998e86Initial program 97.9%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
associate-*r*N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6493.5
Simplified93.5%
+-rgt-identityN/A
*-lowering-*.f6493.5
Applied egg-rr93.5%
if 4.9999999999999998e86 < (*.f64 z z) < 2.0000000000000002e287Initial program 97.3%
sub-negN/A
+-commutativeN/A
*-commutativeN/A
distribute-rgt-neg-inN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
accelerator-lowering-fma.f64N/A
neg-sub0N/A
--lowering--.f64N/A
distribute-rgt-neg-inN/A
*-lowering-*.f64N/A
metadata-evalN/A
*-lowering-*.f6497.4
Applied egg-rr97.4%
Taylor expanded in z around inf
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6492.4
Simplified92.4%
+-rgt-identityN/A
*-lowering-*.f6492.4
Applied egg-rr92.4%
if 2.0000000000000002e287 < (*.f64 z z) Initial program 70.4%
Taylor expanded in z around inf
+-rgt-identityN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6474.6
Simplified74.6%
+-rgt-identityN/A
+-rgt-identityN/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6484.9
Applied egg-rr84.9%
Final simplification90.9%
z_m = (fabs.f64 z)
(FPCore (x y z_m t)
:precision binary64
(let* ((t_1 (- (* z_m z_m) t)))
(if (<= t_1 -2e-107)
(* t (* y 4.0))
(if (<= t_1 1e+143) (* x x) (* z_m (* z_m (* y -4.0)))))))z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double t_1 = (z_m * z_m) - t;
double tmp;
if (t_1 <= -2e-107) {
tmp = t * (y * 4.0);
} else if (t_1 <= 1e+143) {
tmp = x * x;
} else {
tmp = z_m * (z_m * (y * -4.0));
}
return tmp;
}
z_m = abs(z)
real(8) function code(x, y, z_m, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z_m
real(8), intent (in) :: t
real(8) :: t_1
real(8) :: tmp
t_1 = (z_m * z_m) - t
if (t_1 <= (-2d-107)) then
tmp = t * (y * 4.0d0)
else if (t_1 <= 1d+143) then
tmp = x * x
else
tmp = z_m * (z_m * (y * (-4.0d0)))
end if
code = tmp
end function
z_m = Math.abs(z);
public static double code(double x, double y, double z_m, double t) {
double t_1 = (z_m * z_m) - t;
double tmp;
if (t_1 <= -2e-107) {
tmp = t * (y * 4.0);
} else if (t_1 <= 1e+143) {
tmp = x * x;
} else {
tmp = z_m * (z_m * (y * -4.0));
}
return tmp;
}
z_m = math.fabs(z) def code(x, y, z_m, t): t_1 = (z_m * z_m) - t tmp = 0 if t_1 <= -2e-107: tmp = t * (y * 4.0) elif t_1 <= 1e+143: tmp = x * x else: tmp = z_m * (z_m * (y * -4.0)) return tmp
z_m = abs(z) function code(x, y, z_m, t) t_1 = Float64(Float64(z_m * z_m) - t) tmp = 0.0 if (t_1 <= -2e-107) tmp = Float64(t * Float64(y * 4.0)); elseif (t_1 <= 1e+143) tmp = Float64(x * x); else tmp = Float64(z_m * Float64(z_m * Float64(y * -4.0))); end return tmp end
z_m = abs(z); function tmp_2 = code(x, y, z_m, t) t_1 = (z_m * z_m) - t; tmp = 0.0; if (t_1 <= -2e-107) tmp = t * (y * 4.0); elseif (t_1 <= 1e+143) tmp = x * x; else tmp = z_m * (z_m * (y * -4.0)); end tmp_2 = tmp; end
z_m = N[Abs[z], $MachinePrecision]
code[x_, y_, z$95$m_, t_] := Block[{t$95$1 = N[(N[(z$95$m * z$95$m), $MachinePrecision] - t), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-107], N[(t * N[(y * 4.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e+143], N[(x * x), $MachinePrecision], N[(z$95$m * N[(z$95$m * N[(y * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
t_1 := z\_m \cdot z\_m - t\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-107}:\\
\;\;\;\;t \cdot \left(y \cdot 4\right)\\
\mathbf{elif}\;t\_1 \leq 10^{+143}:\\
\;\;\;\;x \cdot x\\
\mathbf{else}:\\
\;\;\;\;z\_m \cdot \left(z\_m \cdot \left(y \cdot -4\right)\right)\\
\end{array}
\end{array}
if (-.f64 (*.f64 z z) t) < -2e-107Initial program 97.9%
Taylor expanded in t around inf
+-rgt-identityN/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
associate-*l*N/A
accelerator-lowering-fma.f64N/A
*-commutativeN/A
*-lowering-*.f6472.8
Simplified72.8%
+-rgt-identityN/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f6472.8
Applied egg-rr72.8%
if -2e-107 < (-.f64 (*.f64 z z) t) < 1e143Initial program 99.9%
Taylor expanded in x around inf
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6460.1
Simplified60.1%
+-rgt-identityN/A
*-lowering-*.f6460.1
Applied egg-rr60.1%
if 1e143 < (-.f64 (*.f64 z z) t) Initial program 80.4%
Taylor expanded in z around inf
+-rgt-identityN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6462.6
Simplified62.6%
+-rgt-identityN/A
+-rgt-identityN/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6468.5
Applied egg-rr68.5%
Final simplification66.5%
z_m = (fabs.f64 z)
(FPCore (x y z_m t)
:precision binary64
(let* ((t_1 (- (* z_m z_m) t)))
(if (<= t_1 -2e-107)
(* t (* y 4.0))
(if (<= t_1 1e+143) (* x x) (* y (* z_m (* z_m -4.0)))))))z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double t_1 = (z_m * z_m) - t;
double tmp;
if (t_1 <= -2e-107) {
tmp = t * (y * 4.0);
} else if (t_1 <= 1e+143) {
tmp = x * x;
} else {
tmp = y * (z_m * (z_m * -4.0));
}
return tmp;
}
z_m = abs(z)
real(8) function code(x, y, z_m, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z_m
real(8), intent (in) :: t
real(8) :: t_1
real(8) :: tmp
t_1 = (z_m * z_m) - t
if (t_1 <= (-2d-107)) then
tmp = t * (y * 4.0d0)
else if (t_1 <= 1d+143) then
tmp = x * x
else
tmp = y * (z_m * (z_m * (-4.0d0)))
end if
code = tmp
end function
z_m = Math.abs(z);
public static double code(double x, double y, double z_m, double t) {
double t_1 = (z_m * z_m) - t;
double tmp;
if (t_1 <= -2e-107) {
tmp = t * (y * 4.0);
} else if (t_1 <= 1e+143) {
tmp = x * x;
} else {
tmp = y * (z_m * (z_m * -4.0));
}
return tmp;
}
z_m = math.fabs(z) def code(x, y, z_m, t): t_1 = (z_m * z_m) - t tmp = 0 if t_1 <= -2e-107: tmp = t * (y * 4.0) elif t_1 <= 1e+143: tmp = x * x else: tmp = y * (z_m * (z_m * -4.0)) return tmp
z_m = abs(z) function code(x, y, z_m, t) t_1 = Float64(Float64(z_m * z_m) - t) tmp = 0.0 if (t_1 <= -2e-107) tmp = Float64(t * Float64(y * 4.0)); elseif (t_1 <= 1e+143) tmp = Float64(x * x); else tmp = Float64(y * Float64(z_m * Float64(z_m * -4.0))); end return tmp end
z_m = abs(z); function tmp_2 = code(x, y, z_m, t) t_1 = (z_m * z_m) - t; tmp = 0.0; if (t_1 <= -2e-107) tmp = t * (y * 4.0); elseif (t_1 <= 1e+143) tmp = x * x; else tmp = y * (z_m * (z_m * -4.0)); end tmp_2 = tmp; end
z_m = N[Abs[z], $MachinePrecision]
code[x_, y_, z$95$m_, t_] := Block[{t$95$1 = N[(N[(z$95$m * z$95$m), $MachinePrecision] - t), $MachinePrecision]}, If[LessEqual[t$95$1, -2e-107], N[(t * N[(y * 4.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$1, 1e+143], N[(x * x), $MachinePrecision], N[(y * N[(z$95$m * N[(z$95$m * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
t_1 := z\_m \cdot z\_m - t\\
\mathbf{if}\;t\_1 \leq -2 \cdot 10^{-107}:\\
\;\;\;\;t \cdot \left(y \cdot 4\right)\\
\mathbf{elif}\;t\_1 \leq 10^{+143}:\\
\;\;\;\;x \cdot x\\
\mathbf{else}:\\
\;\;\;\;y \cdot \left(z\_m \cdot \left(z\_m \cdot -4\right)\right)\\
\end{array}
\end{array}
if (-.f64 (*.f64 z z) t) < -2e-107Initial program 97.9%
Taylor expanded in t around inf
+-rgt-identityN/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
associate-*l*N/A
accelerator-lowering-fma.f64N/A
*-commutativeN/A
*-lowering-*.f6472.8
Simplified72.8%
+-rgt-identityN/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f6472.8
Applied egg-rr72.8%
if -2e-107 < (-.f64 (*.f64 z z) t) < 1e143Initial program 99.9%
Taylor expanded in x around inf
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6460.1
Simplified60.1%
+-rgt-identityN/A
*-lowering-*.f6460.1
Applied egg-rr60.1%
if 1e143 < (-.f64 (*.f64 z z) t) Initial program 80.4%
Taylor expanded in z around inf
+-rgt-identityN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6462.6
Simplified62.6%
+-rgt-identityN/A
+-rgt-identityN/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6468.5
Applied egg-rr68.5%
associate-*l*N/A
associate-*l*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6462.6
Applied egg-rr62.6%
Final simplification63.6%
z_m = (fabs.f64 z) (FPCore (x y z_m t) :precision binary64 (if (<= (* z_m z_m) 2e+287) (fma (fma z_m z_m (- 0.0 t)) (* y -4.0) (* x x)) (* z_m (* z_m (* y -4.0)))))
z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double tmp;
if ((z_m * z_m) <= 2e+287) {
tmp = fma(fma(z_m, z_m, (0.0 - t)), (y * -4.0), (x * x));
} else {
tmp = z_m * (z_m * (y * -4.0));
}
return tmp;
}
z_m = abs(z) function code(x, y, z_m, t) tmp = 0.0 if (Float64(z_m * z_m) <= 2e+287) tmp = fma(fma(z_m, z_m, Float64(0.0 - t)), Float64(y * -4.0), Float64(x * x)); else tmp = Float64(z_m * Float64(z_m * Float64(y * -4.0))); end return tmp end
z_m = N[Abs[z], $MachinePrecision] code[x_, y_, z$95$m_, t_] := If[LessEqual[N[(z$95$m * z$95$m), $MachinePrecision], 2e+287], N[(N[(z$95$m * z$95$m + N[(0.0 - t), $MachinePrecision]), $MachinePrecision] * N[(y * -4.0), $MachinePrecision] + N[(x * x), $MachinePrecision]), $MachinePrecision], N[(z$95$m * N[(z$95$m * N[(y * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
\mathbf{if}\;z\_m \cdot z\_m \leq 2 \cdot 10^{+287}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(z\_m, z\_m, 0 - t\right), y \cdot -4, x \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;z\_m \cdot \left(z\_m \cdot \left(y \cdot -4\right)\right)\\
\end{array}
\end{array}
if (*.f64 z z) < 2.0000000000000002e287Initial program 97.8%
sub-negN/A
+-commutativeN/A
*-commutativeN/A
distribute-rgt-neg-inN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
accelerator-lowering-fma.f64N/A
neg-sub0N/A
--lowering--.f64N/A
distribute-rgt-neg-inN/A
*-lowering-*.f64N/A
metadata-evalN/A
*-lowering-*.f6499.4
Applied egg-rr99.4%
if 2.0000000000000002e287 < (*.f64 z z) Initial program 70.4%
Taylor expanded in z around inf
+-rgt-identityN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6474.6
Simplified74.6%
+-rgt-identityN/A
+-rgt-identityN/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6484.9
Applied egg-rr84.9%
Final simplification95.4%
z_m = (fabs.f64 z) (FPCore (x y z_m t) :precision binary64 (if (<= (* z_m z_m) 2e+287) (fma x x (* y (* (fma z_m z_m (- 0.0 t)) -4.0))) (* z_m (* z_m (* y -4.0)))))
z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double tmp;
if ((z_m * z_m) <= 2e+287) {
tmp = fma(x, x, (y * (fma(z_m, z_m, (0.0 - t)) * -4.0)));
} else {
tmp = z_m * (z_m * (y * -4.0));
}
return tmp;
}
z_m = abs(z) function code(x, y, z_m, t) tmp = 0.0 if (Float64(z_m * z_m) <= 2e+287) tmp = fma(x, x, Float64(y * Float64(fma(z_m, z_m, Float64(0.0 - t)) * -4.0))); else tmp = Float64(z_m * Float64(z_m * Float64(y * -4.0))); end return tmp end
z_m = N[Abs[z], $MachinePrecision] code[x_, y_, z$95$m_, t_] := If[LessEqual[N[(z$95$m * z$95$m), $MachinePrecision], 2e+287], N[(x * x + N[(y * N[(N[(z$95$m * z$95$m + N[(0.0 - t), $MachinePrecision]), $MachinePrecision] * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(z$95$m * N[(z$95$m * N[(y * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
\mathbf{if}\;z\_m \cdot z\_m \leq 2 \cdot 10^{+287}:\\
\;\;\;\;\mathsf{fma}\left(x, x, y \cdot \left(\mathsf{fma}\left(z\_m, z\_m, 0 - t\right) \cdot -4\right)\right)\\
\mathbf{else}:\\
\;\;\;\;z\_m \cdot \left(z\_m \cdot \left(y \cdot -4\right)\right)\\
\end{array}
\end{array}
if (*.f64 z z) < 2.0000000000000002e287Initial program 97.8%
sub-negN/A
accelerator-lowering-fma.f64N/A
associate-*l*N/A
distribute-rgt-neg-inN/A
*-lowering-*.f64N/A
*-commutativeN/A
distribute-rgt-neg-inN/A
*-lowering-*.f64N/A
sub-negN/A
accelerator-lowering-fma.f64N/A
neg-sub0N/A
--lowering--.f64N/A
metadata-eval98.3
Applied egg-rr98.3%
if 2.0000000000000002e287 < (*.f64 z z) Initial program 70.4%
Taylor expanded in z around inf
+-rgt-identityN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6474.6
Simplified74.6%
+-rgt-identityN/A
+-rgt-identityN/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6484.9
Applied egg-rr84.9%
Final simplification94.6%
z_m = (fabs.f64 z) (FPCore (x y z_m t) :precision binary64 (if (<= z_m 3.6e+151) (fma (fma z_m z_m (- 0.0 t)) (* y -4.0) (* x x)) (* z_m (/ z_m (/ -0.25 y)))))
z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double tmp;
if (z_m <= 3.6e+151) {
tmp = fma(fma(z_m, z_m, (0.0 - t)), (y * -4.0), (x * x));
} else {
tmp = z_m * (z_m / (-0.25 / y));
}
return tmp;
}
z_m = abs(z) function code(x, y, z_m, t) tmp = 0.0 if (z_m <= 3.6e+151) tmp = fma(fma(z_m, z_m, Float64(0.0 - t)), Float64(y * -4.0), Float64(x * x)); else tmp = Float64(z_m * Float64(z_m / Float64(-0.25 / y))); end return tmp end
z_m = N[Abs[z], $MachinePrecision] code[x_, y_, z$95$m_, t_] := If[LessEqual[z$95$m, 3.6e+151], N[(N[(z$95$m * z$95$m + N[(0.0 - t), $MachinePrecision]), $MachinePrecision] * N[(y * -4.0), $MachinePrecision] + N[(x * x), $MachinePrecision]), $MachinePrecision], N[(z$95$m * N[(z$95$m / N[(-0.25 / y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
\mathbf{if}\;z\_m \leq 3.6 \cdot 10^{+151}:\\
\;\;\;\;\mathsf{fma}\left(\mathsf{fma}\left(z\_m, z\_m, 0 - t\right), y \cdot -4, x \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;z\_m \cdot \frac{z\_m}{\frac{-0.25}{y}}\\
\end{array}
\end{array}
if z < 3.6e151Initial program 94.3%
sub-negN/A
+-commutativeN/A
*-commutativeN/A
distribute-rgt-neg-inN/A
accelerator-lowering-fma.f64N/A
sub-negN/A
accelerator-lowering-fma.f64N/A
neg-sub0N/A
--lowering--.f64N/A
distribute-rgt-neg-inN/A
*-lowering-*.f64N/A
metadata-evalN/A
*-lowering-*.f6495.7
Applied egg-rr95.7%
if 3.6e151 < z Initial program 61.1%
Taylor expanded in z around inf
+-rgt-identityN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6467.4
Simplified67.4%
+-rgt-identityN/A
+-rgt-identityN/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6490.5
Applied egg-rr90.5%
*-commutativeN/A
*-rgt-identityN/A
*-inversesN/A
associate-/l*N/A
clear-numN/A
un-div-invN/A
/-lowering-/.f64N/A
associate-/r*N/A
*-inversesN/A
*-commutativeN/A
associate-/r*N/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
/-lowering-/.f64N/A
metadata-evalN/A
metadata-eval90.6
Applied egg-rr90.6%
Final simplification95.1%
z_m = (fabs.f64 z) (FPCore (x y z_m t) :precision binary64 (if (<= (* z_m z_m) 1e+155) (fma y (* t 4.0) (* x x)) (* z_m (* z_m (* y -4.0)))))
z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double tmp;
if ((z_m * z_m) <= 1e+155) {
tmp = fma(y, (t * 4.0), (x * x));
} else {
tmp = z_m * (z_m * (y * -4.0));
}
return tmp;
}
z_m = abs(z) function code(x, y, z_m, t) tmp = 0.0 if (Float64(z_m * z_m) <= 1e+155) tmp = fma(y, Float64(t * 4.0), Float64(x * x)); else tmp = Float64(z_m * Float64(z_m * Float64(y * -4.0))); end return tmp end
z_m = N[Abs[z], $MachinePrecision] code[x_, y_, z$95$m_, t_] := If[LessEqual[N[(z$95$m * z$95$m), $MachinePrecision], 1e+155], N[(y * N[(t * 4.0), $MachinePrecision] + N[(x * x), $MachinePrecision]), $MachinePrecision], N[(z$95$m * N[(z$95$m * N[(y * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
\mathbf{if}\;z\_m \cdot z\_m \leq 10^{+155}:\\
\;\;\;\;\mathsf{fma}\left(y, t \cdot 4, x \cdot x\right)\\
\mathbf{else}:\\
\;\;\;\;z\_m \cdot \left(z\_m \cdot \left(y \cdot -4\right)\right)\\
\end{array}
\end{array}
if (*.f64 z z) < 1.00000000000000001e155Initial program 98.1%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
associate-*r*N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6491.0
Simplified91.0%
+-rgt-identityN/A
*-lowering-*.f6491.0
Applied egg-rr91.0%
if 1.00000000000000001e155 < (*.f64 z z) Initial program 77.5%
Taylor expanded in z around inf
+-rgt-identityN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6475.8
Simplified75.8%
+-rgt-identityN/A
+-rgt-identityN/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6483.2
Applied egg-rr83.2%
Final simplification88.0%
z_m = (fabs.f64 z) (FPCore (x y z_m t) :precision binary64 (if (<= z_m 5e+77) (fma x x (* 4.0 (* t y))) (* z_m (* z_m (* y -4.0)))))
z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double tmp;
if (z_m <= 5e+77) {
tmp = fma(x, x, (4.0 * (t * y)));
} else {
tmp = z_m * (z_m * (y * -4.0));
}
return tmp;
}
z_m = abs(z) function code(x, y, z_m, t) tmp = 0.0 if (z_m <= 5e+77) tmp = fma(x, x, Float64(4.0 * Float64(t * y))); else tmp = Float64(z_m * Float64(z_m * Float64(y * -4.0))); end return tmp end
z_m = N[Abs[z], $MachinePrecision] code[x_, y_, z$95$m_, t_] := If[LessEqual[z$95$m, 5e+77], N[(x * x + N[(4.0 * N[(t * y), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(z$95$m * N[(z$95$m * N[(y * -4.0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
\mathbf{if}\;z\_m \leq 5 \cdot 10^{+77}:\\
\;\;\;\;\mathsf{fma}\left(x, x, 4 \cdot \left(t \cdot y\right)\right)\\
\mathbf{else}:\\
\;\;\;\;z\_m \cdot \left(z\_m \cdot \left(y \cdot -4\right)\right)\\
\end{array}
\end{array}
if z < 5.00000000000000004e77Initial program 94.5%
Taylor expanded in z around 0
cancel-sign-sub-invN/A
metadata-evalN/A
+-commutativeN/A
associate-*r*N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
*-commutativeN/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6477.8
Simplified77.8%
+-rgt-identityN/A
+-commutativeN/A
accelerator-lowering-fma.f64N/A
+-rgt-identityN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f6475.9
Applied egg-rr75.9%
+-rgt-identityN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f6475.9
Applied egg-rr75.9%
if 5.00000000000000004e77 < z Initial program 70.7%
Taylor expanded in z around inf
+-rgt-identityN/A
accelerator-lowering-fma.f64N/A
*-lowering-*.f64N/A
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6467.1
Simplified67.1%
+-rgt-identityN/A
+-rgt-identityN/A
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f64N/A
*-lowering-*.f6483.2
Applied egg-rr83.2%
Final simplification77.2%
z_m = (fabs.f64 z) (FPCore (x y z_m t) :precision binary64 (if (<= (* x x) 2e+67) (* t (* y 4.0)) (* x x)))
z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
double tmp;
if ((x * x) <= 2e+67) {
tmp = t * (y * 4.0);
} else {
tmp = x * x;
}
return tmp;
}
z_m = abs(z)
real(8) function code(x, y, z_m, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z_m
real(8), intent (in) :: t
real(8) :: tmp
if ((x * x) <= 2d+67) then
tmp = t * (y * 4.0d0)
else
tmp = x * x
end if
code = tmp
end function
z_m = Math.abs(z);
public static double code(double x, double y, double z_m, double t) {
double tmp;
if ((x * x) <= 2e+67) {
tmp = t * (y * 4.0);
} else {
tmp = x * x;
}
return tmp;
}
z_m = math.fabs(z) def code(x, y, z_m, t): tmp = 0 if (x * x) <= 2e+67: tmp = t * (y * 4.0) else: tmp = x * x return tmp
z_m = abs(z) function code(x, y, z_m, t) tmp = 0.0 if (Float64(x * x) <= 2e+67) tmp = Float64(t * Float64(y * 4.0)); else tmp = Float64(x * x); end return tmp end
z_m = abs(z); function tmp_2 = code(x, y, z_m, t) tmp = 0.0; if ((x * x) <= 2e+67) tmp = t * (y * 4.0); else tmp = x * x; end tmp_2 = tmp; end
z_m = N[Abs[z], $MachinePrecision] code[x_, y_, z$95$m_, t_] := If[LessEqual[N[(x * x), $MachinePrecision], 2e+67], N[(t * N[(y * 4.0), $MachinePrecision]), $MachinePrecision], N[(x * x), $MachinePrecision]]
\begin{array}{l}
z_m = \left|z\right|
\\
\begin{array}{l}
\mathbf{if}\;x \cdot x \leq 2 \cdot 10^{+67}:\\
\;\;\;\;t \cdot \left(y \cdot 4\right)\\
\mathbf{else}:\\
\;\;\;\;x \cdot x\\
\end{array}
\end{array}
if (*.f64 x x) < 1.99999999999999997e67Initial program 94.0%
Taylor expanded in t around inf
+-rgt-identityN/A
*-commutativeN/A
associate-*r*N/A
*-commutativeN/A
associate-*l*N/A
accelerator-lowering-fma.f64N/A
*-commutativeN/A
*-lowering-*.f6450.3
Simplified50.3%
+-rgt-identityN/A
*-commutativeN/A
associate-*r*N/A
*-lowering-*.f64N/A
*-lowering-*.f6450.3
Applied egg-rr50.3%
if 1.99999999999999997e67 < (*.f64 x x) Initial program 85.5%
Taylor expanded in x around inf
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6474.3
Simplified74.3%
+-rgt-identityN/A
*-lowering-*.f6474.3
Applied egg-rr74.3%
Final simplification61.1%
z_m = (fabs.f64 z) (FPCore (x y z_m t) :precision binary64 (* x x))
z_m = fabs(z);
double code(double x, double y, double z_m, double t) {
return x * x;
}
z_m = abs(z)
real(8) function code(x, y, z_m, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z_m
real(8), intent (in) :: t
code = x * x
end function
z_m = Math.abs(z);
public static double code(double x, double y, double z_m, double t) {
return x * x;
}
z_m = math.fabs(z) def code(x, y, z_m, t): return x * x
z_m = abs(z) function code(x, y, z_m, t) return Float64(x * x) end
z_m = abs(z); function tmp = code(x, y, z_m, t) tmp = x * x; end
z_m = N[Abs[z], $MachinePrecision] code[x_, y_, z$95$m_, t_] := N[(x * x), $MachinePrecision]
\begin{array}{l}
z_m = \left|z\right|
\\
x \cdot x
\end{array}
Initial program 90.2%
Taylor expanded in x around inf
+-rgt-identityN/A
unpow2N/A
accelerator-lowering-fma.f6440.7
Simplified40.7%
+-rgt-identityN/A
*-lowering-*.f6440.7
Applied egg-rr40.7%
(FPCore (x y z t) :precision binary64 (- (* x x) (* 4.0 (* y (- (* z z) t)))))
double code(double x, double y, double z, double t) {
return (x * x) - (4.0 * (y * ((z * z) - t)));
}
real(8) function code(x, y, z, t)
real(8), intent (in) :: x
real(8), intent (in) :: y
real(8), intent (in) :: z
real(8), intent (in) :: t
code = (x * x) - (4.0d0 * (y * ((z * z) - t)))
end function
public static double code(double x, double y, double z, double t) {
return (x * x) - (4.0 * (y * ((z * z) - t)));
}
def code(x, y, z, t): return (x * x) - (4.0 * (y * ((z * z) - t)))
function code(x, y, z, t) return Float64(Float64(x * x) - Float64(4.0 * Float64(y * Float64(Float64(z * z) - t)))) end
function tmp = code(x, y, z, t) tmp = (x * x) - (4.0 * (y * ((z * z) - t))); end
code[x_, y_, z_, t_] := N[(N[(x * x), $MachinePrecision] - N[(4.0 * N[(y * N[(N[(z * z), $MachinePrecision] - t), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
x \cdot x - 4 \cdot \left(y \cdot \left(z \cdot z - t\right)\right)
\end{array}
herbie shell --seed 2024198
(FPCore (x y z t)
:name "Graphics.Rasterific.Shading:$sradialGradientWithFocusShader from Rasterific-0.6.1, B"
:precision binary64
:alt
(! :herbie-platform default (- (* x x) (* 4 (* y (- (* z z) t)))))
(- (* x x) (* (* y 4.0) (- (* z z) t))))