
(FPCore (d1 d2 d3 d4) :precision binary64 (- (+ (- (* d1 d2) (* d1 d3)) (* d4 d1)) (* d1 d1)))
double code(double d1, double d2, double d3, double d4) {
return (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1);
}
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
code = (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1)
end function
public static double code(double d1, double d2, double d3, double d4) {
return (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1);
}
def code(d1, d2, d3, d4): return (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1)
function code(d1, d2, d3, d4) return Float64(Float64(Float64(Float64(d1 * d2) - Float64(d1 * d3)) + Float64(d4 * d1)) - Float64(d1 * d1)) end
function tmp = code(d1, d2, d3, d4) tmp = (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1); end
code[d1_, d2_, d3_, d4_] := N[(N[(N[(N[(d1 * d2), $MachinePrecision] - N[(d1 * d3), $MachinePrecision]), $MachinePrecision] + N[(d4 * d1), $MachinePrecision]), $MachinePrecision] - N[(d1 * d1), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 14 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (d1 d2 d3 d4) :precision binary64 (- (+ (- (* d1 d2) (* d1 d3)) (* d4 d1)) (* d1 d1)))
double code(double d1, double d2, double d3, double d4) {
return (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1);
}
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
code = (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1)
end function
public static double code(double d1, double d2, double d3, double d4) {
return (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1);
}
def code(d1, d2, d3, d4): return (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1)
function code(d1, d2, d3, d4) return Float64(Float64(Float64(Float64(d1 * d2) - Float64(d1 * d3)) + Float64(d4 * d1)) - Float64(d1 * d1)) end
function tmp = code(d1, d2, d3, d4) tmp = (((d1 * d2) - (d1 * d3)) + (d4 * d1)) - (d1 * d1); end
code[d1_, d2_, d3_, d4_] := N[(N[(N[(N[(d1 * d2), $MachinePrecision] - N[(d1 * d3), $MachinePrecision]), $MachinePrecision] + N[(d4 * d1), $MachinePrecision]), $MachinePrecision] - N[(d1 * d1), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\left(\left(d1 \cdot d2 - d1 \cdot d3\right) + d4 \cdot d1\right) - d1 \cdot d1
\end{array}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d4 2.5e+227) (fma d4 d1 (* d1 (- (- d2 d3) d1))) (* d1 (+ d2 (- d4 d1)))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 2.5e+227) {
tmp = fma(d4, d1, (d1 * ((d2 - d3) - d1)));
} else {
tmp = d1 * (d2 + (d4 - d1));
}
return tmp;
}
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= 2.5e+227) tmp = fma(d4, d1, Float64(d1 * Float64(Float64(d2 - d3) - d1))); else tmp = Float64(d1 * Float64(d2 + Float64(d4 - d1))); end return tmp end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d4, 2.5e+227], N[(d4 * d1 + N[(d1 * N[(N[(d2 - d3), $MachinePrecision] - d1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d2 + N[(d4 - d1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq 2.5 \cdot 10^{+227}:\\
\;\;\;\;\mathsf{fma}\left(d4, d1, d1 \cdot \left(\left(d2 - d3\right) - d1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d1\right)\right)\\
\end{array}
\end{array}
if d4 < 2.4999999999999998e227Initial program 88.6%
+-commutativeN/A
associate--l+N/A
accelerator-lowering-fma.f64N/A
distribute-lft-out--N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6498.7
Applied egg-rr98.7%
if 2.4999999999999998e227 < d4 Initial program 73.6%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f64100.0
Simplified100.0%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
(FPCore (d1 d2 d3 d4)
:precision binary64
(if (<= d4 2.85e-143)
(* d1 (- d2 d3))
(if (<= d4 4.5e+59)
(* d1 (- d2 d1))
(if (<= d4 1.72e+165) (* d1 (- d4 d1)) (* d1 (+ d4 d2))))))assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 2.85e-143) {
tmp = d1 * (d2 - d3);
} else if (d4 <= 4.5e+59) {
tmp = d1 * (d2 - d1);
} else if (d4 <= 1.72e+165) {
tmp = d1 * (d4 - d1);
} else {
tmp = d1 * (d4 + d2);
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d4 <= 2.85d-143) then
tmp = d1 * (d2 - d3)
else if (d4 <= 4.5d+59) then
tmp = d1 * (d2 - d1)
else if (d4 <= 1.72d+165) then
tmp = d1 * (d4 - d1)
else
tmp = d1 * (d4 + d2)
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 2.85e-143) {
tmp = d1 * (d2 - d3);
} else if (d4 <= 4.5e+59) {
tmp = d1 * (d2 - d1);
} else if (d4 <= 1.72e+165) {
tmp = d1 * (d4 - d1);
} else {
tmp = d1 * (d4 + d2);
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= 2.85e-143: tmp = d1 * (d2 - d3) elif d4 <= 4.5e+59: tmp = d1 * (d2 - d1) elif d4 <= 1.72e+165: tmp = d1 * (d4 - d1) else: tmp = d1 * (d4 + d2) return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= 2.85e-143) tmp = Float64(d1 * Float64(d2 - d3)); elseif (d4 <= 4.5e+59) tmp = Float64(d1 * Float64(d2 - d1)); elseif (d4 <= 1.72e+165) tmp = Float64(d1 * Float64(d4 - d1)); else tmp = Float64(d1 * Float64(d4 + d2)); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d4 <= 2.85e-143)
tmp = d1 * (d2 - d3);
elseif (d4 <= 4.5e+59)
tmp = d1 * (d2 - d1);
elseif (d4 <= 1.72e+165)
tmp = d1 * (d4 - d1);
else
tmp = d1 * (d4 + d2);
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d4, 2.85e-143], N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 4.5e+59], N[(d1 * N[(d2 - d1), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 1.72e+165], N[(d1 * N[(d4 - d1), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d4 + d2), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq 2.85 \cdot 10^{-143}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\mathbf{elif}\;d4 \leq 4.5 \cdot 10^{+59}:\\
\;\;\;\;d1 \cdot \left(d2 - d1\right)\\
\mathbf{elif}\;d4 \leq 1.72 \cdot 10^{+165}:\\
\;\;\;\;d1 \cdot \left(d4 - d1\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 + d2\right)\\
\end{array}
\end{array}
if d4 < 2.85e-143Initial program 90.3%
+-commutativeN/A
associate--l+N/A
accelerator-lowering-fma.f64N/A
distribute-lft-out--N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6498.1
Applied egg-rr98.1%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
+-commutativeN/A
associate--r+N/A
--lowering--.f64N/A
--lowering--.f6484.4
Simplified84.4%
Taylor expanded in d1 around 0
+-rgt-identityN/A
+-commutativeN/A
*-rgt-identityN/A
cancel-sign-subN/A
mul-1-negN/A
*-inversesN/A
associate-/l*N/A
associate-*l/N/A
associate-*r/N/A
*-commutativeN/A
neg-sub0N/A
*-lowering-*.f64N/A
neg-sub0N/A
*-commutativeN/A
associate-*r/N/A
associate-*l/N/A
associate-/l*N/A
*-inversesN/A
mul-1-negN/A
cancel-sign-subN/A
*-rgt-identityN/A
+-commutativeN/A
Simplified63.1%
if 2.85e-143 < d4 < 4.49999999999999959e59Initial program 92.1%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6482.4
Simplified82.4%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
--lowering--.f6468.5
Simplified68.5%
if 4.49999999999999959e59 < d4 < 1.72e165Initial program 78.2%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6483.3
Simplified83.3%
Taylor expanded in d2 around 0
*-lowering-*.f64N/A
--lowering--.f6472.3
Simplified72.3%
if 1.72e165 < d4 Initial program 72.4%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6489.7
Simplified89.7%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
+-lowering-+.f6493.1
Simplified93.1%
Final simplification68.1%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
(FPCore (d1 d2 d3 d4)
:precision binary64
(let* ((t_0 (- (* d1 d3))))
(if (<= d3 -5e+108)
t_0
(if (<= d3 -2.3e-18)
(* d1 (- d1))
(if (<= d3 1.62e+196) (* d1 (+ d4 d2)) t_0)))))assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double t_0 = -(d1 * d3);
double tmp;
if (d3 <= -5e+108) {
tmp = t_0;
} else if (d3 <= -2.3e-18) {
tmp = d1 * -d1;
} else if (d3 <= 1.62e+196) {
tmp = d1 * (d4 + d2);
} else {
tmp = t_0;
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: t_0
real(8) :: tmp
t_0 = -(d1 * d3)
if (d3 <= (-5d+108)) then
tmp = t_0
else if (d3 <= (-2.3d-18)) then
tmp = d1 * -d1
else if (d3 <= 1.62d+196) then
tmp = d1 * (d4 + d2)
else
tmp = t_0
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double t_0 = -(d1 * d3);
double tmp;
if (d3 <= -5e+108) {
tmp = t_0;
} else if (d3 <= -2.3e-18) {
tmp = d1 * -d1;
} else if (d3 <= 1.62e+196) {
tmp = d1 * (d4 + d2);
} else {
tmp = t_0;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): t_0 = -(d1 * d3) tmp = 0 if d3 <= -5e+108: tmp = t_0 elif d3 <= -2.3e-18: tmp = d1 * -d1 elif d3 <= 1.62e+196: tmp = d1 * (d4 + d2) else: tmp = t_0 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) t_0 = Float64(-Float64(d1 * d3)) tmp = 0.0 if (d3 <= -5e+108) tmp = t_0; elseif (d3 <= -2.3e-18) tmp = Float64(d1 * Float64(-d1)); elseif (d3 <= 1.62e+196) tmp = Float64(d1 * Float64(d4 + d2)); else tmp = t_0; end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
t_0 = -(d1 * d3);
tmp = 0.0;
if (d3 <= -5e+108)
tmp = t_0;
elseif (d3 <= -2.3e-18)
tmp = d1 * -d1;
elseif (d3 <= 1.62e+196)
tmp = d1 * (d4 + d2);
else
tmp = t_0;
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
code[d1_, d2_, d3_, d4_] := Block[{t$95$0 = (-N[(d1 * d3), $MachinePrecision])}, If[LessEqual[d3, -5e+108], t$95$0, If[LessEqual[d3, -2.3e-18], N[(d1 * (-d1)), $MachinePrecision], If[LessEqual[d3, 1.62e+196], N[(d1 * N[(d4 + d2), $MachinePrecision]), $MachinePrecision], t$95$0]]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
t_0 := -d1 \cdot d3\\
\mathbf{if}\;d3 \leq -5 \cdot 10^{+108}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d3 \leq -2.3 \cdot 10^{-18}:\\
\;\;\;\;d1 \cdot \left(-d1\right)\\
\mathbf{elif}\;d3 \leq 1.62 \cdot 10^{+196}:\\
\;\;\;\;d1 \cdot \left(d4 + d2\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if d3 < -4.99999999999999991e108 or 1.6200000000000001e196 < d3 Initial program 82.7%
Taylor expanded in d3 around inf
mul-1-negN/A
distribute-rgt-neg-inN/A
mul-1-negN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-lowering-neg.f6478.3
Simplified78.3%
if -4.99999999999999991e108 < d3 < -2.3000000000000001e-18Initial program 83.3%
Taylor expanded in d1 around inf
unpow2N/A
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-lowering-neg.f6463.2
Simplified63.2%
if -2.3000000000000001e-18 < d3 < 1.6200000000000001e196Initial program 89.6%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6492.4
Simplified92.4%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
+-lowering-+.f6472.0
Simplified72.0%
Final simplification72.6%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
(FPCore (d1 d2 d3 d4)
:precision binary64
(if (<= d4 -1.75e-274)
(* d1 d2)
(if (<= d4 5.6e-142)
(- (* d1 d3))
(if (<= d4 2.6e+88) (* d1 (- d1)) (* d4 d1)))))assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= -1.75e-274) {
tmp = d1 * d2;
} else if (d4 <= 5.6e-142) {
tmp = -(d1 * d3);
} else if (d4 <= 2.6e+88) {
tmp = d1 * -d1;
} else {
tmp = d4 * d1;
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d4 <= (-1.75d-274)) then
tmp = d1 * d2
else if (d4 <= 5.6d-142) then
tmp = -(d1 * d3)
else if (d4 <= 2.6d+88) then
tmp = d1 * -d1
else
tmp = d4 * d1
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= -1.75e-274) {
tmp = d1 * d2;
} else if (d4 <= 5.6e-142) {
tmp = -(d1 * d3);
} else if (d4 <= 2.6e+88) {
tmp = d1 * -d1;
} else {
tmp = d4 * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= -1.75e-274: tmp = d1 * d2 elif d4 <= 5.6e-142: tmp = -(d1 * d3) elif d4 <= 2.6e+88: tmp = d1 * -d1 else: tmp = d4 * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= -1.75e-274) tmp = Float64(d1 * d2); elseif (d4 <= 5.6e-142) tmp = Float64(-Float64(d1 * d3)); elseif (d4 <= 2.6e+88) tmp = Float64(d1 * Float64(-d1)); else tmp = Float64(d4 * d1); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d4 <= -1.75e-274)
tmp = d1 * d2;
elseif (d4 <= 5.6e-142)
tmp = -(d1 * d3);
elseif (d4 <= 2.6e+88)
tmp = d1 * -d1;
else
tmp = d4 * d1;
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d4, -1.75e-274], N[(d1 * d2), $MachinePrecision], If[LessEqual[d4, 5.6e-142], (-N[(d1 * d3), $MachinePrecision]), If[LessEqual[d4, 2.6e+88], N[(d1 * (-d1)), $MachinePrecision], N[(d4 * d1), $MachinePrecision]]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq -1.75 \cdot 10^{-274}:\\
\;\;\;\;d1 \cdot d2\\
\mathbf{elif}\;d4 \leq 5.6 \cdot 10^{-142}:\\
\;\;\;\;-d1 \cdot d3\\
\mathbf{elif}\;d4 \leq 2.6 \cdot 10^{+88}:\\
\;\;\;\;d1 \cdot \left(-d1\right)\\
\mathbf{else}:\\
\;\;\;\;d4 \cdot d1\\
\end{array}
\end{array}
if d4 < -1.74999999999999991e-274Initial program 86.9%
Taylor expanded in d2 around inf
*-lowering-*.f6426.5
Simplified26.5%
if -1.74999999999999991e-274 < d4 < 5.60000000000000009e-142Initial program 96.6%
Taylor expanded in d3 around inf
mul-1-negN/A
distribute-rgt-neg-inN/A
mul-1-negN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-lowering-neg.f6443.0
Simplified43.0%
if 5.60000000000000009e-142 < d4 < 2.6000000000000001e88Initial program 91.5%
Taylor expanded in d1 around inf
unpow2N/A
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-lowering-neg.f6442.9
Simplified42.9%
if 2.6000000000000001e88 < d4 Initial program 72.0%
Taylor expanded in d4 around inf
*-lowering-*.f6470.9
Simplified70.9%
Final simplification40.8%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d1 -3.8e+63) (* d1 (- (- d2 d3) d1)) (if (<= d1 1.9e+113) (* d1 (+ d2 (- d4 d3))) (* d1 (- (- d4 d3) d1)))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d1 <= -3.8e+63) {
tmp = d1 * ((d2 - d3) - d1);
} else if (d1 <= 1.9e+113) {
tmp = d1 * (d2 + (d4 - d3));
} else {
tmp = d1 * ((d4 - d3) - d1);
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d1 <= (-3.8d+63)) then
tmp = d1 * ((d2 - d3) - d1)
else if (d1 <= 1.9d+113) then
tmp = d1 * (d2 + (d4 - d3))
else
tmp = d1 * ((d4 - d3) - d1)
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d1 <= -3.8e+63) {
tmp = d1 * ((d2 - d3) - d1);
} else if (d1 <= 1.9e+113) {
tmp = d1 * (d2 + (d4 - d3));
} else {
tmp = d1 * ((d4 - d3) - d1);
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d1 <= -3.8e+63: tmp = d1 * ((d2 - d3) - d1) elif d1 <= 1.9e+113: tmp = d1 * (d2 + (d4 - d3)) else: tmp = d1 * ((d4 - d3) - d1) return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d1 <= -3.8e+63) tmp = Float64(d1 * Float64(Float64(d2 - d3) - d1)); elseif (d1 <= 1.9e+113) tmp = Float64(d1 * Float64(d2 + Float64(d4 - d3))); else tmp = Float64(d1 * Float64(Float64(d4 - d3) - d1)); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d1 <= -3.8e+63)
tmp = d1 * ((d2 - d3) - d1);
elseif (d1 <= 1.9e+113)
tmp = d1 * (d2 + (d4 - d3));
else
tmp = d1 * ((d4 - d3) - d1);
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d1, -3.8e+63], N[(d1 * N[(N[(d2 - d3), $MachinePrecision] - d1), $MachinePrecision]), $MachinePrecision], If[LessEqual[d1, 1.9e+113], N[(d1 * N[(d2 + N[(d4 - d3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(N[(d4 - d3), $MachinePrecision] - d1), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d1 \leq -3.8 \cdot 10^{+63}:\\
\;\;\;\;d1 \cdot \left(\left(d2 - d3\right) - d1\right)\\
\mathbf{elif}\;d1 \leq 1.9 \cdot 10^{+113}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d3\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(\left(d4 - d3\right) - d1\right)\\
\end{array}
\end{array}
if d1 < -3.8000000000000001e63Initial program 70.0%
+-commutativeN/A
associate--l+N/A
accelerator-lowering-fma.f64N/A
distribute-lft-out--N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6494.0
Applied egg-rr94.0%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
+-commutativeN/A
associate--r+N/A
--lowering--.f64N/A
--lowering--.f6491.6
Simplified91.6%
if -3.8000000000000001e63 < d1 < 1.9000000000000002e113Initial program 100.0%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
--lowering--.f6495.4
Simplified95.4%
if 1.9000000000000002e113 < d1 Initial program 61.4%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6493.1
Simplified93.1%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d1 -2e+63) (* d1 (- (- d2 d3) d1)) (if (<= d1 2.4e+148) (* d1 (+ d2 (- d4 d3))) (* d1 (- d4 d1)))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d1 <= -2e+63) {
tmp = d1 * ((d2 - d3) - d1);
} else if (d1 <= 2.4e+148) {
tmp = d1 * (d2 + (d4 - d3));
} else {
tmp = d1 * (d4 - d1);
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d1 <= (-2d+63)) then
tmp = d1 * ((d2 - d3) - d1)
else if (d1 <= 2.4d+148) then
tmp = d1 * (d2 + (d4 - d3))
else
tmp = d1 * (d4 - d1)
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d1 <= -2e+63) {
tmp = d1 * ((d2 - d3) - d1);
} else if (d1 <= 2.4e+148) {
tmp = d1 * (d2 + (d4 - d3));
} else {
tmp = d1 * (d4 - d1);
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d1 <= -2e+63: tmp = d1 * ((d2 - d3) - d1) elif d1 <= 2.4e+148: tmp = d1 * (d2 + (d4 - d3)) else: tmp = d1 * (d4 - d1) return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d1 <= -2e+63) tmp = Float64(d1 * Float64(Float64(d2 - d3) - d1)); elseif (d1 <= 2.4e+148) tmp = Float64(d1 * Float64(d2 + Float64(d4 - d3))); else tmp = Float64(d1 * Float64(d4 - d1)); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d1 <= -2e+63)
tmp = d1 * ((d2 - d3) - d1);
elseif (d1 <= 2.4e+148)
tmp = d1 * (d2 + (d4 - d3));
else
tmp = d1 * (d4 - d1);
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d1, -2e+63], N[(d1 * N[(N[(d2 - d3), $MachinePrecision] - d1), $MachinePrecision]), $MachinePrecision], If[LessEqual[d1, 2.4e+148], N[(d1 * N[(d2 + N[(d4 - d3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d4 - d1), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d1 \leq -2 \cdot 10^{+63}:\\
\;\;\;\;d1 \cdot \left(\left(d2 - d3\right) - d1\right)\\
\mathbf{elif}\;d1 \leq 2.4 \cdot 10^{+148}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d3\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 - d1\right)\\
\end{array}
\end{array}
if d1 < -2.00000000000000012e63Initial program 70.0%
+-commutativeN/A
associate--l+N/A
accelerator-lowering-fma.f64N/A
distribute-lft-out--N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6494.0
Applied egg-rr94.0%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
+-commutativeN/A
associate--r+N/A
--lowering--.f64N/A
--lowering--.f6491.6
Simplified91.6%
if -2.00000000000000012e63 < d1 < 2.39999999999999995e148Initial program 100.0%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
--lowering--.f6495.1
Simplified95.1%
if 2.39999999999999995e148 < d1 Initial program 56.4%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6494.9
Simplified94.9%
Taylor expanded in d2 around 0
*-lowering-*.f64N/A
--lowering--.f6489.7
Simplified89.7%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d1 -1.15e+65) (* d1 (+ d2 (- d4 d1))) (if (<= d1 1.8e+150) (* d1 (+ d2 (- d4 d3))) (* d1 (- d4 d1)))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d1 <= -1.15e+65) {
tmp = d1 * (d2 + (d4 - d1));
} else if (d1 <= 1.8e+150) {
tmp = d1 * (d2 + (d4 - d3));
} else {
tmp = d1 * (d4 - d1);
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d1 <= (-1.15d+65)) then
tmp = d1 * (d2 + (d4 - d1))
else if (d1 <= 1.8d+150) then
tmp = d1 * (d2 + (d4 - d3))
else
tmp = d1 * (d4 - d1)
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d1 <= -1.15e+65) {
tmp = d1 * (d2 + (d4 - d1));
} else if (d1 <= 1.8e+150) {
tmp = d1 * (d2 + (d4 - d3));
} else {
tmp = d1 * (d4 - d1);
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d1 <= -1.15e+65: tmp = d1 * (d2 + (d4 - d1)) elif d1 <= 1.8e+150: tmp = d1 * (d2 + (d4 - d3)) else: tmp = d1 * (d4 - d1) return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d1 <= -1.15e+65) tmp = Float64(d1 * Float64(d2 + Float64(d4 - d1))); elseif (d1 <= 1.8e+150) tmp = Float64(d1 * Float64(d2 + Float64(d4 - d3))); else tmp = Float64(d1 * Float64(d4 - d1)); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d1 <= -1.15e+65)
tmp = d1 * (d2 + (d4 - d1));
elseif (d1 <= 1.8e+150)
tmp = d1 * (d2 + (d4 - d3));
else
tmp = d1 * (d4 - d1);
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d1, -1.15e+65], N[(d1 * N[(d2 + N[(d4 - d1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[d1, 1.8e+150], N[(d1 * N[(d2 + N[(d4 - d3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d4 - d1), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d1 \leq -1.15 \cdot 10^{+65}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d1\right)\right)\\
\mathbf{elif}\;d1 \leq 1.8 \cdot 10^{+150}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d3\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 - d1\right)\\
\end{array}
\end{array}
if d1 < -1.15e65Initial program 70.0%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6492.2
Simplified92.2%
if -1.15e65 < d1 < 1.79999999999999993e150Initial program 100.0%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
--lowering--.f6495.1
Simplified95.1%
if 1.79999999999999993e150 < d1 Initial program 56.4%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6494.9
Simplified94.9%
Taylor expanded in d2 around 0
*-lowering-*.f64N/A
--lowering--.f6489.7
Simplified89.7%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d3 -1.8e-16) (* d1 (- (- d3) d1)) (if (<= d3 2.8e+129) (* d1 (+ d2 (- d4 d1))) (* d1 (- d4 d3)))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d3 <= -1.8e-16) {
tmp = d1 * (-d3 - d1);
} else if (d3 <= 2.8e+129) {
tmp = d1 * (d2 + (d4 - d1));
} else {
tmp = d1 * (d4 - d3);
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d3 <= (-1.8d-16)) then
tmp = d1 * (-d3 - d1)
else if (d3 <= 2.8d+129) then
tmp = d1 * (d2 + (d4 - d1))
else
tmp = d1 * (d4 - d3)
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d3 <= -1.8e-16) {
tmp = d1 * (-d3 - d1);
} else if (d3 <= 2.8e+129) {
tmp = d1 * (d2 + (d4 - d1));
} else {
tmp = d1 * (d4 - d3);
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d3 <= -1.8e-16: tmp = d1 * (-d3 - d1) elif d3 <= 2.8e+129: tmp = d1 * (d2 + (d4 - d1)) else: tmp = d1 * (d4 - d3) return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d3 <= -1.8e-16) tmp = Float64(d1 * Float64(Float64(-d3) - d1)); elseif (d3 <= 2.8e+129) tmp = Float64(d1 * Float64(d2 + Float64(d4 - d1))); else tmp = Float64(d1 * Float64(d4 - d3)); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d3 <= -1.8e-16)
tmp = d1 * (-d3 - d1);
elseif (d3 <= 2.8e+129)
tmp = d1 * (d2 + (d4 - d1));
else
tmp = d1 * (d4 - d3);
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d3, -1.8e-16], N[(d1 * N[((-d3) - d1), $MachinePrecision]), $MachinePrecision], If[LessEqual[d3, 2.8e+129], N[(d1 * N[(d2 + N[(d4 - d1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d4 - d3), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d3 \leq -1.8 \cdot 10^{-16}:\\
\;\;\;\;d1 \cdot \left(\left(-d3\right) - d1\right)\\
\mathbf{elif}\;d3 \leq 2.8 \cdot 10^{+129}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 - d3\right)\\
\end{array}
\end{array}
if d3 < -1.79999999999999991e-16Initial program 83.6%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6491.0
Simplified91.0%
Taylor expanded in d4 around 0
mul-1-negN/A
neg-lowering-neg.f6484.7
Simplified84.7%
if -1.79999999999999991e-16 < d3 < 2.79999999999999975e129Initial program 90.1%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6495.4
Simplified95.4%
if 2.79999999999999975e129 < d3 Initial program 81.5%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6489.5
Simplified89.5%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
--lowering--.f6488.5
Simplified88.5%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d4 3.3e-145) (* d1 (- d2 d3)) (if (<= d4 1.9e+60) (* d1 (- d2 d1)) (* d1 (- d4 d3)))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 3.3e-145) {
tmp = d1 * (d2 - d3);
} else if (d4 <= 1.9e+60) {
tmp = d1 * (d2 - d1);
} else {
tmp = d1 * (d4 - d3);
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d4 <= 3.3d-145) then
tmp = d1 * (d2 - d3)
else if (d4 <= 1.9d+60) then
tmp = d1 * (d2 - d1)
else
tmp = d1 * (d4 - d3)
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 3.3e-145) {
tmp = d1 * (d2 - d3);
} else if (d4 <= 1.9e+60) {
tmp = d1 * (d2 - d1);
} else {
tmp = d1 * (d4 - d3);
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= 3.3e-145: tmp = d1 * (d2 - d3) elif d4 <= 1.9e+60: tmp = d1 * (d2 - d1) else: tmp = d1 * (d4 - d3) return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= 3.3e-145) tmp = Float64(d1 * Float64(d2 - d3)); elseif (d4 <= 1.9e+60) tmp = Float64(d1 * Float64(d2 - d1)); else tmp = Float64(d1 * Float64(d4 - d3)); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d4 <= 3.3e-145)
tmp = d1 * (d2 - d3);
elseif (d4 <= 1.9e+60)
tmp = d1 * (d2 - d1);
else
tmp = d1 * (d4 - d3);
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d4, 3.3e-145], N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 1.9e+60], N[(d1 * N[(d2 - d1), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d4 - d3), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq 3.3 \cdot 10^{-145}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\mathbf{elif}\;d4 \leq 1.9 \cdot 10^{+60}:\\
\;\;\;\;d1 \cdot \left(d2 - d1\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 - d3\right)\\
\end{array}
\end{array}
if d4 < 3.29999999999999981e-145Initial program 90.3%
+-commutativeN/A
associate--l+N/A
accelerator-lowering-fma.f64N/A
distribute-lft-out--N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6498.1
Applied egg-rr98.1%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
+-commutativeN/A
associate--r+N/A
--lowering--.f64N/A
--lowering--.f6484.4
Simplified84.4%
Taylor expanded in d1 around 0
+-rgt-identityN/A
+-commutativeN/A
*-rgt-identityN/A
cancel-sign-subN/A
mul-1-negN/A
*-inversesN/A
associate-/l*N/A
associate-*l/N/A
associate-*r/N/A
*-commutativeN/A
neg-sub0N/A
*-lowering-*.f64N/A
neg-sub0N/A
*-commutativeN/A
associate-*r/N/A
associate-*l/N/A
associate-/l*N/A
*-inversesN/A
mul-1-negN/A
cancel-sign-subN/A
*-rgt-identityN/A
+-commutativeN/A
Simplified63.1%
if 3.29999999999999981e-145 < d4 < 1.90000000000000005e60Initial program 92.1%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6482.4
Simplified82.4%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
--lowering--.f6468.5
Simplified68.5%
if 1.90000000000000005e60 < d4 Initial program 74.9%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6487.2
Simplified87.2%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
--lowering--.f6476.1
Simplified76.1%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d4 4.5e-143) (* d1 (- d2 d3)) (if (<= d4 4e+88) (* d1 (- d2 d1)) (* d1 (+ d4 d2)))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 4.5e-143) {
tmp = d1 * (d2 - d3);
} else if (d4 <= 4e+88) {
tmp = d1 * (d2 - d1);
} else {
tmp = d1 * (d4 + d2);
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d4 <= 4.5d-143) then
tmp = d1 * (d2 - d3)
else if (d4 <= 4d+88) then
tmp = d1 * (d2 - d1)
else
tmp = d1 * (d4 + d2)
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 4.5e-143) {
tmp = d1 * (d2 - d3);
} else if (d4 <= 4e+88) {
tmp = d1 * (d2 - d1);
} else {
tmp = d1 * (d4 + d2);
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= 4.5e-143: tmp = d1 * (d2 - d3) elif d4 <= 4e+88: tmp = d1 * (d2 - d1) else: tmp = d1 * (d4 + d2) return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= 4.5e-143) tmp = Float64(d1 * Float64(d2 - d3)); elseif (d4 <= 4e+88) tmp = Float64(d1 * Float64(d2 - d1)); else tmp = Float64(d1 * Float64(d4 + d2)); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d4 <= 4.5e-143)
tmp = d1 * (d2 - d3);
elseif (d4 <= 4e+88)
tmp = d1 * (d2 - d1);
else
tmp = d1 * (d4 + d2);
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d4, 4.5e-143], N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 4e+88], N[(d1 * N[(d2 - d1), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d4 + d2), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq 4.5 \cdot 10^{-143}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\mathbf{elif}\;d4 \leq 4 \cdot 10^{+88}:\\
\;\;\;\;d1 \cdot \left(d2 - d1\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 + d2\right)\\
\end{array}
\end{array}
if d4 < 4.5e-143Initial program 90.3%
+-commutativeN/A
associate--l+N/A
accelerator-lowering-fma.f64N/A
distribute-lft-out--N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6498.1
Applied egg-rr98.1%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
+-commutativeN/A
associate--r+N/A
--lowering--.f64N/A
--lowering--.f6484.4
Simplified84.4%
Taylor expanded in d1 around 0
+-rgt-identityN/A
+-commutativeN/A
*-rgt-identityN/A
cancel-sign-subN/A
mul-1-negN/A
*-inversesN/A
associate-/l*N/A
associate-*l/N/A
associate-*r/N/A
*-commutativeN/A
neg-sub0N/A
*-lowering-*.f64N/A
neg-sub0N/A
*-commutativeN/A
associate-*r/N/A
associate-*l/N/A
associate-/l*N/A
*-inversesN/A
mul-1-negN/A
cancel-sign-subN/A
*-rgt-identityN/A
+-commutativeN/A
Simplified63.1%
if 4.5e-143 < d4 < 3.99999999999999984e88Initial program 91.5%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6481.7
Simplified81.7%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
--lowering--.f6465.9
Simplified65.9%
if 3.99999999999999984e88 < d4 Initial program 72.0%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6488.6
Simplified88.6%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
+-lowering-+.f6484.2
Simplified84.2%
Final simplification67.2%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d2 -3.5e+38) (* d1 d2) (if (<= d2 1.5e-308) (* d1 (- d1)) (* d4 d1))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -3.5e+38) {
tmp = d1 * d2;
} else if (d2 <= 1.5e-308) {
tmp = d1 * -d1;
} else {
tmp = d4 * d1;
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d2 <= (-3.5d+38)) then
tmp = d1 * d2
else if (d2 <= 1.5d-308) then
tmp = d1 * -d1
else
tmp = d4 * d1
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -3.5e+38) {
tmp = d1 * d2;
} else if (d2 <= 1.5e-308) {
tmp = d1 * -d1;
} else {
tmp = d4 * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d2 <= -3.5e+38: tmp = d1 * d2 elif d2 <= 1.5e-308: tmp = d1 * -d1 else: tmp = d4 * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -3.5e+38) tmp = Float64(d1 * d2); elseif (d2 <= 1.5e-308) tmp = Float64(d1 * Float64(-d1)); else tmp = Float64(d4 * d1); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d2 <= -3.5e+38)
tmp = d1 * d2;
elseif (d2 <= 1.5e-308)
tmp = d1 * -d1;
else
tmp = d4 * d1;
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d2, -3.5e+38], N[(d1 * d2), $MachinePrecision], If[LessEqual[d2, 1.5e-308], N[(d1 * (-d1)), $MachinePrecision], N[(d4 * d1), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -3.5 \cdot 10^{+38}:\\
\;\;\;\;d1 \cdot d2\\
\mathbf{elif}\;d2 \leq 1.5 \cdot 10^{-308}:\\
\;\;\;\;d1 \cdot \left(-d1\right)\\
\mathbf{else}:\\
\;\;\;\;d4 \cdot d1\\
\end{array}
\end{array}
if d2 < -3.50000000000000002e38Initial program 86.2%
Taylor expanded in d2 around inf
*-lowering-*.f6459.3
Simplified59.3%
if -3.50000000000000002e38 < d2 < 1.4999999999999999e-308Initial program 90.1%
Taylor expanded in d1 around inf
unpow2N/A
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-lowering-neg.f6436.3
Simplified36.3%
if 1.4999999999999999e-308 < d2 Initial program 86.3%
Taylor expanded in d4 around inf
*-lowering-*.f6428.9
Simplified28.9%
Final simplification38.1%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d4 1.58e+87) (* d1 (- d2 d1)) (* d1 (+ d4 d2))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 1.58e+87) {
tmp = d1 * (d2 - d1);
} else {
tmp = d1 * (d4 + d2);
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d4 <= 1.58d+87) then
tmp = d1 * (d2 - d1)
else
tmp = d1 * (d4 + d2)
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 1.58e+87) {
tmp = d1 * (d2 - d1);
} else {
tmp = d1 * (d4 + d2);
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= 1.58e+87: tmp = d1 * (d2 - d1) else: tmp = d1 * (d4 + d2) return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= 1.58e+87) tmp = Float64(d1 * Float64(d2 - d1)); else tmp = Float64(d1 * Float64(d4 + d2)); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d4 <= 1.58e+87)
tmp = d1 * (d2 - d1);
else
tmp = d1 * (d4 + d2);
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d4, 1.58e+87], N[(d1 * N[(d2 - d1), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d4 + d2), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq 1.58 \cdot 10^{+87}:\\
\;\;\;\;d1 \cdot \left(d2 - d1\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 + d2\right)\\
\end{array}
\end{array}
if d4 < 1.58000000000000005e87Initial program 90.6%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6475.1
Simplified75.1%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
--lowering--.f6459.4
Simplified59.4%
if 1.58000000000000005e87 < d4 Initial program 72.0%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6488.6
Simplified88.6%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
+-lowering-+.f6484.2
Simplified84.2%
Final simplification63.6%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d4 1.1e+60) (* d1 d2) (* d4 d1)))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 1.1e+60) {
tmp = d1 * d2;
} else {
tmp = d4 * d1;
}
return tmp;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d4 <= 1.1d+60) then
tmp = d1 * d2
else
tmp = d4 * d1
end if
code = tmp
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 1.1e+60) {
tmp = d1 * d2;
} else {
tmp = d4 * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= 1.1e+60: tmp = d1 * d2 else: tmp = d4 * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= 1.1e+60) tmp = Float64(d1 * d2); else tmp = Float64(d4 * d1); end return tmp end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp_2 = code(d1, d2, d3, d4)
tmp = 0.0;
if (d4 <= 1.1e+60)
tmp = d1 * d2;
else
tmp = d4 * d1;
end
tmp_2 = tmp;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := If[LessEqual[d4, 1.1e+60], N[(d1 * d2), $MachinePrecision], N[(d4 * d1), $MachinePrecision]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq 1.1 \cdot 10^{+60}:\\
\;\;\;\;d1 \cdot d2\\
\mathbf{else}:\\
\;\;\;\;d4 \cdot d1\\
\end{array}
\end{array}
if d4 < 1.09999999999999998e60Initial program 90.7%
Taylor expanded in d2 around inf
*-lowering-*.f6433.9
Simplified33.9%
if 1.09999999999999998e60 < d4 Initial program 74.9%
Taylor expanded in d4 around inf
*-lowering-*.f6464.9
Simplified64.9%
Final simplification40.2%
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. (FPCore (d1 d2 d3 d4) :precision binary64 (* d1 d2))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
return d1 * d2;
}
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function.
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
code = d1 * d2
end function
assert d1 < d2 && d2 < d3 && d3 < d4;
public static double code(double d1, double d2, double d3, double d4) {
return d1 * d2;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): return d1 * d2
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) return Float64(d1 * d2) end
d1, d2, d3, d4 = num2cell(sort([d1, d2, d3, d4])){:}
function tmp = code(d1, d2, d3, d4)
tmp = d1 * d2;
end
NOTE: d1, d2, d3, and d4 should be sorted in increasing order before calling this function. code[d1_, d2_, d3_, d4_] := N[(d1 * d2), $MachinePrecision]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
d1 \cdot d2
\end{array}
Initial program 87.5%
Taylor expanded in d2 around inf
*-lowering-*.f6431.1
Simplified31.1%
(FPCore (d1 d2 d3 d4) :precision binary64 (* d1 (- (+ (- d2 d3) d4) d1)))
double code(double d1, double d2, double d3, double d4) {
return d1 * (((d2 - d3) + d4) - d1);
}
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
code = d1 * (((d2 - d3) + d4) - d1)
end function
public static double code(double d1, double d2, double d3, double d4) {
return d1 * (((d2 - d3) + d4) - d1);
}
def code(d1, d2, d3, d4): return d1 * (((d2 - d3) + d4) - d1)
function code(d1, d2, d3, d4) return Float64(d1 * Float64(Float64(Float64(d2 - d3) + d4) - d1)) end
function tmp = code(d1, d2, d3, d4) tmp = d1 * (((d2 - d3) + d4) - d1); end
code[d1_, d2_, d3_, d4_] := N[(d1 * N[(N[(N[(d2 - d3), $MachinePrecision] + d4), $MachinePrecision] - d1), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
d1 \cdot \left(\left(\left(d2 - d3\right) + d4\right) - d1\right)
\end{array}
herbie shell --seed 2024205
(FPCore (d1 d2 d3 d4)
:name "FastMath dist4"
:precision binary64
:alt
(! :herbie-platform default (* d1 (- (+ (- d2 d3) d4) d1)))
(- (+ (- (* d1 d2) (* d1 d3)) (* d4 d1)) (* d1 d1)))