
(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}
(FPCore (d1 d2 d3 d4) :precision binary64 (fma d2 d1 (* d1 (- (- d4 d1) d3))))
double code(double d1, double d2, double d3, double d4) {
return fma(d2, d1, (d1 * ((d4 - d1) - d3)));
}
function code(d1, d2, d3, d4) return fma(d2, d1, Float64(d1 * Float64(Float64(d4 - d1) - d3))) end
code[d1_, d2_, d3_, d4_] := N[(d2 * d1 + N[(d1 * N[(N[(d4 - d1), $MachinePrecision] - d3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(d2, d1, d1 \cdot \left(\left(d4 - d1\right) - d3\right)\right)
\end{array}
Initial program 89.0%
associate--l+N/A
sub-negN/A
associate-+l+N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
distribute-rgt-neg-inN/A
distribute-rgt-out--N/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
neg-lowering-neg.f64N/A
--lowering--.f6499.6
Applied egg-rr99.6%
Final simplification99.6%
(FPCore (d1 d2 d3 d4) :precision binary64 (if (<= (- (+ (- (* d2 d1) (* d1 d3)) (* d1 d4)) (* d1 d1)) INFINITY) (fma d1 (- d4 d1) (* d1 (- d2 d3))) (* d1 (- d4 (+ d1 d3)))))
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (((((d2 * d1) - (d1 * d3)) + (d1 * d4)) - (d1 * d1)) <= ((double) INFINITY)) {
tmp = fma(d1, (d4 - d1), (d1 * (d2 - d3)));
} else {
tmp = d1 * (d4 - (d1 + d3));
}
return tmp;
}
function code(d1, d2, d3, d4) tmp = 0.0 if (Float64(Float64(Float64(Float64(d2 * d1) - Float64(d1 * d3)) + Float64(d1 * d4)) - Float64(d1 * d1)) <= Inf) tmp = fma(d1, Float64(d4 - d1), Float64(d1 * Float64(d2 - d3))); else tmp = Float64(d1 * Float64(d4 - Float64(d1 + d3))); end return tmp end
code[d1_, d2_, d3_, d4_] := If[LessEqual[N[(N[(N[(N[(d2 * d1), $MachinePrecision] - N[(d1 * d3), $MachinePrecision]), $MachinePrecision] + N[(d1 * d4), $MachinePrecision]), $MachinePrecision] - N[(d1 * d1), $MachinePrecision]), $MachinePrecision], Infinity], N[(d1 * N[(d4 - d1), $MachinePrecision] + N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d4 - N[(d1 + d3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;\left(\left(d2 \cdot d1 - d1 \cdot d3\right) + d1 \cdot d4\right) - d1 \cdot d1 \leq \infty:\\
\;\;\;\;\mathsf{fma}\left(d1, d4 - d1, d1 \cdot \left(d2 - d3\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 - \left(d1 + d3\right)\right)\\
\end{array}
\end{array}
if (-.f64 (+.f64 (-.f64 (*.f64 d1 d2) (*.f64 d1 d3)) (*.f64 d4 d1)) (*.f64 d1 d1)) < +inf.0Initial program 99.9%
associate--l+N/A
+-commutativeN/A
distribute-rgt-out--N/A
accelerator-lowering-fma.f64N/A
--lowering--.f64N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64100.0
Applied egg-rr100.0%
if +inf.0 < (-.f64 (+.f64 (-.f64 (*.f64 d1 d2) (*.f64 d1 d3)) (*.f64 d4 d1)) (*.f64 d1 d1)) Initial program 0.0%
associate--l+N/A
sub-negN/A
associate-+l+N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
distribute-rgt-neg-inN/A
distribute-rgt-out--N/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
neg-lowering-neg.f64N/A
--lowering--.f6496.4
Applied egg-rr96.4%
Taylor expanded in d2 around 0
*-lowering-*.f64N/A
--lowering--.f64N/A
+-lowering-+.f6496.4
Simplified96.4%
Final simplification99.6%
(FPCore (d1 d2 d3 d4)
:precision binary64
(let* ((t_0 (* d1 (- d2 d3))))
(if (<= d4 -4.2e-170)
(* d1 (- d2 d1))
(if (<= d4 1.26e-20)
t_0
(if (<= d4 270000000000.0)
(* d1 (- d4 d1))
(if (<= d4 6.5e+97) t_0 (* d1 (+ d2 d4))))))))
double code(double d1, double d2, double d3, double d4) {
double t_0 = d1 * (d2 - d3);
double tmp;
if (d4 <= -4.2e-170) {
tmp = d1 * (d2 - d1);
} else if (d4 <= 1.26e-20) {
tmp = t_0;
} else if (d4 <= 270000000000.0) {
tmp = d1 * (d4 - d1);
} else if (d4 <= 6.5e+97) {
tmp = t_0;
} else {
tmp = d1 * (d2 + d4);
}
return tmp;
}
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 * (d2 - d3)
if (d4 <= (-4.2d-170)) then
tmp = d1 * (d2 - d1)
else if (d4 <= 1.26d-20) then
tmp = t_0
else if (d4 <= 270000000000.0d0) then
tmp = d1 * (d4 - d1)
else if (d4 <= 6.5d+97) then
tmp = t_0
else
tmp = d1 * (d2 + d4)
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double t_0 = d1 * (d2 - d3);
double tmp;
if (d4 <= -4.2e-170) {
tmp = d1 * (d2 - d1);
} else if (d4 <= 1.26e-20) {
tmp = t_0;
} else if (d4 <= 270000000000.0) {
tmp = d1 * (d4 - d1);
} else if (d4 <= 6.5e+97) {
tmp = t_0;
} else {
tmp = d1 * (d2 + d4);
}
return tmp;
}
def code(d1, d2, d3, d4): t_0 = d1 * (d2 - d3) tmp = 0 if d4 <= -4.2e-170: tmp = d1 * (d2 - d1) elif d4 <= 1.26e-20: tmp = t_0 elif d4 <= 270000000000.0: tmp = d1 * (d4 - d1) elif d4 <= 6.5e+97: tmp = t_0 else: tmp = d1 * (d2 + d4) return tmp
function code(d1, d2, d3, d4) t_0 = Float64(d1 * Float64(d2 - d3)) tmp = 0.0 if (d4 <= -4.2e-170) tmp = Float64(d1 * Float64(d2 - d1)); elseif (d4 <= 1.26e-20) tmp = t_0; elseif (d4 <= 270000000000.0) tmp = Float64(d1 * Float64(d4 - d1)); elseif (d4 <= 6.5e+97) tmp = t_0; else tmp = Float64(d1 * Float64(d2 + d4)); end return tmp end
function tmp_2 = code(d1, d2, d3, d4) t_0 = d1 * (d2 - d3); tmp = 0.0; if (d4 <= -4.2e-170) tmp = d1 * (d2 - d1); elseif (d4 <= 1.26e-20) tmp = t_0; elseif (d4 <= 270000000000.0) tmp = d1 * (d4 - d1); elseif (d4 <= 6.5e+97) tmp = t_0; else tmp = d1 * (d2 + d4); end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := Block[{t$95$0 = N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d4, -4.2e-170], N[(d1 * N[(d2 - d1), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 1.26e-20], t$95$0, If[LessEqual[d4, 270000000000.0], N[(d1 * N[(d4 - d1), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 6.5e+97], t$95$0, N[(d1 * N[(d2 + d4), $MachinePrecision]), $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := d1 \cdot \left(d2 - d3\right)\\
\mathbf{if}\;d4 \leq -4.2 \cdot 10^{-170}:\\
\;\;\;\;d1 \cdot \left(d2 - d1\right)\\
\mathbf{elif}\;d4 \leq 1.26 \cdot 10^{-20}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d4 \leq 270000000000:\\
\;\;\;\;d1 \cdot \left(d4 - d1\right)\\
\mathbf{elif}\;d4 \leq 6.5 \cdot 10^{+97}:\\
\;\;\;\;t\_0\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d2 + d4\right)\\
\end{array}
\end{array}
if d4 < -4.2000000000000001e-170Initial program 90.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
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6482.0
Simplified82.0%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
--lowering--.f6450.7
Simplified50.7%
if -4.2000000000000001e-170 < d4 < 1.26e-20 or 2.7e11 < d4 < 6.4999999999999999e97Initial program 88.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
*-lowering-*.f64N/A
--lowering--.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6495.3
Simplified95.3%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
--lowering--.f6481.2
Simplified81.2%
if 1.26e-20 < d4 < 2.7e11Initial program 100.0%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6485.9
Simplified85.9%
Taylor expanded in d2 around 0
*-lowering-*.f64N/A
--lowering--.f6485.9
Simplified85.9%
if 6.4999999999999999e97 < d4 Initial program 84.6%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6492.5
Simplified92.5%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
+-commutativeN/A
+-lowering-+.f6487.4
Simplified87.4%
Final simplification69.3%
(FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d4 4.5e-72) (* d1 (- (- d2 d1) d3)) (if (<= d4 49.0) (* d1 (- d4 (+ d1 d3))) (* d1 (+ d2 (- d4 d3))))))
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 4.5e-72) {
tmp = d1 * ((d2 - d1) - d3);
} else if (d4 <= 49.0) {
tmp = d1 * (d4 - (d1 + d3));
} else {
tmp = d1 * (d2 + (d4 - d3));
}
return tmp;
}
real(8) function code(d1, d2, d3, d4)
real(8), intent (in) :: d1
real(8), intent (in) :: d2
real(8), intent (in) :: d3
real(8), intent (in) :: d4
real(8) :: tmp
if (d4 <= 4.5d-72) then
tmp = d1 * ((d2 - d1) - d3)
else if (d4 <= 49.0d0) then
tmp = d1 * (d4 - (d1 + d3))
else
tmp = d1 * (d2 + (d4 - d3))
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= 4.5e-72) {
tmp = d1 * ((d2 - d1) - d3);
} else if (d4 <= 49.0) {
tmp = d1 * (d4 - (d1 + d3));
} else {
tmp = d1 * (d2 + (d4 - d3));
}
return tmp;
}
def code(d1, d2, d3, d4): tmp = 0 if d4 <= 4.5e-72: tmp = d1 * ((d2 - d1) - d3) elif d4 <= 49.0: tmp = d1 * (d4 - (d1 + d3)) else: tmp = d1 * (d2 + (d4 - d3)) return tmp
function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= 4.5e-72) tmp = Float64(d1 * Float64(Float64(d2 - d1) - d3)); elseif (d4 <= 49.0) tmp = Float64(d1 * Float64(d4 - Float64(d1 + d3))); else tmp = Float64(d1 * Float64(d2 + Float64(d4 - d3))); end return tmp end
function tmp_2 = code(d1, d2, d3, d4) tmp = 0.0; if (d4 <= 4.5e-72) tmp = d1 * ((d2 - d1) - d3); elseif (d4 <= 49.0) tmp = d1 * (d4 - (d1 + d3)); else tmp = d1 * (d2 + (d4 - d3)); end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := If[LessEqual[d4, 4.5e-72], N[(d1 * N[(N[(d2 - d1), $MachinePrecision] - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 49.0], N[(d1 * N[(d4 - N[(d1 + d3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d2 + N[(d4 - d3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq 4.5 \cdot 10^{-72}:\\
\;\;\;\;d1 \cdot \left(\left(d2 - d1\right) - d3\right)\\
\mathbf{elif}\;d4 \leq 49:\\
\;\;\;\;d1 \cdot \left(d4 - \left(d1 + d3\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d3\right)\right)\\
\end{array}
\end{array}
if d4 < 4.5e-72Initial program 89.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
*-lowering-*.f64N/A
--lowering--.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6481.5
Simplified81.5%
if 4.5e-72 < d4 < 49Initial program 93.3%
associate--l+N/A
sub-negN/A
associate-+l+N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
distribute-rgt-neg-inN/A
distribute-rgt-out--N/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
neg-lowering-neg.f64N/A
--lowering--.f64100.0
Applied egg-rr100.0%
Taylor expanded in d2 around 0
*-lowering-*.f64N/A
--lowering--.f64N/A
+-lowering-+.f6487.3
Simplified87.3%
if 49 < d4 Initial program 85.7%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
--lowering--.f6494.8
Simplified94.8%
(FPCore (d1 d2 d3 d4)
:precision binary64
(let* ((t_0 (* d1 (+ d2 (- d4 d3)))))
(if (<= d3 -1.48e+23)
t_0
(if (<= d3 2500000000000.0) (* d1 (+ d2 (- d4 d1))) t_0))))
double code(double d1, double d2, double d3, double d4) {
double t_0 = d1 * (d2 + (d4 - d3));
double tmp;
if (d3 <= -1.48e+23) {
tmp = t_0;
} else if (d3 <= 2500000000000.0) {
tmp = d1 * (d2 + (d4 - d1));
} else {
tmp = t_0;
}
return tmp;
}
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 * (d2 + (d4 - d3))
if (d3 <= (-1.48d+23)) then
tmp = t_0
else if (d3 <= 2500000000000.0d0) then
tmp = d1 * (d2 + (d4 - d1))
else
tmp = t_0
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double t_0 = d1 * (d2 + (d4 - d3));
double tmp;
if (d3 <= -1.48e+23) {
tmp = t_0;
} else if (d3 <= 2500000000000.0) {
tmp = d1 * (d2 + (d4 - d1));
} else {
tmp = t_0;
}
return tmp;
}
def code(d1, d2, d3, d4): t_0 = d1 * (d2 + (d4 - d3)) tmp = 0 if d3 <= -1.48e+23: tmp = t_0 elif d3 <= 2500000000000.0: tmp = d1 * (d2 + (d4 - d1)) else: tmp = t_0 return tmp
function code(d1, d2, d3, d4) t_0 = Float64(d1 * Float64(d2 + Float64(d4 - d3))) tmp = 0.0 if (d3 <= -1.48e+23) tmp = t_0; elseif (d3 <= 2500000000000.0) tmp = Float64(d1 * Float64(d2 + Float64(d4 - d1))); else tmp = t_0; end return tmp end
function tmp_2 = code(d1, d2, d3, d4) t_0 = d1 * (d2 + (d4 - d3)); tmp = 0.0; if (d3 <= -1.48e+23) tmp = t_0; elseif (d3 <= 2500000000000.0) tmp = d1 * (d2 + (d4 - d1)); else tmp = t_0; end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := Block[{t$95$0 = N[(d1 * N[(d2 + N[(d4 - d3), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]}, If[LessEqual[d3, -1.48e+23], t$95$0, If[LessEqual[d3, 2500000000000.0], N[(d1 * N[(d2 + N[(d4 - d1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := d1 \cdot \left(d2 + \left(d4 - d3\right)\right)\\
\mathbf{if}\;d3 \leq -1.48 \cdot 10^{+23}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d3 \leq 2500000000000:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if d3 < -1.4799999999999999e23 or 2.5e12 < d3 Initial program 86.4%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
associate--l+N/A
+-lowering-+.f64N/A
--lowering--.f6493.2
Simplified93.2%
if -1.4799999999999999e23 < d3 < 2.5e12Initial program 91.2%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6497.4
Simplified97.4%
(FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d3 -6.5e+78) (* d1 (- d4 d3)) (if (<= d3 6.5e+108) (* d1 (+ d2 (- d4 d1))) (* d1 (- d2 d3)))))
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d3 <= -6.5e+78) {
tmp = d1 * (d4 - d3);
} else if (d3 <= 6.5e+108) {
tmp = d1 * (d2 + (d4 - d1));
} else {
tmp = d1 * (d2 - d3);
}
return tmp;
}
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 <= (-6.5d+78)) then
tmp = d1 * (d4 - d3)
else if (d3 <= 6.5d+108) then
tmp = d1 * (d2 + (d4 - d1))
else
tmp = d1 * (d2 - d3)
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d3 <= -6.5e+78) {
tmp = d1 * (d4 - d3);
} else if (d3 <= 6.5e+108) {
tmp = d1 * (d2 + (d4 - d1));
} else {
tmp = d1 * (d2 - d3);
}
return tmp;
}
def code(d1, d2, d3, d4): tmp = 0 if d3 <= -6.5e+78: tmp = d1 * (d4 - d3) elif d3 <= 6.5e+108: tmp = d1 * (d2 + (d4 - d1)) else: tmp = d1 * (d2 - d3) return tmp
function code(d1, d2, d3, d4) tmp = 0.0 if (d3 <= -6.5e+78) tmp = Float64(d1 * Float64(d4 - d3)); elseif (d3 <= 6.5e+108) tmp = Float64(d1 * Float64(d2 + Float64(d4 - d1))); else tmp = Float64(d1 * Float64(d2 - d3)); end return tmp end
function tmp_2 = code(d1, d2, d3, d4) tmp = 0.0; if (d3 <= -6.5e+78) tmp = d1 * (d4 - d3); elseif (d3 <= 6.5e+108) tmp = d1 * (d2 + (d4 - d1)); else tmp = d1 * (d2 - d3); end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := If[LessEqual[d3, -6.5e+78], N[(d1 * N[(d4 - d3), $MachinePrecision]), $MachinePrecision], If[LessEqual[d3, 6.5e+108], N[(d1 * N[(d2 + N[(d4 - d1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;d3 \leq -6.5 \cdot 10^{+78}:\\
\;\;\;\;d1 \cdot \left(d4 - d3\right)\\
\mathbf{elif}\;d3 \leq 6.5 \cdot 10^{+108}:\\
\;\;\;\;d1 \cdot \left(d2 + \left(d4 - d1\right)\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\end{array}
\end{array}
if d3 < -6.50000000000000036e78Initial program 85.4%
associate--l+N/A
sub-negN/A
associate-+l+N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
distribute-rgt-neg-inN/A
distribute-rgt-out--N/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
neg-lowering-neg.f64N/A
--lowering--.f64100.0
Applied egg-rr100.0%
Taylor expanded in d2 around 0
*-lowering-*.f64N/A
--lowering--.f64N/A
+-lowering-+.f6486.4
Simplified86.4%
Taylor expanded in d1 around 0
Simplified78.1%
if -6.50000000000000036e78 < d3 < 6.4999999999999996e108Initial program 89.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
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6494.5
Simplified94.5%
if 6.4999999999999996e108 < d3 Initial program 90.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
*-lowering-*.f64N/A
--lowering--.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6485.6
Simplified85.6%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
--lowering--.f6483.3
Simplified83.3%
(FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d4 -6.2e-168) (* d1 (- d2 d1)) (if (<= d4 6.6e+96) (* d1 (- d2 d3)) (* d1 (+ d2 d4)))))
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= -6.2e-168) {
tmp = d1 * (d2 - d1);
} else if (d4 <= 6.6e+96) {
tmp = d1 * (d2 - d3);
} else {
tmp = d1 * (d2 + d4);
}
return tmp;
}
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 <= (-6.2d-168)) then
tmp = d1 * (d2 - d1)
else if (d4 <= 6.6d+96) then
tmp = d1 * (d2 - d3)
else
tmp = d1 * (d2 + d4)
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d4 <= -6.2e-168) {
tmp = d1 * (d2 - d1);
} else if (d4 <= 6.6e+96) {
tmp = d1 * (d2 - d3);
} else {
tmp = d1 * (d2 + d4);
}
return tmp;
}
def code(d1, d2, d3, d4): tmp = 0 if d4 <= -6.2e-168: tmp = d1 * (d2 - d1) elif d4 <= 6.6e+96: tmp = d1 * (d2 - d3) else: tmp = d1 * (d2 + d4) return tmp
function code(d1, d2, d3, d4) tmp = 0.0 if (d4 <= -6.2e-168) tmp = Float64(d1 * Float64(d2 - d1)); elseif (d4 <= 6.6e+96) tmp = Float64(d1 * Float64(d2 - d3)); else tmp = Float64(d1 * Float64(d2 + d4)); end return tmp end
function tmp_2 = code(d1, d2, d3, d4) tmp = 0.0; if (d4 <= -6.2e-168) tmp = d1 * (d2 - d1); elseif (d4 <= 6.6e+96) tmp = d1 * (d2 - d3); else tmp = d1 * (d2 + d4); end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := If[LessEqual[d4, -6.2e-168], N[(d1 * N[(d2 - d1), $MachinePrecision]), $MachinePrecision], If[LessEqual[d4, 6.6e+96], N[(d1 * N[(d2 - d3), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d2 + d4), $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;d4 \leq -6.2 \cdot 10^{-168}:\\
\;\;\;\;d1 \cdot \left(d2 - d1\right)\\
\mathbf{elif}\;d4 \leq 6.6 \cdot 10^{+96}:\\
\;\;\;\;d1 \cdot \left(d2 - d3\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d2 + d4\right)\\
\end{array}
\end{array}
if d4 < -6.2e-168Initial program 90.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
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6482.0
Simplified82.0%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
--lowering--.f6450.7
Simplified50.7%
if -6.2e-168 < d4 < 6.59999999999999969e96Initial program 88.8%
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
*-lowering-*.f64N/A
--lowering--.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6494.7
Simplified94.7%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
--lowering--.f6478.0
Simplified78.0%
if 6.59999999999999969e96 < d4 Initial program 84.6%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6492.5
Simplified92.5%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
+-commutativeN/A
+-lowering-+.f6487.4
Simplified87.4%
Final simplification67.8%
(FPCore (d1 d2 d3 d4) :precision binary64 (let* ((t_0 (* d1 (- d3)))) (if (<= d3 -2.6e+151) t_0 (if (<= d3 6.5e+111) (* d1 (+ d2 d4)) t_0))))
double code(double d1, double d2, double d3, double d4) {
double t_0 = d1 * -d3;
double tmp;
if (d3 <= -2.6e+151) {
tmp = t_0;
} else if (d3 <= 6.5e+111) {
tmp = d1 * (d2 + d4);
} else {
tmp = t_0;
}
return tmp;
}
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 <= (-2.6d+151)) then
tmp = t_0
else if (d3 <= 6.5d+111) then
tmp = d1 * (d2 + d4)
else
tmp = t_0
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double t_0 = d1 * -d3;
double tmp;
if (d3 <= -2.6e+151) {
tmp = t_0;
} else if (d3 <= 6.5e+111) {
tmp = d1 * (d2 + d4);
} else {
tmp = t_0;
}
return tmp;
}
def code(d1, d2, d3, d4): t_0 = d1 * -d3 tmp = 0 if d3 <= -2.6e+151: tmp = t_0 elif d3 <= 6.5e+111: tmp = d1 * (d2 + d4) else: tmp = t_0 return tmp
function code(d1, d2, d3, d4) t_0 = Float64(d1 * Float64(-d3)) tmp = 0.0 if (d3 <= -2.6e+151) tmp = t_0; elseif (d3 <= 6.5e+111) tmp = Float64(d1 * Float64(d2 + d4)); else tmp = t_0; end return tmp end
function tmp_2 = code(d1, d2, d3, d4) t_0 = d1 * -d3; tmp = 0.0; if (d3 <= -2.6e+151) tmp = t_0; elseif (d3 <= 6.5e+111) tmp = d1 * (d2 + d4); else tmp = t_0; end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := Block[{t$95$0 = N[(d1 * (-d3)), $MachinePrecision]}, If[LessEqual[d3, -2.6e+151], t$95$0, If[LessEqual[d3, 6.5e+111], N[(d1 * N[(d2 + d4), $MachinePrecision]), $MachinePrecision], t$95$0]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := d1 \cdot \left(-d3\right)\\
\mathbf{if}\;d3 \leq -2.6 \cdot 10^{+151}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;d3 \leq 6.5 \cdot 10^{+111}:\\
\;\;\;\;d1 \cdot \left(d2 + d4\right)\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if d3 < -2.60000000000000013e151 or 6.5000000000000002e111 < d3 Initial program 86.1%
Taylor expanded in d3 around inf
mul-1-negN/A
distribute-rgt-neg-inN/A
mul-1-negN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-lowering-neg.f6482.8
Simplified82.8%
if -2.60000000000000013e151 < d3 < 6.5000000000000002e111Initial program 90.1%
Taylor expanded in d3 around 0
distribute-lft-outN/A
unpow2N/A
distribute-lft-out--N/A
unsub-negN/A
mul-1-negN/A
associate-+r+N/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6492.4
Simplified92.4%
Taylor expanded in d1 around 0
*-lowering-*.f64N/A
+-commutativeN/A
+-lowering-+.f6472.5
Simplified72.5%
Final simplification75.4%
(FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d2 -3.2e+69) (* d2 d1) (if (<= d2 -8.6e-237) (* d1 (- d3)) (* d1 d4))))
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -3.2e+69) {
tmp = d2 * d1;
} else if (d2 <= -8.6e-237) {
tmp = d1 * -d3;
} else {
tmp = d1 * d4;
}
return tmp;
}
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+69)) then
tmp = d2 * d1
else if (d2 <= (-8.6d-237)) then
tmp = d1 * -d3
else
tmp = d1 * d4
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -3.2e+69) {
tmp = d2 * d1;
} else if (d2 <= -8.6e-237) {
tmp = d1 * -d3;
} else {
tmp = d1 * d4;
}
return tmp;
}
def code(d1, d2, d3, d4): tmp = 0 if d2 <= -3.2e+69: tmp = d2 * d1 elif d2 <= -8.6e-237: tmp = d1 * -d3 else: tmp = d1 * d4 return tmp
function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -3.2e+69) tmp = Float64(d2 * d1); elseif (d2 <= -8.6e-237) tmp = Float64(d1 * Float64(-d3)); else tmp = Float64(d1 * d4); end return tmp end
function tmp_2 = code(d1, d2, d3, d4) tmp = 0.0; if (d2 <= -3.2e+69) tmp = d2 * d1; elseif (d2 <= -8.6e-237) tmp = d1 * -d3; else tmp = d1 * d4; end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := If[LessEqual[d2, -3.2e+69], N[(d2 * d1), $MachinePrecision], If[LessEqual[d2, -8.6e-237], N[(d1 * (-d3)), $MachinePrecision], N[(d1 * d4), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -3.2 \cdot 10^{+69}:\\
\;\;\;\;d2 \cdot d1\\
\mathbf{elif}\;d2 \leq -8.6 \cdot 10^{-237}:\\
\;\;\;\;d1 \cdot \left(-d3\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot d4\\
\end{array}
\end{array}
if d2 < -3.19999999999999985e69Initial program 84.3%
Taylor expanded in d2 around inf
*-lowering-*.f6469.6
Simplified69.6%
if -3.19999999999999985e69 < d2 < -8.59999999999999965e-237Initial program 96.3%
Taylor expanded in d3 around inf
mul-1-negN/A
distribute-rgt-neg-inN/A
mul-1-negN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-lowering-neg.f6444.3
Simplified44.3%
if -8.59999999999999965e-237 < d2 Initial program 86.0%
Taylor expanded in d4 around inf
*-lowering-*.f6435.0
Simplified35.0%
Final simplification44.9%
(FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d2 -2.3e+70) (* d2 d1) (if (<= d2 -1.12e-36) (* d1 (- d1)) (* d1 d4))))
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -2.3e+70) {
tmp = d2 * d1;
} else if (d2 <= -1.12e-36) {
tmp = d1 * -d1;
} else {
tmp = d1 * d4;
}
return tmp;
}
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 <= (-2.3d+70)) then
tmp = d2 * d1
else if (d2 <= (-1.12d-36)) then
tmp = d1 * -d1
else
tmp = d1 * d4
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -2.3e+70) {
tmp = d2 * d1;
} else if (d2 <= -1.12e-36) {
tmp = d1 * -d1;
} else {
tmp = d1 * d4;
}
return tmp;
}
def code(d1, d2, d3, d4): tmp = 0 if d2 <= -2.3e+70: tmp = d2 * d1 elif d2 <= -1.12e-36: tmp = d1 * -d1 else: tmp = d1 * d4 return tmp
function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -2.3e+70) tmp = Float64(d2 * d1); elseif (d2 <= -1.12e-36) tmp = Float64(d1 * Float64(-d1)); else tmp = Float64(d1 * d4); end return tmp end
function tmp_2 = code(d1, d2, d3, d4) tmp = 0.0; if (d2 <= -2.3e+70) tmp = d2 * d1; elseif (d2 <= -1.12e-36) tmp = d1 * -d1; else tmp = d1 * d4; end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := If[LessEqual[d2, -2.3e+70], N[(d2 * d1), $MachinePrecision], If[LessEqual[d2, -1.12e-36], N[(d1 * (-d1)), $MachinePrecision], N[(d1 * d4), $MachinePrecision]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -2.3 \cdot 10^{+70}:\\
\;\;\;\;d2 \cdot d1\\
\mathbf{elif}\;d2 \leq -1.12 \cdot 10^{-36}:\\
\;\;\;\;d1 \cdot \left(-d1\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot d4\\
\end{array}
\end{array}
if d2 < -2.29999999999999994e70Initial program 84.3%
Taylor expanded in d2 around inf
*-lowering-*.f6469.6
Simplified69.6%
if -2.29999999999999994e70 < d2 < -1.12e-36Initial program 95.7%
Taylor expanded in d1 around inf
unpow2N/A
associate-*r*N/A
*-commutativeN/A
*-lowering-*.f64N/A
mul-1-negN/A
neg-lowering-neg.f6441.7
Simplified41.7%
if -1.12e-36 < d2 Initial program 89.5%
Taylor expanded in d4 around inf
*-lowering-*.f6437.2
Simplified37.2%
Final simplification44.0%
(FPCore (d1 d2 d3 d4) :precision binary64 (fma d4 d1 (* d1 (- (- d2 d3) d1))))
double code(double d1, double d2, double d3, double d4) {
return fma(d4, d1, (d1 * ((d2 - d3) - d1)));
}
function code(d1, d2, d3, d4) return fma(d4, d1, Float64(d1 * Float64(Float64(d2 - d3) - d1))) end
code[d1_, d2_, d3_, d4_] := N[(d4 * d1 + N[(d1 * N[(N[(d2 - d3), $MachinePrecision] - d1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
\mathsf{fma}\left(d4, d1, d1 \cdot \left(\left(d2 - d3\right) - d1\right)\right)
\end{array}
Initial program 89.0%
+-commutativeN/A
associate--l+N/A
accelerator-lowering-fma.f64N/A
distribute-lft-out--N/A
distribute-lft-out--N/A
*-lowering-*.f64N/A
--lowering--.f64N/A
--lowering--.f6498.4
Applied egg-rr98.4%
(FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d2 -2.3e+19) (* d1 (- d2 d1)) (* d1 (- d4 d3))))
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -2.3e+19) {
tmp = d1 * (d2 - d1);
} else {
tmp = d1 * (d4 - d3);
}
return tmp;
}
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 <= (-2.3d+19)) then
tmp = d1 * (d2 - d1)
else
tmp = d1 * (d4 - d3)
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -2.3e+19) {
tmp = d1 * (d2 - d1);
} else {
tmp = d1 * (d4 - d3);
}
return tmp;
}
def code(d1, d2, d3, d4): tmp = 0 if d2 <= -2.3e+19: tmp = d1 * (d2 - d1) else: tmp = d1 * (d4 - d3) return tmp
function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -2.3e+19) tmp = Float64(d1 * Float64(d2 - d1)); else tmp = Float64(d1 * Float64(d4 - d3)); end return tmp end
function tmp_2 = code(d1, d2, d3, d4) tmp = 0.0; if (d2 <= -2.3e+19) tmp = d1 * (d2 - d1); else tmp = d1 * (d4 - d3); end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := If[LessEqual[d2, -2.3e+19], N[(d1 * N[(d2 - d1), $MachinePrecision]), $MachinePrecision], N[(d1 * N[(d4 - d3), $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -2.3 \cdot 10^{+19}:\\
\;\;\;\;d1 \cdot \left(d2 - d1\right)\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot \left(d4 - d3\right)\\
\end{array}
\end{array}
if d2 < -2.3e19Initial program 85.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
*-lowering-*.f64N/A
+-lowering-+.f64N/A
mul-1-negN/A
unsub-negN/A
--lowering--.f6486.4
Simplified86.4%
Taylor expanded in d4 around 0
*-lowering-*.f64N/A
--lowering--.f6479.1
Simplified79.1%
if -2.3e19 < d2 Initial program 90.1%
associate--l+N/A
sub-negN/A
associate-+l+N/A
*-commutativeN/A
accelerator-lowering-fma.f64N/A
distribute-rgt-neg-inN/A
distribute-rgt-out--N/A
distribute-lft-outN/A
*-lowering-*.f64N/A
+-lowering-+.f64N/A
neg-lowering-neg.f64N/A
--lowering--.f64100.0
Applied egg-rr100.0%
Taylor expanded in d2 around 0
*-lowering-*.f64N/A
--lowering--.f64N/A
+-lowering-+.f6482.3
Simplified82.3%
Taylor expanded in d1 around 0
Simplified68.3%
(FPCore (d1 d2 d3 d4) :precision binary64 (if (<= d2 -3.6e-20) (* d2 d1) (* d1 d4)))
double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -3.6e-20) {
tmp = d2 * d1;
} else {
tmp = d1 * d4;
}
return tmp;
}
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.6d-20)) then
tmp = d2 * d1
else
tmp = d1 * d4
end if
code = tmp
end function
public static double code(double d1, double d2, double d3, double d4) {
double tmp;
if (d2 <= -3.6e-20) {
tmp = d2 * d1;
} else {
tmp = d1 * d4;
}
return tmp;
}
def code(d1, d2, d3, d4): tmp = 0 if d2 <= -3.6e-20: tmp = d2 * d1 else: tmp = d1 * d4 return tmp
function code(d1, d2, d3, d4) tmp = 0.0 if (d2 <= -3.6e-20) tmp = Float64(d2 * d1); else tmp = Float64(d1 * d4); end return tmp end
function tmp_2 = code(d1, d2, d3, d4) tmp = 0.0; if (d2 <= -3.6e-20) tmp = d2 * d1; else tmp = d1 * d4; end tmp_2 = tmp; end
code[d1_, d2_, d3_, d4_] := If[LessEqual[d2, -3.6e-20], N[(d2 * d1), $MachinePrecision], N[(d1 * d4), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;d2 \leq -3.6 \cdot 10^{-20}:\\
\;\;\;\;d2 \cdot d1\\
\mathbf{else}:\\
\;\;\;\;d1 \cdot d4\\
\end{array}
\end{array}
if d2 < -3.59999999999999974e-20Initial program 87.6%
Taylor expanded in d2 around inf
*-lowering-*.f6453.4
Simplified53.4%
if -3.59999999999999974e-20 < d2 Initial program 89.6%
Taylor expanded in d4 around inf
*-lowering-*.f6436.8
Simplified36.8%
Final simplification41.5%
(FPCore (d1 d2 d3 d4) :precision binary64 (* d2 d1))
double code(double d1, double d2, double d3, double d4) {
return d2 * 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 = d2 * d1
end function
public static double code(double d1, double d2, double d3, double d4) {
return d2 * d1;
}
def code(d1, d2, d3, d4): return d2 * d1
function code(d1, d2, d3, d4) return Float64(d2 * d1) end
function tmp = code(d1, d2, d3, d4) tmp = d2 * d1; end
code[d1_, d2_, d3_, d4_] := N[(d2 * d1), $MachinePrecision]
\begin{array}{l}
\\
d2 \cdot d1
\end{array}
Initial program 89.0%
Taylor expanded in d2 around inf
*-lowering-*.f6430.7
Simplified30.7%
Final simplification30.7%
(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 2024199
(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)))