
(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 (<= d1 8.5e+153) (fma d4 d1 (* d1 (- (- d2 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 (d1 <= 8.5e+153) {
tmp = fma(d4, d1, (d1 * ((d2 - d3) - d1)));
} 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 <= 8.5e+153) tmp = fma(d4, d1, Float64(d1 * Float64(Float64(d2 - d3) - d1))); else tmp = Float64(d1 * Float64(Float64(d4 - 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[d1, 8.5e+153], N[(d4 * d1 + N[(d1 * N[(N[(d2 - d3), $MachinePrecision] - d1), $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 8.5 \cdot 10^{+153}:\\
\;\;\;\;\mathsf{fma}\left(d4, d1, d1 \cdot \left(\left(d2 - d3\right) - d1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(\left(d4 - d3\right) - d1\right)\\
\end{array}
\end{array}
if d1 < 8.49999999999999935e153Initial program 95.6%
lift-*.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
associate--l+N/A
lift-*.f64N/A
lower-fma.f64N/A
lift--.f64N/A
lift-*.f64N/A
lift-*.f64N/A
distribute-lft-out--N/A
lift-*.f64N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6498.6
Applied egg-rr98.6%
if 8.49999999999999935e153 < d1 Initial program 60.7%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6496.4
Simplified96.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 0.64)
(* d1 (- (- d2 d1) d3))
(if (<= d4 8.2e+151)
(fma d4 d1 (- (* d1 (+ d1 d3))))
(* 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 <= 0.64) {
tmp = d1 * ((d2 - d1) - d3);
} else if (d4 <= 8.2e+151) {
tmp = fma(d4, d1, -(d1 * (d1 + d3)));
} 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 <= 0.64) tmp = Float64(d1 * Float64(Float64(d2 - d1) - d3)); elseif (d4 <= 8.2e+151) tmp = fma(d4, d1, Float64(-Float64(d1 * Float64(d1 + d3)))); 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, 0.64], N[(d1 * N[(N[(d2 - d1), $MachinePrecision] - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 8.2e+151], N[(d4 * d1 + (-N[(d1 * N[(d1 + d3), $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 0.64:\\
\;\;\;\;d1 \cdot \left(\left(d2 - d1\right) - d3\right)\\
\mathbf{elif}\;d4 \leq 8.2 \cdot 10^{+151}:\\
\;\;\;\;\mathsf{fma}\left(d4, d1, -d1 \cdot \left(d1 + d3\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d1\right)\right)\\
\end{array}
\end{array}
if d4 < 0.640000000000000013Initial program 93.1%
Taylor expanded in d4 around 0
+-commutativeN/A
associate--r+N/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6485.2
Simplified85.2%
if 0.640000000000000013 < d4 < 8.1999999999999996e151Initial program 96.7%
lift-*.f64N/A
lift-*.f64N/A
lift--.f64N/A
lift-*.f64N/A
+-commutativeN/A
lift-*.f64N/A
associate--l+N/A
lift-*.f64N/A
lower-fma.f64N/A
lift--.f64N/A
lift-*.f64N/A
lift-*.f64N/A
distribute-lft-out--N/A
lift-*.f64N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f64100.0
Applied egg-rr100.0%
Taylor expanded in d2 around 0
mul-1-negN/A
lower-neg.f6480.0
Simplified80.0%
if 8.1999999999999996e151 < d4 Initial program 80.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
lower-*.f64N/A
lower-+.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64100.0
Simplified100.0%
Final simplification86.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.55e-274)
(* d1 (- d2 d3))
(if (<= d4 3.2e+33)
(- (* d1 (+ d1 d3)))
(if (<= d4 1.95e+151) (* d1 (- d4 d3)) (* 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.55e-274) {
tmp = d1 * (d2 - d3);
} else if (d4 <= 3.2e+33) {
tmp = -(d1 * (d1 + d3));
} else if (d4 <= 1.95e+151) {
tmp = d1 * (d4 - d3);
} 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.55d-274) then
tmp = d1 * (d2 - d3)
else if (d4 <= 3.2d+33) then
tmp = -(d1 * (d1 + d3))
else if (d4 <= 1.95d+151) then
tmp = d1 * (d4 - d3)
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.55e-274) {
tmp = d1 * (d2 - d3);
} else if (d4 <= 3.2e+33) {
tmp = -(d1 * (d1 + d3));
} else if (d4 <= 1.95e+151) {
tmp = d1 * (d4 - d3);
} 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.55e-274: tmp = d1 * (d2 - d3) elif d4 <= 3.2e+33: tmp = -(d1 * (d1 + d3)) elif d4 <= 1.95e+151: tmp = d1 * (d4 - d3) 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.55e-274) tmp = Float64(d1 * Float64(d2 - d3)); elseif (d4 <= 3.2e+33) tmp = Float64(-Float64(d1 * Float64(d1 + d3))); elseif (d4 <= 1.95e+151) tmp = Float64(d1 * Float64(d4 - d3)); 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.55e-274)
tmp = d1 * (d2 - d3);
elseif (d4 <= 3.2e+33)
tmp = -(d1 * (d1 + d3));
elseif (d4 <= 1.95e+151)
tmp = d1 * (d4 - d3);
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.55e-274], N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 3.2e+33], (-N[(d1 * N[(d1 + d3), $MachinePrecision]), $MachinePrecision]), If[LessEqual[d4, 1.95e+151], N[(d1 * N[(d4 - d3), $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.55 \cdot 10^{-274}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\mathbf{elif}\;d4 \leq 3.2 \cdot 10^{+33}:\\
\;\;\;\;-d1 \cdot \left(d1 + d3\right)\\
\mathbf{elif}\;d4 \leq 1.95 \cdot 10^{+151}:\\
\;\;\;\;d1 \cdot \left(d4 - d3\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 + d2\right)\\
\end{array}
\end{array}
if d4 < 1.54999999999999989e-274Initial program 93.7%
Taylor expanded in d4 around 0
+-commutativeN/A
associate--r+N/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6478.7
Simplified78.7%
Taylor expanded in d1 around 0
sub-negN/A
mul-1-negN/A
+-commutativeN/A
+-lft-identityN/A
associate-+l+N/A
+-commutativeN/A
mul-1-negN/A
sub-negN/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
lower-*.f64N/A
neg-sub0N/A
*-commutativeN/A
associate-*r/N/A
associate-*l/N/A
associate-/l*N/A
Simplified67.0%
if 1.54999999999999989e-274 < d4 < 3.20000000000000017e33Initial program 91.8%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6476.3
Simplified76.3%
Taylor expanded in d4 around 0
mul-1-negN/A
lower-neg.f6472.6
Simplified72.6%
if 3.20000000000000017e33 < d4 < 1.94999999999999988e151Initial program 99.9%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6480.8
Simplified80.8%
Taylor expanded in d1 around 0
lower-*.f64N/A
lower--.f6476.3
Simplified76.3%
if 1.94999999999999988e151 < d4 Initial program 80.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
lower-*.f64N/A
lower-+.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f64100.0
Simplified100.0%
Taylor expanded in d1 around 0
lower-*.f64N/A
lower-+.f64100.0
Simplified100.0%
Final simplification73.9%
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 (- d4 d3))))
(if (<= d2 -2.85e+99)
(* d1 (- d2 d3))
(if (<= d2 -2.15e-122)
t_0
(if (<= d2 -2.25e-250) (* d1 (- d4 d1)) t_0)))))assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double t_0 = d1 * (d4 - d3);
double tmp;
if (d2 <= -2.85e+99) {
tmp = d1 * (d2 - d3);
} else if (d2 <= -2.15e-122) {
tmp = t_0;
} else if (d2 <= -2.25e-250) {
tmp = d1 * (d4 - 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 * (d4 - d3)
if (d2 <= (-2.85d+99)) then
tmp = d1 * (d2 - d3)
else if (d2 <= (-2.15d-122)) then
tmp = t_0
else if (d2 <= (-2.25d-250)) then
tmp = d1 * (d4 - 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 * (d4 - d3);
double tmp;
if (d2 <= -2.85e+99) {
tmp = d1 * (d2 - d3);
} else if (d2 <= -2.15e-122) {
tmp = t_0;
} else if (d2 <= -2.25e-250) {
tmp = d1 * (d4 - 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 * (d4 - d3) tmp = 0 if d2 <= -2.85e+99: tmp = d1 * (d2 - d3) elif d2 <= -2.15e-122: tmp = t_0 elif d2 <= -2.25e-250: tmp = d1 * (d4 - 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(d1 * Float64(d4 - d3)) tmp = 0.0 if (d2 <= -2.85e+99) tmp = Float64(d1 * Float64(d2 - d3)); elseif (d2 <= -2.15e-122) tmp = t_0; elseif (d2 <= -2.25e-250) tmp = Float64(d1 * Float64(d4 - 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 * (d4 - d3);
tmp = 0.0;
if (d2 <= -2.85e+99)
tmp = d1 * (d2 - d3);
elseif (d2 <= -2.15e-122)
tmp = t_0;
elseif (d2 <= -2.25e-250)
tmp = d1 * (d4 - 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 * N[(d4 - d3), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d2, -2.85e+99], N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d2, -2.15e-122], t$95$0, If[LessEqual[d2, -2.25e-250], N[(d1 * N[(d4 - d1), $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 \left(d4 - d3\right)\\
\mathbf{if}\;d2 \leq -2.85 \cdot 10^{+99}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\mathbf{elif}\;d2 \leq -2.15 \cdot 10^{-122}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d2 \leq -2.25 \cdot 10^{-250}:\\
\;\;\;\;d1 \cdot \left(d4 - d1\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if d2 < -2.85000000000000002e99Initial program 85.0%
Taylor expanded in d4 around 0
+-commutativeN/A
associate--r+N/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6485.4
Simplified85.4%
Taylor expanded in d1 around 0
sub-negN/A
mul-1-negN/A
+-commutativeN/A
+-lft-identityN/A
associate-+l+N/A
+-commutativeN/A
mul-1-negN/A
sub-negN/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
lower-*.f64N/A
neg-sub0N/A
*-commutativeN/A
associate-*r/N/A
associate-*l/N/A
associate-/l*N/A
Simplified82.9%
if -2.85000000000000002e99 < d2 < -2.15000000000000009e-122 or -2.24999999999999997e-250 < d2 Initial program 92.9%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6476.2
Simplified76.2%
Taylor expanded in d1 around 0
lower-*.f64N/A
lower--.f6459.4
Simplified59.4%
if -2.15000000000000009e-122 < d2 < -2.24999999999999997e-250Initial program 93.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
lower-*.f64N/A
lower-+.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6494.0
Simplified94.0%
Taylor expanded in d2 around 0
lower-*.f64N/A
lower--.f6494.0
Simplified94.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 -7e-218)
(* d1 d2)
(if (<= d4 3.9e-241)
(* d1 (- d3))
(if (<= d4 8.6e+32) (* d1 (- d1)) (* d1 d4)))))assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= -7e-218) {
tmp = d1 * d2;
} else if (d4 <= 3.9e-241) {
tmp = d1 * -d3;
} else if (d4 <= 8.6e+32) {
tmp = d1 * -d1;
} else {
tmp = d1 * d4;
}
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 <= (-7d-218)) then
tmp = d1 * d2
else if (d4 <= 3.9d-241) then
tmp = d1 * -d3
else if (d4 <= 8.6d+32) then
tmp = d1 * -d1
else
tmp = d1 * d4
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 <= -7e-218) {
tmp = d1 * d2;
} else if (d4 <= 3.9e-241) {
tmp = d1 * -d3;
} else if (d4 <= 8.6e+32) {
tmp = d1 * -d1;
} else {
tmp = d1 * d4;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= -7e-218: tmp = d1 * d2 elif d4 <= 3.9e-241: tmp = d1 * -d3 elif d4 <= 8.6e+32: tmp = d1 * -d1 else: tmp = d1 * d4 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= -7e-218) tmp = Float64(d1 * d2); elseif (d4 <= 3.9e-241) tmp = Float64(d1 * Float64(-d3)); elseif (d4 <= 8.6e+32) tmp = Float64(d1 * Float64(-d1)); else tmp = Float64(d1 * d4); 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 <= -7e-218)
tmp = d1 * d2;
elseif (d4 <= 3.9e-241)
tmp = d1 * -d3;
elseif (d4 <= 8.6e+32)
tmp = d1 * -d1;
else
tmp = d1 * d4;
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, -7e-218], N[(d1 * d2), $MachinePrecision], If[LessEqual[d4, 3.9e-241], N[(d1 * (-d3)), $MachinePrecision], If[LessEqual[d4, 8.6e+32], N[(d1 * (-d1)), $MachinePrecision], N[(d1 * d4), $MachinePrecision]]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq -7 \cdot 10^{-218}:\\
\;\;\;\;d1 \cdot d2\\
\mathbf{elif}\;d4 \leq 3.9 \cdot 10^{-241}:\\
\;\;\;\;d1 \cdot \left(-d3\right)\\
\mathbf{elif}\;d4 \leq 8.6 \cdot 10^{+32}:\\
\;\;\;\;d1 \cdot \left(-d1\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot d4\\
\end{array}
\end{array}
if d4 < -7e-218Initial program 92.9%
Taylor expanded in d2 around inf
lower-*.f6434.4
Simplified34.4%
if -7e-218 < d4 < 3.8999999999999999e-241Initial program 97.3%
Taylor expanded in d3 around inf
mul-1-negN/A
distribute-rgt-neg-inN/A
mul-1-negN/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6445.0
Simplified45.0%
if 3.8999999999999999e-241 < d4 < 8.5999999999999994e32Initial program 90.7%
Taylor expanded in d1 around inf
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6449.9
Simplified49.9%
if 8.5999999999999994e32 < d4 Initial program 87.0%
Taylor expanded in d4 around inf
lower-*.f6466.2
Simplified66.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 0.35) (* d1 (- (- d2 d1) d3)) (if (<= d4 2.05e+151) (* d1 (- (- d4 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 <= 0.35) {
tmp = d1 * ((d2 - d1) - d3);
} else if (d4 <= 2.05e+151) {
tmp = d1 * ((d4 - d3) - d1);
} else {
tmp = d1 * (d2 + (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 <= 0.35d0) then
tmp = d1 * ((d2 - d1) - d3)
else if (d4 <= 2.05d+151) then
tmp = d1 * ((d4 - d3) - d1)
else
tmp = d1 * (d2 + (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 <= 0.35) {
tmp = d1 * ((d2 - d1) - d3);
} else if (d4 <= 2.05e+151) {
tmp = d1 * ((d4 - d3) - d1);
} else {
tmp = d1 * (d2 + (d4 - d1));
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= 0.35: tmp = d1 * ((d2 - d1) - d3) elif d4 <= 2.05e+151: tmp = d1 * ((d4 - 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 <= 0.35) tmp = Float64(d1 * Float64(Float64(d2 - d1) - d3)); elseif (d4 <= 2.05e+151) tmp = Float64(d1 * Float64(Float64(d4 - d3) - d1)); else tmp = Float64(d1 * Float64(d2 + 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 <= 0.35)
tmp = d1 * ((d2 - d1) - d3);
elseif (d4 <= 2.05e+151)
tmp = d1 * ((d4 - d3) - d1);
else
tmp = d1 * (d2 + (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, 0.35], N[(d1 * N[(N[(d2 - d1), $MachinePrecision] - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 2.05e+151], N[(d1 * N[(N[(d4 - d3), $MachinePrecision] - d1), $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 0.35:\\
\;\;\;\;d1 \cdot \left(\left(d2 - d1\right) - d3\right)\\
\mathbf{elif}\;d4 \leq 2.05 \cdot 10^{+151}:\\
\;\;\;\;d1 \cdot \left(\left(d4 - d3\right) - d1\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d1\right)\right)\\
\end{array}
\end{array}
if d4 < 0.34999999999999998Initial program 93.1%
Taylor expanded in d4 around 0
+-commutativeN/A
associate--r+N/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6485.2
Simplified85.2%
if 0.34999999999999998 < d4 < 2.0499999999999999e151Initial program 96.6%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6482.1
Simplified82.1%
if 2.0499999999999999e151 < d4 Initial program 80.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
lower-*.f64N/A
lower-+.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.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 9.5e+33) (* d1 (- (- d2 d1) d3)) (if (<= d4 2.55e+151) (* d1 (- d4 d3)) (* 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 <= 9.5e+33) {
tmp = d1 * ((d2 - d1) - d3);
} else if (d4 <= 2.55e+151) {
tmp = d1 * (d4 - d3);
} else {
tmp = d1 * (d2 + (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 <= 9.5d+33) then
tmp = d1 * ((d2 - d1) - d3)
else if (d4 <= 2.55d+151) then
tmp = d1 * (d4 - d3)
else
tmp = d1 * (d2 + (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 <= 9.5e+33) {
tmp = d1 * ((d2 - d1) - d3);
} else if (d4 <= 2.55e+151) {
tmp = d1 * (d4 - d3);
} else {
tmp = d1 * (d2 + (d4 - d1));
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= 9.5e+33: tmp = d1 * ((d2 - d1) - d3) elif d4 <= 2.55e+151: tmp = d1 * (d4 - d3) 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 <= 9.5e+33) tmp = Float64(d1 * Float64(Float64(d2 - d1) - d3)); elseif (d4 <= 2.55e+151) tmp = Float64(d1 * Float64(d4 - d3)); else tmp = Float64(d1 * Float64(d2 + 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 <= 9.5e+33)
tmp = d1 * ((d2 - d1) - d3);
elseif (d4 <= 2.55e+151)
tmp = d1 * (d4 - d3);
else
tmp = d1 * (d2 + (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, 9.5e+33], N[(d1 * N[(N[(d2 - d1), $MachinePrecision] - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 2.55e+151], N[(d1 * N[(d4 - d3), $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 9.5 \cdot 10^{+33}:\\
\;\;\;\;d1 \cdot \left(\left(d2 - d1\right) - d3\right)\\
\mathbf{elif}\;d4 \leq 2.55 \cdot 10^{+151}:\\
\;\;\;\;d1 \cdot \left(d4 - d3\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d1\right)\right)\\
\end{array}
\end{array}
if d4 < 9.5000000000000003e33Initial program 93.0%
Taylor expanded in d4 around 0
+-commutativeN/A
associate--r+N/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6485.1
Simplified85.1%
if 9.5000000000000003e33 < d4 < 2.54999999999999998e151Initial program 99.9%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6480.8
Simplified80.8%
Taylor expanded in d1 around 0
lower-*.f64N/A
lower--.f6476.3
Simplified76.3%
if 2.54999999999999998e151 < d4 Initial program 80.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
lower-*.f64N/A
lower-+.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.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 (<= d3 -3.9e+43) (* d1 (- d2 d3)) (if (<= d3 5.5e+84) (* 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 <= -3.9e+43) {
tmp = d1 * (d2 - d3);
} else if (d3 <= 5.5e+84) {
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 <= (-3.9d+43)) then
tmp = d1 * (d2 - d3)
else if (d3 <= 5.5d+84) 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 <= -3.9e+43) {
tmp = d1 * (d2 - d3);
} else if (d3 <= 5.5e+84) {
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 <= -3.9e+43: tmp = d1 * (d2 - d3) elif d3 <= 5.5e+84: 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 <= -3.9e+43) tmp = Float64(d1 * Float64(d2 - d3)); elseif (d3 <= 5.5e+84) 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 <= -3.9e+43)
tmp = d1 * (d2 - d3);
elseif (d3 <= 5.5e+84)
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, -3.9e+43], N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d3, 5.5e+84], 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 -3.9 \cdot 10^{+43}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\mathbf{elif}\;d3 \leq 5.5 \cdot 10^{+84}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 - d3\right)\\
\end{array}
\end{array}
if d3 < -3.9000000000000001e43Initial program 89.2%
Taylor expanded in d4 around 0
+-commutativeN/A
associate--r+N/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6481.0
Simplified81.0%
Taylor expanded in d1 around 0
sub-negN/A
mul-1-negN/A
+-commutativeN/A
+-lft-identityN/A
associate-+l+N/A
+-commutativeN/A
mul-1-negN/A
sub-negN/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
lower-*.f64N/A
neg-sub0N/A
*-commutativeN/A
associate-*r/N/A
associate-*l/N/A
associate-/l*N/A
Simplified74.6%
if -3.9000000000000001e43 < d3 < 5.5000000000000004e84Initial program 94.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
lower-*.f64N/A
lower-+.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6495.7
Simplified95.7%
if 5.5000000000000004e84 < d3 Initial program 83.7%
Taylor expanded in d2 around 0
associate--r+N/A
distribute-lft-out--N/A
unpow2N/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
lower--.f6492.0
Simplified92.0%
Taylor expanded in d1 around 0
lower-*.f64N/A
lower--.f6489.0
Simplified89.0%
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 -8.5e+186) t_0 (if (<= d3 1.9e+144) (* 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 <= -8.5e+186) {
tmp = t_0;
} else if (d3 <= 1.9e+144) {
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 <= (-8.5d+186)) then
tmp = t_0
else if (d3 <= 1.9d+144) 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 <= -8.5e+186) {
tmp = t_0;
} else if (d3 <= 1.9e+144) {
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 <= -8.5e+186: tmp = t_0 elif d3 <= 1.9e+144: 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(d1 * Float64(-d3)) tmp = 0.0 if (d3 <= -8.5e+186) tmp = t_0; elseif (d3 <= 1.9e+144) 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 <= -8.5e+186)
tmp = t_0;
elseif (d3 <= 1.9e+144)
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, -8.5e+186], t$95$0, If[LessEqual[d3, 1.9e+144], 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 \left(-d3\right)\\
\mathbf{if}\;d3 \leq -8.5 \cdot 10^{+186}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d3 \leq 1.9 \cdot 10^{+144}:\\
\;\;\;\;d1 \cdot \left(d4 + d2\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if d3 < -8.4999999999999999e186 or 1.90000000000000013e144 < d3 Initial program 87.5%
Taylor expanded in d3 around inf
mul-1-negN/A
distribute-rgt-neg-inN/A
mul-1-negN/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6487.3
Simplified87.3%
if -8.4999999999999999e186 < d3 < 1.90000000000000013e144Initial program 93.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
lower-*.f64N/A
lower-+.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6489.3
Simplified89.3%
Taylor expanded in d1 around 0
lower-*.f64N/A
lower-+.f6468.8
Simplified68.8%
Final simplification72.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 (<= d4 1e-291) (* d1 d2) (if (<= d4 2.9e+33) (* d1 (- d1)) (* d1 d4))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 1e-291) {
tmp = d1 * d2;
} else if (d4 <= 2.9e+33) {
tmp = d1 * -d1;
} else {
tmp = d1 * d4;
}
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 <= 1d-291) then
tmp = d1 * d2
else if (d4 <= 2.9d+33) then
tmp = d1 * -d1
else
tmp = d1 * d4
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 <= 1e-291) {
tmp = d1 * d2;
} else if (d4 <= 2.9e+33) {
tmp = d1 * -d1;
} else {
tmp = d1 * d4;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d4 <= 1e-291: tmp = d1 * d2 elif d4 <= 2.9e+33: tmp = d1 * -d1 else: tmp = d1 * d4 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= 1e-291) tmp = Float64(d1 * d2); elseif (d4 <= 2.9e+33) tmp = Float64(d1 * Float64(-d1)); else tmp = Float64(d1 * d4); 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 <= 1e-291)
tmp = d1 * d2;
elseif (d4 <= 2.9e+33)
tmp = d1 * -d1;
else
tmp = d1 * d4;
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, 1e-291], N[(d1 * d2), $MachinePrecision], If[LessEqual[d4, 2.9e+33], N[(d1 * (-d1)), $MachinePrecision], N[(d1 * d4), $MachinePrecision]]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq 10^{-291}:\\
\;\;\;\;d1 \cdot d2\\
\mathbf{elif}\;d4 \leq 2.9 \cdot 10^{+33}:\\
\;\;\;\;d1 \cdot \left(-d1\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot d4\\
\end{array}
\end{array}
if d4 < 9.99999999999999962e-292Initial program 93.5%
Taylor expanded in d2 around inf
lower-*.f6435.9
Simplified35.9%
if 9.99999999999999962e-292 < d4 < 2.90000000000000025e33Initial program 92.3%
Taylor expanded in d1 around inf
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
mul-1-negN/A
lower-neg.f6448.4
Simplified48.4%
if 2.90000000000000025e33 < d4 Initial program 87.0%
Taylor expanded in d4 around inf
lower-*.f6466.2
Simplified66.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 -1.12e-64) (* d1 (- d2 d3)) (* d1 (- d4 d1))))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -1.12e-64) {
tmp = d1 * (d2 - 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 (d2 <= (-1.12d-64)) then
tmp = d1 * (d2 - 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 (d2 <= -1.12e-64) {
tmp = d1 * (d2 - 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 d2 <= -1.12e-64: tmp = d1 * (d2 - 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 (d2 <= -1.12e-64) tmp = Float64(d1 * Float64(d2 - 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 (d2 <= -1.12e-64)
tmp = d1 * (d2 - 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[d2, -1.12e-64], N[(d1 * N[(d2 - d3), $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}\;d2 \leq -1.12 \cdot 10^{-64}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 - d1\right)\\
\end{array}
\end{array}
if d2 < -1.12e-64Initial program 88.3%
Taylor expanded in d4 around 0
+-commutativeN/A
associate--r+N/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6481.1
Simplified81.1%
Taylor expanded in d1 around 0
sub-negN/A
mul-1-negN/A
+-commutativeN/A
+-lft-identityN/A
associate-+l+N/A
+-commutativeN/A
mul-1-negN/A
sub-negN/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
lower-*.f64N/A
neg-sub0N/A
*-commutativeN/A
associate-*r/N/A
associate-*l/N/A
associate-/l*N/A
Simplified69.4%
if -1.12e-64 < d2 Initial program 93.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
lower-*.f64N/A
lower-+.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6478.8
Simplified78.8%
Taylor expanded in d2 around 0
lower-*.f64N/A
lower--.f6457.7
Simplified57.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 4.2e+45) (* d1 (- d2 d3)) (* 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.2e+45) {
tmp = d1 * (d2 - d3);
} 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.2d+45) then
tmp = d1 * (d2 - d3)
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.2e+45) {
tmp = d1 * (d2 - d3);
} 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.2e+45: tmp = d1 * (d2 - d3) 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.2e+45) tmp = Float64(d1 * Float64(d2 - d3)); 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.2e+45)
tmp = d1 * (d2 - d3);
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.2e+45], N[(d1 * N[(d2 - d3), $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.2 \cdot 10^{+45}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 + d2\right)\\
\end{array}
\end{array}
if d4 < 4.1999999999999999e45Initial program 93.1%
Taylor expanded in d4 around 0
+-commutativeN/A
associate--r+N/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
distribute-lft-out--N/A
lower-*.f64N/A
lower--.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6484.8
Simplified84.8%
Taylor expanded in d1 around 0
sub-negN/A
mul-1-negN/A
+-commutativeN/A
+-lft-identityN/A
associate-+l+N/A
+-commutativeN/A
mul-1-negN/A
sub-negN/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
lower-*.f64N/A
neg-sub0N/A
*-commutativeN/A
associate-*r/N/A
associate-*l/N/A
associate-/l*N/A
Simplified64.4%
if 4.1999999999999999e45 < d4 Initial program 86.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
lower-*.f64N/A
lower-+.f64N/A
mul-1-negN/A
unsub-negN/A
lower--.f6491.1
Simplified91.1%
Taylor expanded in d1 around 0
lower-*.f64N/A
lower-+.f6489.4
Simplified89.4%
Final simplification69.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 (<= d2 -1.08e+99) (* d1 d2) (* d1 d4)))
assert(d1 < d2 && d2 < d3 && d3 < d4);
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -1.08e+99) {
tmp = d1 * d2;
} else {
tmp = d1 * d4;
}
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.08d+99)) then
tmp = d1 * d2
else
tmp = d1 * d4
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.08e+99) {
tmp = d1 * d2;
} else {
tmp = d1 * d4;
}
return tmp;
}
[d1, d2, d3, d4] = sort([d1, d2, d3, d4]) def code(d1, d2, d3, d4): tmp = 0 if d2 <= -1.08e+99: tmp = d1 * d2 else: tmp = d1 * d4 return tmp
d1, d2, d3, d4 = sort([d1, d2, d3, d4]) function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -1.08e+99) tmp = Float64(d1 * d2); else tmp = Float64(d1 * d4); 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.08e+99)
tmp = d1 * d2;
else
tmp = d1 * d4;
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.08e+99], N[(d1 * d2), $MachinePrecision], N[(d1 * d4), $MachinePrecision]]
\begin{array}{l}
[d1, d2, d3, d4] = \mathsf{sort}([d1, d2, d3, d4])\\
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -1.08 \cdot 10^{+99}:\\
\;\;\;\;d1 \cdot d2\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot d4\\
\end{array}
\end{array}
if d2 < -1.08e99Initial program 85.0%
Taylor expanded in d2 around inf
lower-*.f6470.8
Simplified70.8%
if -1.08e99 < d2 Initial program 93.0%
Taylor expanded in d4 around inf
lower-*.f6433.3
Simplified33.3%
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 91.8%
Taylor expanded in d2 around inf
lower-*.f6432.9
Simplified32.9%
(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 2024207
(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)))