
(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 17 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 (<= d2 -2.1e+185) (* (- (- d2 d1) d3) d1) (fma d2 d1 (* (- (- d4 d1) d3) d1))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -2.1e+185) {
tmp = ((d2 - d1) - d3) * d1;
} else {
tmp = fma(d2, d1, (((d4 - d1) - d3) * d1));
}
return tmp;
}
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -2.1e+185) tmp = Float64(Float64(Float64(d2 - d1) - d3) * d1); else tmp = fma(d2, d1, Float64(Float64(Float64(d4 - d1) - d3) * 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[d2, -2.1e+185], N[(N[(N[(d2 - d1), $MachinePrecision] - d3), $MachinePrecision] * d1), $MachinePrecision], N[(d2 * d1 + N[(N[(N[(d4 - d1), $MachinePrecision] - d3), $MachinePrecision] * d1), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -2.1 \cdot 10^{+185}:\\
\;\;\;\;\left(\left(d2 - d1\right) - d3\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(d2, d1, \left(\left(d4 - d1\right) - d3\right) \cdot d1\right)\\
\end{array}
\end{array}
if d2 < -2.1e185Initial program 77.3%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6488.6
Applied rewrites88.6%
Taylor expanded in d4 around 0
+-commutativeN/A
unpow2N/A
distribute-lft-inN/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
associate--r+N/A
lower--.f64N/A
lower--.f64100.0
Applied rewrites100.0%
if -2.1e185 < d2 Initial program 88.0%
lift--.f64N/A
lift-+.f64N/A
lift--.f64N/A
associate-+l-N/A
associate--l-N/A
sub-negN/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f64N/A
lower-neg.f64N/A
associate-+l-N/A
lift-*.f64N/A
lift-*.f64N/A
lift-*.f64N/A
distribute-rgt-out--N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6499.1
Applied rewrites99.1%
Final simplification99.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 (<= (- (+ (* d4 d1) (- (* d1 d2) (* d3 d1))) (* d1 d1)) INFINITY) (fma (- d2 d3) d1 (* (- d4 d1) d1)) (* (- (+ d4 d2) d1) d1)))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if ((((d4 * d1) + ((d1 * d2) - (d3 * d1))) - (d1 * d1)) <= ((double) INFINITY)) {
tmp = fma((d2 - d3), d1, ((d4 - d1) * d1));
} else {
tmp = ((d4 + d2) - d1) * d1;
}
return tmp;
}
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (Float64(Float64(Float64(d4 * d1) + Float64(Float64(d1 * d2) - Float64(d3 * d1))) - Float64(d1 * d1)) <= Inf) tmp = fma(Float64(d2 - d3), d1, Float64(Float64(d4 - d1) * d1)); else tmp = Float64(Float64(Float64(d4 + d2) - d1) * 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[N[(N[(N[(d4 * d1), $MachinePrecision] + N[(N[(d1 * d2), $MachinePrecision] - N[(d3 * d1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] - N[(d1 * d1), $MachinePrecision]), $MachinePrecision], Infinity], N[(N[(d2 - d3), $MachinePrecision] * d1 + N[(N[(d4 - d1), $MachinePrecision] * d1), $MachinePrecision]), $MachinePrecision], N[(N[(N[(d4 + d2), $MachinePrecision] - d1), $MachinePrecision] * d1), $MachinePrecision]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;\left(d4 \cdot d1 + \left(d1 \cdot d2 - d3 \cdot d1\right)\right) - d1 \cdot d1 \leq \infty:\\
\;\;\;\;\mathsf{fma}\left(d2 - d3, d1, \left(d4 - d1\right) \cdot d1\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(d4 + d2\right) - d1\right) \cdot d1\\
\end{array}
\end{array}
if (-.f64 (+.f64 (-.f64 (*.f64 d1 d2) (*.f64 d1 d3)) (*.f64 d4 d1)) (*.f64 d1 d1)) < +inf.0Initial program 100.0%
lift--.f64N/A
lift-+.f64N/A
associate--l+N/A
lift--.f64N/A
lift-*.f64N/A
lift-*.f64N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-fma.f64N/A
lower--.f64N/A
lift-*.f64N/A
lift-*.f64N/A
distribute-rgt-out--N/A
lower-*.f64N/A
lower--.f64100.0
Applied rewrites100.0%
if +inf.0 < (-.f64 (+.f64 (-.f64 (*.f64 d1 d2) (*.f64 d1 d3)) (*.f64 d4 d1)) (*.f64 d1 d1)) Initial program 0.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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6493.9
Applied rewrites93.9%
Final simplification99.2%
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 (* (- d2 d3) d1)) (t_1 (* (- d2 d1) d1)))
(if (<= d3 -3.5e+78)
t_0
(if (<= d3 -4e-213)
t_1
(if (<= d3 5.5e-15) (* (+ d4 d2) d1) (if (<= d3 1.5e+166) t_1 t_0))))))assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double t_0 = (d2 - d3) * d1;
double t_1 = (d2 - d1) * d1;
double tmp;
if (d3 <= -3.5e+78) {
tmp = t_0;
} else if (d3 <= -4e-213) {
tmp = t_1;
} else if (d3 <= 5.5e-15) {
tmp = (d4 + d2) * d1;
} else if (d3 <= 1.5e+166) {
tmp = t_1;
} 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) :: t_1
real(8) :: tmp
t_0 = (d2 - d3) * d1
t_1 = (d2 - d1) * d1
if (d3 <= (-3.5d+78)) then
tmp = t_0
else if (d3 <= (-4d-213)) then
tmp = t_1
else if (d3 <= 5.5d-15) then
tmp = (d4 + d2) * d1
else if (d3 <= 1.5d+166) then
tmp = t_1
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 = (d2 - d3) * d1;
double t_1 = (d2 - d1) * d1;
double tmp;
if (d3 <= -3.5e+78) {
tmp = t_0;
} else if (d3 <= -4e-213) {
tmp = t_1;
} else if (d3 <= 5.5e-15) {
tmp = (d4 + d2) * d1;
} else if (d3 <= 1.5e+166) {
tmp = t_1;
} else {
tmp = t_0;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): t_0 = (d2 - d3) * d1 t_1 = (d2 - d1) * d1 tmp = 0 if d3 <= -3.5e+78: tmp = t_0 elif d3 <= -4e-213: tmp = t_1 elif d3 <= 5.5e-15: tmp = (d4 + d2) * d1 elif d3 <= 1.5e+166: tmp = t_1 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(d2 - d3) * d1) t_1 = Float64(Float64(d2 - d1) * d1) tmp = 0.0 if (d3 <= -3.5e+78) tmp = t_0; elseif (d3 <= -4e-213) tmp = t_1; elseif (d3 <= 5.5e-15) tmp = Float64(Float64(d4 + d2) * d1); elseif (d3 <= 1.5e+166) tmp = t_1; 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 = (d2 - d3) * d1;
t_1 = (d2 - d1) * d1;
tmp = 0.0;
if (d3 <= -3.5e+78)
tmp = t_0;
elseif (d3 <= -4e-213)
tmp = t_1;
elseif (d3 <= 5.5e-15)
tmp = (d4 + d2) * d1;
elseif (d3 <= 1.5e+166)
tmp = t_1;
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[(N[(d2 - d3), $MachinePrecision] * d1), $MachinePrecision]}, Block[{t$95$1 = N[(N[(d2 - d1), $MachinePrecision] * d1), $MachinePrecision]}, If[LessEqual[d3, -3.5e+78], t$95$0, If[LessEqual[d3, -4e-213], t$95$1, If[LessEqual[d3, 5.5e-15], N[(N[(d4 + d2), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d3, 1.5e+166], t$95$1, t$95$0]]]]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
t_0 := \left(d2 - d3\right) \cdot d1\\
t_1 := \left(d2 - d1\right) \cdot d1\\
\mathbf{if}\;d3 \leq -3.5 \cdot 10^{+78}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d3 \leq -4 \cdot 10^{-213}:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;d3 \leq 5.5 \cdot 10^{-15}:\\
\;\;\;\;\left(d4 + d2\right) \cdot d1\\
\mathbf{elif}\;d3 \leq 1.5 \cdot 10^{+166}:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if d3 < -3.5000000000000001e78 or 1.49999999999999999e166 < d3 Initial program 86.5%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6417.0
Applied rewrites17.0%
Taylor expanded in d4 around 0
+-commutativeN/A
unpow2N/A
distribute-lft-inN/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
associate--r+N/A
lower--.f64N/A
lower--.f6488.6
Applied rewrites88.6%
Taylor expanded in d1 around 0
Applied rewrites81.3%
if -3.5000000000000001e78 < d3 < -3.9999999999999998e-213 or 5.5000000000000002e-15 < d3 < 1.49999999999999999e166Initial program 84.9%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6496.0
Applied rewrites96.0%
Taylor expanded in d4 around 0
Applied rewrites68.7%
if -3.9999999999999998e-213 < d3 < 5.5000000000000002e-15Initial 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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6498.1
Applied rewrites98.1%
Taylor expanded in d1 around 0
Applied rewrites77.3%
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 -1.3e+43)
(* (- d2 d1) d1)
(if (<= d2 -2.8e-9)
(* (- d2 d3) d1)
(if (<= d2 2.25e-251) (* (- (- d3) d1) d1) (* (- d4 d3) d1)))))assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -1.3e+43) {
tmp = (d2 - d1) * d1;
} else if (d2 <= -2.8e-9) {
tmp = (d2 - d3) * d1;
} else if (d2 <= 2.25e-251) {
tmp = (-d3 - d1) * d1;
} else {
tmp = (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 (d2 <= (-1.3d+43)) then
tmp = (d2 - d1) * d1
else if (d2 <= (-2.8d-9)) then
tmp = (d2 - d3) * d1
else if (d2 <= 2.25d-251) then
tmp = (-d3 - d1) * d1
else
tmp = (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 (d2 <= -1.3e+43) {
tmp = (d2 - d1) * d1;
} else if (d2 <= -2.8e-9) {
tmp = (d2 - d3) * d1;
} else if (d2 <= 2.25e-251) {
tmp = (-d3 - d1) * d1;
} else {
tmp = (d4 - d3) * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d2 <= -1.3e+43: tmp = (d2 - d1) * d1 elif d2 <= -2.8e-9: tmp = (d2 - d3) * d1 elif d2 <= 2.25e-251: tmp = (-d3 - d1) * d1 else: tmp = (d4 - d3) * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -1.3e+43) tmp = Float64(Float64(d2 - d1) * d1); elseif (d2 <= -2.8e-9) tmp = Float64(Float64(d2 - d3) * d1); elseif (d2 <= 2.25e-251) tmp = Float64(Float64(Float64(-d3) - d1) * d1); else tmp = 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 (d2 <= -1.3e+43)
tmp = (d2 - d1) * d1;
elseif (d2 <= -2.8e-9)
tmp = (d2 - d3) * d1;
elseif (d2 <= 2.25e-251)
tmp = (-d3 - d1) * d1;
else
tmp = (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[d2, -1.3e+43], N[(N[(d2 - d1), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d2, -2.8e-9], N[(N[(d2 - d3), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d2, 2.25e-251], N[(N[((-d3) - d1), $MachinePrecision] * d1), $MachinePrecision], N[(N[(d4 - d3), $MachinePrecision] * d1), $MachinePrecision]]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -1.3 \cdot 10^{+43}:\\
\;\;\;\;\left(d2 - d1\right) \cdot d1\\
\mathbf{elif}\;d2 \leq -2.8 \cdot 10^{-9}:\\
\;\;\;\;\left(d2 - d3\right) \cdot d1\\
\mathbf{elif}\;d2 \leq 2.25 \cdot 10^{-251}:\\
\;\;\;\;\left(\left(-d3\right) - d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\left(d4 - d3\right) \cdot d1\\
\end{array}
\end{array}
if d2 < -1.3000000000000001e43Initial program 74.9%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6489.4
Applied rewrites89.4%
Taylor expanded in d4 around 0
Applied rewrites77.3%
if -1.3000000000000001e43 < d2 < -2.79999999999999984e-9Initial program 92.9%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6425.8
Applied rewrites25.8%
Taylor expanded in d4 around 0
+-commutativeN/A
unpow2N/A
distribute-lft-inN/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
associate--r+N/A
lower--.f64N/A
lower--.f6465.0
Applied rewrites65.0%
Taylor expanded in d1 around 0
Applied rewrites72.1%
if -2.79999999999999984e-9 < d2 < 2.24999999999999989e-251Initial program 92.8%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6498.7
Applied rewrites98.7%
Taylor expanded in d4 around 0
Applied rewrites69.1%
if 2.24999999999999989e-251 < d2 Initial program 88.8%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6477.7
Applied rewrites77.7%
Taylor expanded in d1 around 0
Applied rewrites57.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 (<= d2 -1.3e+43)
(* (- d2 d1) d1)
(if (<= d2 -5e-54)
(* (- d2 d3) d1)
(if (<= d2 3.7e-251) (* (- d4 d1) d1) (* (- d4 d3) d1)))))assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -1.3e+43) {
tmp = (d2 - d1) * d1;
} else if (d2 <= -5e-54) {
tmp = (d2 - d3) * d1;
} else if (d2 <= 3.7e-251) {
tmp = (d4 - d1) * d1;
} else {
tmp = (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 (d2 <= (-1.3d+43)) then
tmp = (d2 - d1) * d1
else if (d2 <= (-5d-54)) then
tmp = (d2 - d3) * d1
else if (d2 <= 3.7d-251) then
tmp = (d4 - d1) * d1
else
tmp = (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 (d2 <= -1.3e+43) {
tmp = (d2 - d1) * d1;
} else if (d2 <= -5e-54) {
tmp = (d2 - d3) * d1;
} else if (d2 <= 3.7e-251) {
tmp = (d4 - d1) * d1;
} else {
tmp = (d4 - d3) * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d2 <= -1.3e+43: tmp = (d2 - d1) * d1 elif d2 <= -5e-54: tmp = (d2 - d3) * d1 elif d2 <= 3.7e-251: tmp = (d4 - d1) * d1 else: tmp = (d4 - d3) * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -1.3e+43) tmp = Float64(Float64(d2 - d1) * d1); elseif (d2 <= -5e-54) tmp = Float64(Float64(d2 - d3) * d1); elseif (d2 <= 3.7e-251) tmp = Float64(Float64(d4 - d1) * d1); else tmp = 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 (d2 <= -1.3e+43)
tmp = (d2 - d1) * d1;
elseif (d2 <= -5e-54)
tmp = (d2 - d3) * d1;
elseif (d2 <= 3.7e-251)
tmp = (d4 - d1) * d1;
else
tmp = (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[d2, -1.3e+43], N[(N[(d2 - d1), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d2, -5e-54], N[(N[(d2 - d3), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d2, 3.7e-251], N[(N[(d4 - d1), $MachinePrecision] * d1), $MachinePrecision], N[(N[(d4 - d3), $MachinePrecision] * d1), $MachinePrecision]]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -1.3 \cdot 10^{+43}:\\
\;\;\;\;\left(d2 - d1\right) \cdot d1\\
\mathbf{elif}\;d2 \leq -5 \cdot 10^{-54}:\\
\;\;\;\;\left(d2 - d3\right) \cdot d1\\
\mathbf{elif}\;d2 \leq 3.7 \cdot 10^{-251}:\\
\;\;\;\;\left(d4 - d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\left(d4 - d3\right) \cdot d1\\
\end{array}
\end{array}
if d2 < -1.3000000000000001e43Initial program 74.9%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6489.4
Applied rewrites89.4%
Taylor expanded in d4 around 0
Applied rewrites77.3%
if -1.3000000000000001e43 < d2 < -5.00000000000000015e-54Initial program 89.5%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6425.1
Applied rewrites25.1%
Taylor expanded in d4 around 0
+-commutativeN/A
unpow2N/A
distribute-lft-inN/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
associate--r+N/A
lower--.f64N/A
lower--.f6474.2
Applied rewrites74.2%
Taylor expanded in d1 around 0
Applied rewrites64.2%
if -5.00000000000000015e-54 < d2 < 3.69999999999999992e-251Initial program 93.8%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f64100.0
Applied rewrites100.0%
Taylor expanded in d3 around 0
Applied rewrites76.8%
if 3.69999999999999992e-251 < d2 Initial program 88.8%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6477.7
Applied rewrites77.7%
Taylor expanded in d1 around 0
Applied rewrites57.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 (<= d2 -3.2e+35)
(* d1 d2)
(if (<= d2 -4e-127)
(* (- d1) d3)
(if (<= d2 2.25e-251) (* (- 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.2e+35) {
tmp = d1 * d2;
} else if (d2 <= -4e-127) {
tmp = -d1 * d3;
} else if (d2 <= 2.25e-251) {
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.2d+35)) then
tmp = d1 * d2
else if (d2 <= (-4d-127)) then
tmp = -d1 * d3
else if (d2 <= 2.25d-251) 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.2e+35) {
tmp = d1 * d2;
} else if (d2 <= -4e-127) {
tmp = -d1 * d3;
} else if (d2 <= 2.25e-251) {
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.2e+35: tmp = d1 * d2 elif d2 <= -4e-127: tmp = -d1 * d3 elif d2 <= 2.25e-251: 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.2e+35) tmp = Float64(d1 * d2); elseif (d2 <= -4e-127) tmp = Float64(Float64(-d1) * d3); elseif (d2 <= 2.25e-251) tmp = Float64(Float64(-d1) * 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.2e+35)
tmp = d1 * d2;
elseif (d2 <= -4e-127)
tmp = -d1 * d3;
elseif (d2 <= 2.25e-251)
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.2e+35], N[(d1 * d2), $MachinePrecision], If[LessEqual[d2, -4e-127], N[((-d1) * d3), $MachinePrecision], If[LessEqual[d2, 2.25e-251], 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.2 \cdot 10^{+35}:\\
\;\;\;\;d1 \cdot d2\\
\mathbf{elif}\;d2 \leq -4 \cdot 10^{-127}:\\
\;\;\;\;\left(-d1\right) \cdot d3\\
\mathbf{elif}\;d2 \leq 2.25 \cdot 10^{-251}:\\
\;\;\;\;\left(-d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;d4 \cdot d1\\
\end{array}
\end{array}
if d2 < -3.19999999999999983e35Initial program 75.4%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6462.1
Applied rewrites62.1%
if -3.19999999999999983e35 < d2 < -4.0000000000000001e-127Initial program 94.1%
Taylor expanded in d3 around inf
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6443.2
Applied rewrites43.2%
if -4.0000000000000001e-127 < d2 < 2.24999999999999989e-251Initial program 91.8%
Taylor expanded in d1 around inf
unpow2N/A
associate-*r*N/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6447.7
Applied rewrites47.7%
if 2.24999999999999989e-251 < d2 Initial program 88.8%
Taylor expanded in d4 around inf
*-commutativeN/A
lower-*.f6429.2
Applied rewrites29.2%
Final simplification41.9%
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 -3.5e+78) (fma (- d2 d3) d1 (* d4 d1)) (if (<= d3 1.8e+148) (* (- (+ d4 d2) d1) d1) (* (- (- d4 d3) d1) d1))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d3 <= -3.5e+78) {
tmp = fma((d2 - d3), d1, (d4 * d1));
} else if (d3 <= 1.8e+148) {
tmp = ((d4 + d2) - d1) * d1;
} else {
tmp = ((d4 - d3) - d1) * d1;
}
return tmp;
}
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d3 <= -3.5e+78) tmp = fma(Float64(d2 - d3), d1, Float64(d4 * d1)); elseif (d3 <= 1.8e+148) tmp = Float64(Float64(Float64(d4 + d2) - d1) * d1); else tmp = Float64(Float64(Float64(d4 - d3) - d1) * 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[d3, -3.5e+78], N[(N[(d2 - d3), $MachinePrecision] * d1 + N[(d4 * d1), $MachinePrecision]), $MachinePrecision], If[LessEqual[d3, 1.8e+148], N[(N[(N[(d4 + d2), $MachinePrecision] - d1), $MachinePrecision] * d1), $MachinePrecision], N[(N[(N[(d4 - d3), $MachinePrecision] - d1), $MachinePrecision] * d1), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d3 \leq -3.5 \cdot 10^{+78}:\\
\;\;\;\;\mathsf{fma}\left(d2 - d3, d1, d4 \cdot d1\right)\\
\mathbf{elif}\;d3 \leq 1.8 \cdot 10^{+148}:\\
\;\;\;\;\left(\left(d4 + d2\right) - d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\left(\left(d4 - d3\right) - d1\right) \cdot d1\\
\end{array}
\end{array}
if d3 < -3.5000000000000001e78Initial program 90.1%
lift--.f64N/A
lift-+.f64N/A
associate--l+N/A
lift--.f64N/A
lift-*.f64N/A
lift-*.f64N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-fma.f64N/A
lower--.f64N/A
lift-*.f64N/A
lift-*.f64N/A
distribute-rgt-out--N/A
lower-*.f64N/A
lower--.f6494.1
Applied rewrites94.1%
Taylor expanded in d4 around inf
*-commutativeN/A
lower-*.f6494.1
Applied rewrites94.1%
if -3.5000000000000001e78 < d3 < 1.80000000000000003e148Initial program 87.7%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6497.5
Applied rewrites97.5%
if 1.80000000000000003e148 < d3 Initial program 79.4%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6497.3
Applied rewrites97.3%
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 -3.5e+78) (* (- (+ d4 d2) d3) d1) (if (<= d3 1.8e+148) (* (- (+ d4 d2) d1) d1) (* (- (- d4 d3) d1) d1))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d3 <= -3.5e+78) {
tmp = ((d4 + d2) - d3) * d1;
} else if (d3 <= 1.8e+148) {
tmp = ((d4 + d2) - d1) * d1;
} else {
tmp = ((d4 - d3) - d1) * 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 (d3 <= (-3.5d+78)) then
tmp = ((d4 + d2) - d3) * d1
else if (d3 <= 1.8d+148) then
tmp = ((d4 + d2) - d1) * d1
else
tmp = ((d4 - d3) - d1) * 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 (d3 <= -3.5e+78) {
tmp = ((d4 + d2) - d3) * d1;
} else if (d3 <= 1.8e+148) {
tmp = ((d4 + d2) - d1) * d1;
} else {
tmp = ((d4 - d3) - d1) * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d3 <= -3.5e+78: tmp = ((d4 + d2) - d3) * d1 elif d3 <= 1.8e+148: tmp = ((d4 + d2) - d1) * d1 else: tmp = ((d4 - d3) - d1) * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d3 <= -3.5e+78) tmp = Float64(Float64(Float64(d4 + d2) - d3) * d1); elseif (d3 <= 1.8e+148) tmp = Float64(Float64(Float64(d4 + d2) - d1) * d1); else tmp = Float64(Float64(Float64(d4 - d3) - d1) * 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 (d3 <= -3.5e+78)
tmp = ((d4 + d2) - d3) * d1;
elseif (d3 <= 1.8e+148)
tmp = ((d4 + d2) - d1) * d1;
else
tmp = ((d4 - d3) - d1) * 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[d3, -3.5e+78], N[(N[(N[(d4 + d2), $MachinePrecision] - d3), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d3, 1.8e+148], N[(N[(N[(d4 + d2), $MachinePrecision] - d1), $MachinePrecision] * d1), $MachinePrecision], N[(N[(N[(d4 - d3), $MachinePrecision] - d1), $MachinePrecision] * d1), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d3 \leq -3.5 \cdot 10^{+78}:\\
\;\;\;\;\left(\left(d4 + d2\right) - d3\right) \cdot d1\\
\mathbf{elif}\;d3 \leq 1.8 \cdot 10^{+148}:\\
\;\;\;\;\left(\left(d4 + d2\right) - d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\left(\left(d4 - d3\right) - d1\right) \cdot d1\\
\end{array}
\end{array}
if d3 < -3.5000000000000001e78Initial program 90.1%
Taylor expanded in d1 around 0
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6496.1
Applied rewrites96.1%
if -3.5000000000000001e78 < d3 < 1.80000000000000003e148Initial program 87.7%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6497.5
Applied rewrites97.5%
if 1.80000000000000003e148 < d3 Initial program 79.4%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6497.3
Applied rewrites97.3%
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 -3.5e+78) (* (- (+ d4 d2) d3) d1) (if (<= d3 1.42e+151) (* (- (+ d4 d2) d1) d1) (* (- (- d2 d1) d3) d1))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d3 <= -3.5e+78) {
tmp = ((d4 + d2) - d3) * d1;
} else if (d3 <= 1.42e+151) {
tmp = ((d4 + d2) - d1) * d1;
} else {
tmp = ((d2 - d1) - 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 (d3 <= (-3.5d+78)) then
tmp = ((d4 + d2) - d3) * d1
else if (d3 <= 1.42d+151) then
tmp = ((d4 + d2) - d1) * d1
else
tmp = ((d2 - d1) - 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 (d3 <= -3.5e+78) {
tmp = ((d4 + d2) - d3) * d1;
} else if (d3 <= 1.42e+151) {
tmp = ((d4 + d2) - d1) * d1;
} else {
tmp = ((d2 - d1) - d3) * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d3 <= -3.5e+78: tmp = ((d4 + d2) - d3) * d1 elif d3 <= 1.42e+151: tmp = ((d4 + d2) - d1) * d1 else: tmp = ((d2 - d1) - d3) * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d3 <= -3.5e+78) tmp = Float64(Float64(Float64(d4 + d2) - d3) * d1); elseif (d3 <= 1.42e+151) tmp = Float64(Float64(Float64(d4 + d2) - d1) * d1); else tmp = Float64(Float64(Float64(d2 - d1) - 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 (d3 <= -3.5e+78)
tmp = ((d4 + d2) - d3) * d1;
elseif (d3 <= 1.42e+151)
tmp = ((d4 + d2) - d1) * d1;
else
tmp = ((d2 - d1) - 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[d3, -3.5e+78], N[(N[(N[(d4 + d2), $MachinePrecision] - d3), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d3, 1.42e+151], N[(N[(N[(d4 + d2), $MachinePrecision] - d1), $MachinePrecision] * d1), $MachinePrecision], N[(N[(N[(d2 - d1), $MachinePrecision] - d3), $MachinePrecision] * d1), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d3 \leq -3.5 \cdot 10^{+78}:\\
\;\;\;\;\left(\left(d4 + d2\right) - d3\right) \cdot d1\\
\mathbf{elif}\;d3 \leq 1.42 \cdot 10^{+151}:\\
\;\;\;\;\left(\left(d4 + d2\right) - d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\left(\left(d2 - d1\right) - d3\right) \cdot d1\\
\end{array}
\end{array}
if d3 < -3.5000000000000001e78Initial program 90.1%
Taylor expanded in d1 around 0
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6496.1
Applied rewrites96.1%
if -3.5000000000000001e78 < d3 < 1.4199999999999999e151Initial program 87.8%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6497.5
Applied rewrites97.5%
if 1.4199999999999999e151 < d3 Initial program 78.8%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6411.5
Applied rewrites11.5%
Taylor expanded in d4 around 0
+-commutativeN/A
unpow2N/A
distribute-lft-inN/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
associate--r+N/A
lower--.f64N/A
lower--.f6492.6
Applied rewrites92.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 (<= d3 -3.5e+78) (* (- (+ d4 d2) d3) d1) (if (<= d3 1.5e+157) (* (- (+ d4 d2) d1) d1) (* (- (- d3) d1) d1))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d3 <= -3.5e+78) {
tmp = ((d4 + d2) - d3) * d1;
} else if (d3 <= 1.5e+157) {
tmp = ((d4 + d2) - d1) * d1;
} else {
tmp = (-d3 - d1) * 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 (d3 <= (-3.5d+78)) then
tmp = ((d4 + d2) - d3) * d1
else if (d3 <= 1.5d+157) then
tmp = ((d4 + d2) - d1) * d1
else
tmp = (-d3 - d1) * 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 (d3 <= -3.5e+78) {
tmp = ((d4 + d2) - d3) * d1;
} else if (d3 <= 1.5e+157) {
tmp = ((d4 + d2) - d1) * d1;
} else {
tmp = (-d3 - d1) * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d3 <= -3.5e+78: tmp = ((d4 + d2) - d3) * d1 elif d3 <= 1.5e+157: tmp = ((d4 + d2) - d1) * d1 else: tmp = (-d3 - d1) * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d3 <= -3.5e+78) tmp = Float64(Float64(Float64(d4 + d2) - d3) * d1); elseif (d3 <= 1.5e+157) tmp = Float64(Float64(Float64(d4 + d2) - d1) * d1); else tmp = Float64(Float64(Float64(-d3) - d1) * 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 (d3 <= -3.5e+78)
tmp = ((d4 + d2) - d3) * d1;
elseif (d3 <= 1.5e+157)
tmp = ((d4 + d2) - d1) * d1;
else
tmp = (-d3 - d1) * 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[d3, -3.5e+78], N[(N[(N[(d4 + d2), $MachinePrecision] - d3), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d3, 1.5e+157], N[(N[(N[(d4 + d2), $MachinePrecision] - d1), $MachinePrecision] * d1), $MachinePrecision], N[(N[((-d3) - d1), $MachinePrecision] * d1), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d3 \leq -3.5 \cdot 10^{+78}:\\
\;\;\;\;\left(\left(d4 + d2\right) - d3\right) \cdot d1\\
\mathbf{elif}\;d3 \leq 1.5 \cdot 10^{+157}:\\
\;\;\;\;\left(\left(d4 + d2\right) - d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\left(\left(-d3\right) - d1\right) \cdot d1\\
\end{array}
\end{array}
if d3 < -3.5000000000000001e78Initial program 90.1%
Taylor expanded in d1 around 0
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6496.1
Applied rewrites96.1%
if -3.5000000000000001e78 < d3 < 1.50000000000000005e157Initial program 87.8%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6497.5
Applied rewrites97.5%
if 1.50000000000000005e157 < d3 Initial program 78.8%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6497.2
Applied rewrites97.2%
Taylor expanded in d4 around 0
Applied rewrites89.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 (<= d3 -9.3e+151) (* (- d4 d3) d1) (if (<= d3 1.5e+157) (* (- (+ d4 d2) d1) d1) (* (- (- d3) d1) d1))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d3 <= -9.3e+151) {
tmp = (d4 - d3) * d1;
} else if (d3 <= 1.5e+157) {
tmp = ((d4 + d2) - d1) * d1;
} else {
tmp = (-d3 - d1) * 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 (d3 <= (-9.3d+151)) then
tmp = (d4 - d3) * d1
else if (d3 <= 1.5d+157) then
tmp = ((d4 + d2) - d1) * d1
else
tmp = (-d3 - d1) * 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 (d3 <= -9.3e+151) {
tmp = (d4 - d3) * d1;
} else if (d3 <= 1.5e+157) {
tmp = ((d4 + d2) - d1) * d1;
} else {
tmp = (-d3 - d1) * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d3 <= -9.3e+151: tmp = (d4 - d3) * d1 elif d3 <= 1.5e+157: tmp = ((d4 + d2) - d1) * d1 else: tmp = (-d3 - d1) * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d3 <= -9.3e+151) tmp = Float64(Float64(d4 - d3) * d1); elseif (d3 <= 1.5e+157) tmp = Float64(Float64(Float64(d4 + d2) - d1) * d1); else tmp = Float64(Float64(Float64(-d3) - d1) * 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 (d3 <= -9.3e+151)
tmp = (d4 - d3) * d1;
elseif (d3 <= 1.5e+157)
tmp = ((d4 + d2) - d1) * d1;
else
tmp = (-d3 - d1) * 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[d3, -9.3e+151], N[(N[(d4 - d3), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d3, 1.5e+157], N[(N[(N[(d4 + d2), $MachinePrecision] - d1), $MachinePrecision] * d1), $MachinePrecision], N[(N[((-d3) - d1), $MachinePrecision] * d1), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d3 \leq -9.3 \cdot 10^{+151}:\\
\;\;\;\;\left(d4 - d3\right) \cdot d1\\
\mathbf{elif}\;d3 \leq 1.5 \cdot 10^{+157}:\\
\;\;\;\;\left(\left(d4 + d2\right) - d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\left(\left(-d3\right) - d1\right) \cdot d1\\
\end{array}
\end{array}
if d3 < -9.2999999999999995e151Initial program 90.6%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6495.1
Applied rewrites95.1%
Taylor expanded in d1 around 0
Applied rewrites91.9%
if -9.2999999999999995e151 < d3 < 1.50000000000000005e157Initial program 87.9%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6495.3
Applied rewrites95.3%
if 1.50000000000000005e157 < d3 Initial program 78.8%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6497.2
Applied rewrites97.2%
Taylor expanded in d4 around 0
Applied rewrites89.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 (<= d2 -1.3e+43) (* (- d2 d1) d1) (if (<= d2 -5e-54) (* (- d2 d3) d1) (* (- d4 d1) d1))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -1.3e+43) {
tmp = (d2 - d1) * d1;
} else if (d2 <= -5e-54) {
tmp = (d2 - d3) * d1;
} else {
tmp = (d4 - d1) * 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 <= (-1.3d+43)) then
tmp = (d2 - d1) * d1
else if (d2 <= (-5d-54)) then
tmp = (d2 - d3) * d1
else
tmp = (d4 - d1) * 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 <= -1.3e+43) {
tmp = (d2 - d1) * d1;
} else if (d2 <= -5e-54) {
tmp = (d2 - d3) * d1;
} else {
tmp = (d4 - d1) * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d2 <= -1.3e+43: tmp = (d2 - d1) * d1 elif d2 <= -5e-54: tmp = (d2 - d3) * d1 else: tmp = (d4 - d1) * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -1.3e+43) tmp = Float64(Float64(d2 - d1) * d1); elseif (d2 <= -5e-54) tmp = Float64(Float64(d2 - d3) * d1); else tmp = Float64(Float64(d4 - d1) * 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 <= -1.3e+43)
tmp = (d2 - d1) * d1;
elseif (d2 <= -5e-54)
tmp = (d2 - d3) * d1;
else
tmp = (d4 - d1) * 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, -1.3e+43], N[(N[(d2 - d1), $MachinePrecision] * d1), $MachinePrecision], If[LessEqual[d2, -5e-54], N[(N[(d2 - d3), $MachinePrecision] * d1), $MachinePrecision], N[(N[(d4 - d1), $MachinePrecision] * d1), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -1.3 \cdot 10^{+43}:\\
\;\;\;\;\left(d2 - d1\right) \cdot d1\\
\mathbf{elif}\;d2 \leq -5 \cdot 10^{-54}:\\
\;\;\;\;\left(d2 - d3\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\left(d4 - d1\right) \cdot d1\\
\end{array}
\end{array}
if d2 < -1.3000000000000001e43Initial program 74.9%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6489.4
Applied rewrites89.4%
Taylor expanded in d4 around 0
Applied rewrites77.3%
if -1.3000000000000001e43 < d2 < -5.00000000000000015e-54Initial program 89.5%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6425.1
Applied rewrites25.1%
Taylor expanded in d4 around 0
+-commutativeN/A
unpow2N/A
distribute-lft-inN/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
associate--r+N/A
lower--.f64N/A
lower--.f6474.2
Applied rewrites74.2%
Taylor expanded in d1 around 0
Applied rewrites64.2%
if -5.00000000000000015e-54 < d2 Initial program 90.6%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
*-commutativeN/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6485.7
Applied rewrites85.7%
Taylor expanded in d3 around 0
Applied rewrites60.2%
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 -1.65e+143) t_0 (if (<= d3 1.05e+157) (* (+ d4 d2) d1) 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 <= -1.65e+143) {
tmp = t_0;
} else if (d3 <= 1.05e+157) {
tmp = (d4 + d2) * d1;
} 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 <= (-1.65d+143)) then
tmp = t_0
else if (d3 <= 1.05d+157) then
tmp = (d4 + d2) * d1
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 <= -1.65e+143) {
tmp = t_0;
} else if (d3 <= 1.05e+157) {
tmp = (d4 + d2) * d1;
} 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 <= -1.65e+143: tmp = t_0 elif d3 <= 1.05e+157: tmp = (d4 + d2) * d1 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 <= -1.65e+143) tmp = t_0; elseif (d3 <= 1.05e+157) tmp = Float64(Float64(d4 + d2) * d1); 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 <= -1.65e+143)
tmp = t_0;
elseif (d3 <= 1.05e+157)
tmp = (d4 + d2) * d1;
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, -1.65e+143], t$95$0, If[LessEqual[d3, 1.05e+157], N[(N[(d4 + d2), $MachinePrecision] * d1), $MachinePrecision], t$95$0]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
t_0 := \left(-d1\right) \cdot d3\\
\mathbf{if}\;d3 \leq -1.65 \cdot 10^{+143}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d3 \leq 1.05 \cdot 10^{+157}:\\
\;\;\;\;\left(d4 + d2\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if d3 < -1.65e143 or 1.05e157 < d3 Initial program 83.6%
Taylor expanded in d3 around inf
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6480.1
Applied rewrites80.1%
if -1.65e143 < d3 < 1.05e157Initial program 88.3%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6495.2
Applied rewrites95.2%
Taylor expanded in d1 around 0
Applied rewrites68.3%
Final simplification71.4%
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 5.4e-306) (* d1 d2) (if (<= d4 1.55e+53) (* (- 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 <= 5.4e-306) {
tmp = d1 * d2;
} else if (d4 <= 1.55e+53) {
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 <= 5.4d-306) then
tmp = d1 * d2
else if (d4 <= 1.55d+53) 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 <= 5.4e-306) {
tmp = d1 * d2;
} else if (d4 <= 1.55e+53) {
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 <= 5.4e-306: tmp = d1 * d2 elif d4 <= 1.55e+53: 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 <= 5.4e-306) tmp = Float64(d1 * d2); elseif (d4 <= 1.55e+53) tmp = Float64(Float64(-d1) * 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 <= 5.4e-306)
tmp = d1 * d2;
elseif (d4 <= 1.55e+53)
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, 5.4e-306], N[(d1 * d2), $MachinePrecision], If[LessEqual[d4, 1.55e+53], 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 5.4 \cdot 10^{-306}:\\
\;\;\;\;d1 \cdot d2\\
\mathbf{elif}\;d4 \leq 1.55 \cdot 10^{+53}:\\
\;\;\;\;\left(-d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;d4 \cdot d1\\
\end{array}
\end{array}
if d4 < 5.40000000000000018e-306Initial program 88.1%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6429.9
Applied rewrites29.9%
if 5.40000000000000018e-306 < d4 < 1.5500000000000001e53Initial program 89.9%
Taylor expanded in d1 around inf
unpow2N/A
associate-*r*N/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6444.2
Applied rewrites44.2%
if 1.5500000000000001e53 < d4 Initial program 80.8%
Taylor expanded in d4 around inf
*-commutativeN/A
lower-*.f6459.4
Applied rewrites59.4%
Final simplification39.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 (<= d4 1.7e+53) (* (- d2 d1) d1) (* (+ d4 d2) d1)))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 1.7e+53) {
tmp = (d2 - d1) * d1;
} else {
tmp = (d4 + d2) * 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.7d+53) then
tmp = (d2 - d1) * d1
else
tmp = (d4 + d2) * 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.7e+53) {
tmp = (d2 - d1) * d1;
} else {
tmp = (d4 + d2) * d1;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= 1.7e+53: tmp = (d2 - d1) * d1 else: tmp = (d4 + d2) * d1 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= 1.7e+53) tmp = Float64(Float64(d2 - d1) * d1); else tmp = Float64(Float64(d4 + d2) * 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.7e+53)
tmp = (d2 - d1) * d1;
else
tmp = (d4 + d2) * 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.7e+53], N[(N[(d2 - d1), $MachinePrecision] * d1), $MachinePrecision], N[(N[(d4 + d2), $MachinePrecision] * d1), $MachinePrecision]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq 1.7 \cdot 10^{+53}:\\
\;\;\;\;\left(d2 - d1\right) \cdot d1\\
\mathbf{else}:\\
\;\;\;\;\left(d4 + d2\right) \cdot d1\\
\end{array}
\end{array}
if d4 < 1.69999999999999999e53Initial program 88.7%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6475.6
Applied rewrites75.6%
Taylor expanded in d4 around 0
Applied rewrites60.1%
if 1.69999999999999999e53 < d4 Initial program 80.8%
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
*-commutativeN/A
lower-*.f64N/A
associate-+r+N/A
mul-1-negN/A
unsub-negN/A
lower--.f64N/A
+-commutativeN/A
lower-+.f6486.2
Applied rewrites86.2%
Taylor expanded in d1 around 0
Applied rewrites78.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 (<= d2 -52000000000000.0) (* d1 d2) (* d4 d1)))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -52000000000000.0) {
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 (d2 <= (-52000000000000.0d0)) 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 (d2 <= -52000000000000.0) {
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 d2 <= -52000000000000.0: 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 (d2 <= -52000000000000.0) 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 (d2 <= -52000000000000.0)
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[d2, -52000000000000.0], 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}\;d2 \leq -52000000000000:\\
\;\;\;\;d1 \cdot d2\\
\mathbf{else}:\\
\;\;\;\;d4 \cdot d1\\
\end{array}
\end{array}
if d2 < -5.2e13Initial program 78.1%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6458.6
Applied rewrites58.6%
if -5.2e13 < d2 Initial program 90.1%
Taylor expanded in d4 around inf
*-commutativeN/A
lower-*.f6433.1
Applied rewrites33.1%
Final simplification39.5%
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.1%
Taylor expanded in d2 around inf
*-commutativeN/A
lower-*.f6431.1
Applied rewrites31.1%
Final simplification31.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 2024250
(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)))