
(FPCore (re im) :precision binary64 (* (exp re) (cos im)))
double code(double re, double im) {
return exp(re) * cos(im);
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = exp(re) * cos(im)
end function
public static double code(double re, double im) {
return Math.exp(re) * Math.cos(im);
}
def code(re, im): return math.exp(re) * math.cos(im)
function code(re, im) return Float64(exp(re) * cos(im)) end
function tmp = code(re, im) tmp = exp(re) * cos(im); end
code[re_, im_] := N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
e^{re} \cdot \cos im
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 17 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (re im) :precision binary64 (* (exp re) (cos im)))
double code(double re, double im) {
return exp(re) * cos(im);
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = exp(re) * cos(im)
end function
public static double code(double re, double im) {
return Math.exp(re) * Math.cos(im);
}
def code(re, im): return math.exp(re) * math.cos(im)
function code(re, im) return Float64(exp(re) * cos(im)) end
function tmp = code(re, im) tmp = exp(re) * cos(im); end
code[re_, im_] := N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
e^{re} \cdot \cos im
\end{array}
(FPCore (re im) :precision binary64 (* (exp re) (cos im)))
double code(double re, double im) {
return exp(re) * cos(im);
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = exp(re) * cos(im)
end function
public static double code(double re, double im) {
return Math.exp(re) * Math.cos(im);
}
def code(re, im): return math.exp(re) * math.cos(im)
function code(re, im) return Float64(exp(re) * cos(im)) end
function tmp = code(re, im) tmp = exp(re) * cos(im); end
code[re_, im_] := N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
e^{re} \cdot \cos im
\end{array}
Initial program 100.0%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* (exp re) (cos im))))
(if (<= t_0 (- INFINITY))
(* (* im im) (* (exp re) -0.5))
(if (<= t_0 -0.05)
(cos im)
(if (<= t_0 0.0) (exp re) (if (<= t_0 0.9999435) (cos im) (exp re)))))))
double code(double re, double im) {
double t_0 = exp(re) * cos(im);
double tmp;
if (t_0 <= -((double) INFINITY)) {
tmp = (im * im) * (exp(re) * -0.5);
} else if (t_0 <= -0.05) {
tmp = cos(im);
} else if (t_0 <= 0.0) {
tmp = exp(re);
} else if (t_0 <= 0.9999435) {
tmp = cos(im);
} else {
tmp = exp(re);
}
return tmp;
}
public static double code(double re, double im) {
double t_0 = Math.exp(re) * Math.cos(im);
double tmp;
if (t_0 <= -Double.POSITIVE_INFINITY) {
tmp = (im * im) * (Math.exp(re) * -0.5);
} else if (t_0 <= -0.05) {
tmp = Math.cos(im);
} else if (t_0 <= 0.0) {
tmp = Math.exp(re);
} else if (t_0 <= 0.9999435) {
tmp = Math.cos(im);
} else {
tmp = Math.exp(re);
}
return tmp;
}
def code(re, im): t_0 = math.exp(re) * math.cos(im) tmp = 0 if t_0 <= -math.inf: tmp = (im * im) * (math.exp(re) * -0.5) elif t_0 <= -0.05: tmp = math.cos(im) elif t_0 <= 0.0: tmp = math.exp(re) elif t_0 <= 0.9999435: tmp = math.cos(im) else: tmp = math.exp(re) return tmp
function code(re, im) t_0 = Float64(exp(re) * cos(im)) tmp = 0.0 if (t_0 <= Float64(-Inf)) tmp = Float64(Float64(im * im) * Float64(exp(re) * -0.5)); elseif (t_0 <= -0.05) tmp = cos(im); elseif (t_0 <= 0.0) tmp = exp(re); elseif (t_0 <= 0.9999435) tmp = cos(im); else tmp = exp(re); end return tmp end
function tmp_2 = code(re, im) t_0 = exp(re) * cos(im); tmp = 0.0; if (t_0 <= -Inf) tmp = (im * im) * (exp(re) * -0.5); elseif (t_0 <= -0.05) tmp = cos(im); elseif (t_0 <= 0.0) tmp = exp(re); elseif (t_0 <= 0.9999435) tmp = cos(im); else tmp = exp(re); end tmp_2 = tmp; end
code[re_, im_] := Block[{t$95$0 = N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, (-Infinity)], N[(N[(im * im), $MachinePrecision] * N[(N[Exp[re], $MachinePrecision] * -0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, -0.05], N[Cos[im], $MachinePrecision], If[LessEqual[t$95$0, 0.0], N[Exp[re], $MachinePrecision], If[LessEqual[t$95$0, 0.9999435], N[Cos[im], $MachinePrecision], N[Exp[re], $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{re} \cdot \cos im\\
\mathbf{if}\;t\_0 \leq -\infty:\\
\;\;\;\;\left(im \cdot im\right) \cdot \left(e^{re} \cdot -0.5\right)\\
\mathbf{elif}\;t\_0 \leq -0.05:\\
\;\;\;\;\cos im\\
\mathbf{elif}\;t\_0 \leq 0:\\
\;\;\;\;e^{re}\\
\mathbf{elif}\;t\_0 \leq 0.9999435:\\
\;\;\;\;\cos im\\
\mathbf{else}:\\
\;\;\;\;e^{re}\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < -inf.0Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64100.0
Simplified100.0%
Taylor expanded in im around inf
associate-*r*N/A
*-commutativeN/A
associate-*r*N/A
lower-*.f64N/A
unpow2N/A
lower-*.f64N/A
lower-*.f64N/A
lower-exp.f64100.0
Simplified100.0%
if -inf.0 < (*.f64 (exp.f64 re) (cos.f64 im)) < -0.050000000000000003 or 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) < 0.999943499999999985Initial program 100.0%
Taylor expanded in re around 0
lower-cos.f64100.0
Simplified100.0%
if -0.050000000000000003 < (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0 or 0.999943499999999985 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6499.8
Simplified99.8%
Final simplification99.9%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* (exp re) (cos im))))
(if (<= t_0 (- INFINITY))
(/
(*
(fma (* re re) 0.027777777777777776 -0.25)
(* re (fma re (* (* im im) -0.5) re)))
(fma re 0.16666666666666666 -0.5))
(if (<= t_0 -0.05)
(cos im)
(if (<= t_0 0.0) (exp re) (if (<= t_0 0.9999435) (cos im) (exp re)))))))
double code(double re, double im) {
double t_0 = exp(re) * cos(im);
double tmp;
if (t_0 <= -((double) INFINITY)) {
tmp = (fma((re * re), 0.027777777777777776, -0.25) * (re * fma(re, ((im * im) * -0.5), re))) / fma(re, 0.16666666666666666, -0.5);
} else if (t_0 <= -0.05) {
tmp = cos(im);
} else if (t_0 <= 0.0) {
tmp = exp(re);
} else if (t_0 <= 0.9999435) {
tmp = cos(im);
} else {
tmp = exp(re);
}
return tmp;
}
function code(re, im) t_0 = Float64(exp(re) * cos(im)) tmp = 0.0 if (t_0 <= Float64(-Inf)) tmp = Float64(Float64(fma(Float64(re * re), 0.027777777777777776, -0.25) * Float64(re * fma(re, Float64(Float64(im * im) * -0.5), re))) / fma(re, 0.16666666666666666, -0.5)); elseif (t_0 <= -0.05) tmp = cos(im); elseif (t_0 <= 0.0) tmp = exp(re); elseif (t_0 <= 0.9999435) tmp = cos(im); else tmp = exp(re); end return tmp end
code[re_, im_] := Block[{t$95$0 = N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, (-Infinity)], N[(N[(N[(N[(re * re), $MachinePrecision] * 0.027777777777777776 + -0.25), $MachinePrecision] * N[(re * N[(re * N[(N[(im * im), $MachinePrecision] * -0.5), $MachinePrecision] + re), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] / N[(re * 0.16666666666666666 + -0.5), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, -0.05], N[Cos[im], $MachinePrecision], If[LessEqual[t$95$0, 0.0], N[Exp[re], $MachinePrecision], If[LessEqual[t$95$0, 0.9999435], N[Cos[im], $MachinePrecision], N[Exp[re], $MachinePrecision]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{re} \cdot \cos im\\
\mathbf{if}\;t\_0 \leq -\infty:\\
\;\;\;\;\frac{\mathsf{fma}\left(re \cdot re, 0.027777777777777776, -0.25\right) \cdot \left(re \cdot \mathsf{fma}\left(re, \left(im \cdot im\right) \cdot -0.5, re\right)\right)}{\mathsf{fma}\left(re, 0.16666666666666666, -0.5\right)}\\
\mathbf{elif}\;t\_0 \leq -0.05:\\
\;\;\;\;\cos im\\
\mathbf{elif}\;t\_0 \leq 0:\\
\;\;\;\;e^{re}\\
\mathbf{elif}\;t\_0 \leq 0.9999435:\\
\;\;\;\;\cos im\\
\mathbf{else}:\\
\;\;\;\;e^{re}\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < -inf.0Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64100.0
Simplified100.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6478.9
Simplified78.9%
Taylor expanded in re around inf
*-commutativeN/A
cube-multN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6478.9
Simplified78.9%
Applied egg-rr85.9%
if -inf.0 < (*.f64 (exp.f64 re) (cos.f64 im)) < -0.050000000000000003 or 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) < 0.999943499999999985Initial program 100.0%
Taylor expanded in re around 0
lower-cos.f64100.0
Simplified100.0%
if -0.050000000000000003 < (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0 or 0.999943499999999985 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6499.8
Simplified99.8%
Final simplification99.1%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* (exp re) (cos im))))
(if (<= t_0 0.0)
(* -0.5 (* im (fma re im im)))
(if (<= t_0 20.0)
(fma re (fma 0.5 re 1.0) 1.0)
(* (* re re) (fma re 0.16666666666666666 0.5))))))
double code(double re, double im) {
double t_0 = exp(re) * cos(im);
double tmp;
if (t_0 <= 0.0) {
tmp = -0.5 * (im * fma(re, im, im));
} else if (t_0 <= 20.0) {
tmp = fma(re, fma(0.5, re, 1.0), 1.0);
} else {
tmp = (re * re) * fma(re, 0.16666666666666666, 0.5);
}
return tmp;
}
function code(re, im) t_0 = Float64(exp(re) * cos(im)) tmp = 0.0 if (t_0 <= 0.0) tmp = Float64(-0.5 * Float64(im * fma(re, im, im))); elseif (t_0 <= 20.0) tmp = fma(re, fma(0.5, re, 1.0), 1.0); else tmp = Float64(Float64(re * re) * fma(re, 0.16666666666666666, 0.5)); end return tmp end
code[re_, im_] := Block[{t$95$0 = N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], N[(-0.5 * N[(im * N[(re * im + im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, 20.0], N[(re * N[(0.5 * re + 1.0), $MachinePrecision] + 1.0), $MachinePrecision], N[(N[(re * re), $MachinePrecision] * N[(re * 0.16666666666666666 + 0.5), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{re} \cdot \cos im\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;-0.5 \cdot \left(im \cdot \mathsf{fma}\left(re, im, im\right)\right)\\
\mathbf{elif}\;t\_0 \leq 20:\\
\;\;\;\;\mathsf{fma}\left(re, \mathsf{fma}\left(0.5, re, 1\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;\left(re \cdot re\right) \cdot \mathsf{fma}\left(re, 0.16666666666666666, 0.5\right)\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6462.6
Simplified62.6%
Taylor expanded in re around 0
associate-+r+N/A
distribute-rgt1-inN/A
+-commutativeN/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
lower-+.f648.5
Simplified8.5%
Taylor expanded in im around inf
lower-*.f64N/A
unpow2N/A
associate-*l*N/A
lower-*.f64N/A
+-commutativeN/A
distribute-rgt-inN/A
*-lft-identityN/A
lower-fma.f6419.3
Simplified19.3%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) < 20Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6471.0
Simplified71.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6469.4
Simplified69.4%
if 20 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f64100.0
Simplified100.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6465.9
Simplified65.9%
Taylor expanded in re around inf
*-commutativeN/A
cube-multN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6465.9
Simplified65.9%
Final simplification48.4%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* (exp re) (cos im))))
(if (<= t_0 0.0)
(* -0.5 (* im (fma re im im)))
(if (<= t_0 20.0)
(fma re (fma 0.5 re 1.0) 1.0)
(* re (* re (* re 0.16666666666666666)))))))
double code(double re, double im) {
double t_0 = exp(re) * cos(im);
double tmp;
if (t_0 <= 0.0) {
tmp = -0.5 * (im * fma(re, im, im));
} else if (t_0 <= 20.0) {
tmp = fma(re, fma(0.5, re, 1.0), 1.0);
} else {
tmp = re * (re * (re * 0.16666666666666666));
}
return tmp;
}
function code(re, im) t_0 = Float64(exp(re) * cos(im)) tmp = 0.0 if (t_0 <= 0.0) tmp = Float64(-0.5 * Float64(im * fma(re, im, im))); elseif (t_0 <= 20.0) tmp = fma(re, fma(0.5, re, 1.0), 1.0); else tmp = Float64(re * Float64(re * Float64(re * 0.16666666666666666))); end return tmp end
code[re_, im_] := Block[{t$95$0 = N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], N[(-0.5 * N[(im * N[(re * im + im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$0, 20.0], N[(re * N[(0.5 * re + 1.0), $MachinePrecision] + 1.0), $MachinePrecision], N[(re * N[(re * N[(re * 0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{re} \cdot \cos im\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;-0.5 \cdot \left(im \cdot \mathsf{fma}\left(re, im, im\right)\right)\\
\mathbf{elif}\;t\_0 \leq 20:\\
\;\;\;\;\mathsf{fma}\left(re, \mathsf{fma}\left(0.5, re, 1\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;re \cdot \left(re \cdot \left(re \cdot 0.16666666666666666\right)\right)\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6462.6
Simplified62.6%
Taylor expanded in re around 0
associate-+r+N/A
distribute-rgt1-inN/A
+-commutativeN/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
lower-+.f648.5
Simplified8.5%
Taylor expanded in im around inf
lower-*.f64N/A
unpow2N/A
associate-*l*N/A
lower-*.f64N/A
+-commutativeN/A
distribute-rgt-inN/A
*-lft-identityN/A
lower-fma.f6419.3
Simplified19.3%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) < 20Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6471.0
Simplified71.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6469.4
Simplified69.4%
if 20 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f64100.0
Simplified100.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6465.9
Simplified65.9%
Taylor expanded in re around inf
*-commutativeN/A
cube-multN/A
unpow2N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6465.9
Simplified65.9%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* (exp re) (cos im))))
(if (<= t_0 0.0)
(fma -0.5 (* im im) 1.0)
(if (<= t_0 20.0)
(fma re (fma 0.5 re 1.0) 1.0)
(* re (* re (* re 0.16666666666666666)))))))
double code(double re, double im) {
double t_0 = exp(re) * cos(im);
double tmp;
if (t_0 <= 0.0) {
tmp = fma(-0.5, (im * im), 1.0);
} else if (t_0 <= 20.0) {
tmp = fma(re, fma(0.5, re, 1.0), 1.0);
} else {
tmp = re * (re * (re * 0.16666666666666666));
}
return tmp;
}
function code(re, im) t_0 = Float64(exp(re) * cos(im)) tmp = 0.0 if (t_0 <= 0.0) tmp = fma(-0.5, Float64(im * im), 1.0); elseif (t_0 <= 20.0) tmp = fma(re, fma(0.5, re, 1.0), 1.0); else tmp = Float64(re * Float64(re * Float64(re * 0.16666666666666666))); end return tmp end
code[re_, im_] := Block[{t$95$0 = N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], N[(-0.5 * N[(im * im), $MachinePrecision] + 1.0), $MachinePrecision], If[LessEqual[t$95$0, 20.0], N[(re * N[(0.5 * re + 1.0), $MachinePrecision] + 1.0), $MachinePrecision], N[(re * N[(re * N[(re * 0.16666666666666666), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{re} \cdot \cos im\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;\mathsf{fma}\left(-0.5, im \cdot im, 1\right)\\
\mathbf{elif}\;t\_0 \leq 20:\\
\;\;\;\;\mathsf{fma}\left(re, \mathsf{fma}\left(0.5, re, 1\right), 1\right)\\
\mathbf{else}:\\
\;\;\;\;re \cdot \left(re \cdot \left(re \cdot 0.16666666666666666\right)\right)\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in re around 0
lower-cos.f6428.3
Simplified28.3%
Taylor expanded in im around 0
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f647.9
Simplified7.9%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) < 20Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6471.0
Simplified71.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6469.4
Simplified69.4%
if 20 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f64100.0
Simplified100.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6465.9
Simplified65.9%
Taylor expanded in re around inf
*-commutativeN/A
cube-multN/A
unpow2N/A
associate-*l*N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6465.9
Simplified65.9%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* (exp re) (cos im))))
(if (<= t_0 0.0)
(fma -0.5 (* im im) 1.0)
(if (<= t_0 2.0) (+ re 1.0) (fma re (* re 0.5) re)))))
double code(double re, double im) {
double t_0 = exp(re) * cos(im);
double tmp;
if (t_0 <= 0.0) {
tmp = fma(-0.5, (im * im), 1.0);
} else if (t_0 <= 2.0) {
tmp = re + 1.0;
} else {
tmp = fma(re, (re * 0.5), re);
}
return tmp;
}
function code(re, im) t_0 = Float64(exp(re) * cos(im)) tmp = 0.0 if (t_0 <= 0.0) tmp = fma(-0.5, Float64(im * im), 1.0); elseif (t_0 <= 2.0) tmp = Float64(re + 1.0); else tmp = fma(re, Float64(re * 0.5), re); end return tmp end
code[re_, im_] := Block[{t$95$0 = N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], N[(-0.5 * N[(im * im), $MachinePrecision] + 1.0), $MachinePrecision], If[LessEqual[t$95$0, 2.0], N[(re + 1.0), $MachinePrecision], N[(re * N[(re * 0.5), $MachinePrecision] + re), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{re} \cdot \cos im\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;\mathsf{fma}\left(-0.5, im \cdot im, 1\right)\\
\mathbf{elif}\;t\_0 \leq 2:\\
\;\;\;\;re + 1\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(re, re \cdot 0.5, re\right)\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in re around 0
lower-cos.f6428.3
Simplified28.3%
Taylor expanded in im around 0
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f647.9
Simplified7.9%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) < 2Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6470.7
Simplified70.7%
Taylor expanded in re around 0
lower-+.f6469.5
Simplified69.5%
if 2 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f64100.0
Simplified100.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6446.4
Simplified46.4%
Taylor expanded in re around inf
distribute-lft-inN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
unpow2N/A
associate-*l*N/A
rgt-mult-inverseN/A
*-rgt-identityN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6446.4
Simplified46.4%
Final simplification39.9%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* (exp re) (cos im))))
(if (<= t_0 0.0)
(fma -0.5 (* im im) 1.0)
(if (<= t_0 20.0) (+ re 1.0) (* (* re re) 0.5)))))
double code(double re, double im) {
double t_0 = exp(re) * cos(im);
double tmp;
if (t_0 <= 0.0) {
tmp = fma(-0.5, (im * im), 1.0);
} else if (t_0 <= 20.0) {
tmp = re + 1.0;
} else {
tmp = (re * re) * 0.5;
}
return tmp;
}
function code(re, im) t_0 = Float64(exp(re) * cos(im)) tmp = 0.0 if (t_0 <= 0.0) tmp = fma(-0.5, Float64(im * im), 1.0); elseif (t_0 <= 20.0) tmp = Float64(re + 1.0); else tmp = Float64(Float64(re * re) * 0.5); end return tmp end
code[re_, im_] := Block[{t$95$0 = N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision]}, If[LessEqual[t$95$0, 0.0], N[(-0.5 * N[(im * im), $MachinePrecision] + 1.0), $MachinePrecision], If[LessEqual[t$95$0, 20.0], N[(re + 1.0), $MachinePrecision], N[(N[(re * re), $MachinePrecision] * 0.5), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
t_0 := e^{re} \cdot \cos im\\
\mathbf{if}\;t\_0 \leq 0:\\
\;\;\;\;\mathsf{fma}\left(-0.5, im \cdot im, 1\right)\\
\mathbf{elif}\;t\_0 \leq 20:\\
\;\;\;\;re + 1\\
\mathbf{else}:\\
\;\;\;\;\left(re \cdot re\right) \cdot 0.5\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in re around 0
lower-cos.f6428.3
Simplified28.3%
Taylor expanded in im around 0
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f647.9
Simplified7.9%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) < 20Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6471.0
Simplified71.0%
Taylor expanded in re around 0
lower-+.f6469.0
Simplified69.0%
if 20 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f64100.0
Simplified100.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6446.9
Simplified46.9%
Taylor expanded in re around inf
lower-*.f64N/A
unpow2N/A
lower-*.f6446.9
Simplified46.9%
Final simplification39.9%
(FPCore (re im) :precision binary64 (if (<= (* (exp re) (cos im)) 0.0) (* (fma re 0.16666666666666666 0.5) (* -0.5 (* re (* re (* im im))))) (fma re (fma re (fma re 0.16666666666666666 0.5) 1.0) 1.0)))
double code(double re, double im) {
double tmp;
if ((exp(re) * cos(im)) <= 0.0) {
tmp = fma(re, 0.16666666666666666, 0.5) * (-0.5 * (re * (re * (im * im))));
} else {
tmp = fma(re, fma(re, fma(re, 0.16666666666666666, 0.5), 1.0), 1.0);
}
return tmp;
}
function code(re, im) tmp = 0.0 if (Float64(exp(re) * cos(im)) <= 0.0) tmp = Float64(fma(re, 0.16666666666666666, 0.5) * Float64(-0.5 * Float64(re * Float64(re * Float64(im * im))))); else tmp = fma(re, fma(re, fma(re, 0.16666666666666666, 0.5), 1.0), 1.0); end return tmp end
code[re_, im_] := If[LessEqual[N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision], 0.0], N[(N[(re * 0.16666666666666666 + 0.5), $MachinePrecision] * N[(-0.5 * N[(re * N[(re * N[(im * im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(re * N[(re * N[(re * 0.16666666666666666 + 0.5), $MachinePrecision] + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{re} \cdot \cos im \leq 0:\\
\;\;\;\;\mathsf{fma}\left(re, 0.16666666666666666, 0.5\right) \cdot \left(-0.5 \cdot \left(re \cdot \left(re \cdot \left(im \cdot im\right)\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(re, \mathsf{fma}\left(re, \mathsf{fma}\left(re, 0.16666666666666666, 0.5\right), 1\right), 1\right)\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6462.6
Simplified62.6%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6411.9
Simplified11.9%
Taylor expanded in re around inf
*-commutativeN/A
cube-multN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f6411.7
Simplified11.7%
Taylor expanded in im around inf
associate-*r*N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
associate-*l*N/A
lower-*.f64N/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f64N/A
unpow2N/A
lower-*.f6428.1
Simplified28.1%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6480.5
Simplified80.5%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6468.4
Simplified68.4%
(FPCore (re im) :precision binary64 (if (<= (* (exp re) (cos im)) 0.0) (* (* (* im im) -0.5) (+ re 1.0)) (fma re (fma re (fma re 0.16666666666666666 0.5) 1.0) 1.0)))
double code(double re, double im) {
double tmp;
if ((exp(re) * cos(im)) <= 0.0) {
tmp = ((im * im) * -0.5) * (re + 1.0);
} else {
tmp = fma(re, fma(re, fma(re, 0.16666666666666666, 0.5), 1.0), 1.0);
}
return tmp;
}
function code(re, im) tmp = 0.0 if (Float64(exp(re) * cos(im)) <= 0.0) tmp = Float64(Float64(Float64(im * im) * -0.5) * Float64(re + 1.0)); else tmp = fma(re, fma(re, fma(re, 0.16666666666666666, 0.5), 1.0), 1.0); end return tmp end
code[re_, im_] := If[LessEqual[N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision], 0.0], N[(N[(N[(im * im), $MachinePrecision] * -0.5), $MachinePrecision] * N[(re + 1.0), $MachinePrecision]), $MachinePrecision], N[(re * N[(re * N[(re * 0.16666666666666666 + 0.5), $MachinePrecision] + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{re} \cdot \cos im \leq 0:\\
\;\;\;\;\left(\left(im \cdot im\right) \cdot -0.5\right) \cdot \left(re + 1\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(re, \mathsf{fma}\left(re, \mathsf{fma}\left(re, 0.16666666666666666, 0.5\right), 1\right), 1\right)\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6462.6
Simplified62.6%
Taylor expanded in re around 0
associate-+r+N/A
distribute-rgt1-inN/A
+-commutativeN/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
lower-+.f648.5
Simplified8.5%
Taylor expanded in im around inf
lower-*.f64N/A
unpow2N/A
lower-*.f6424.7
Simplified24.7%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6480.5
Simplified80.5%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6468.4
Simplified68.4%
Final simplification50.6%
(FPCore (re im) :precision binary64 (if (<= (* (exp re) (cos im)) 0.0) (* (* (* im im) -0.5) (+ re 1.0)) (fma re (fma (* re re) 0.16666666666666666 1.0) 1.0)))
double code(double re, double im) {
double tmp;
if ((exp(re) * cos(im)) <= 0.0) {
tmp = ((im * im) * -0.5) * (re + 1.0);
} else {
tmp = fma(re, fma((re * re), 0.16666666666666666, 1.0), 1.0);
}
return tmp;
}
function code(re, im) tmp = 0.0 if (Float64(exp(re) * cos(im)) <= 0.0) tmp = Float64(Float64(Float64(im * im) * -0.5) * Float64(re + 1.0)); else tmp = fma(re, fma(Float64(re * re), 0.16666666666666666, 1.0), 1.0); end return tmp end
code[re_, im_] := If[LessEqual[N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision], 0.0], N[(N[(N[(im * im), $MachinePrecision] * -0.5), $MachinePrecision] * N[(re + 1.0), $MachinePrecision]), $MachinePrecision], N[(re * N[(N[(re * re), $MachinePrecision] * 0.16666666666666666 + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{re} \cdot \cos im \leq 0:\\
\;\;\;\;\left(\left(im \cdot im\right) \cdot -0.5\right) \cdot \left(re + 1\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(re, \mathsf{fma}\left(re \cdot re, 0.16666666666666666, 1\right), 1\right)\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6462.6
Simplified62.6%
Taylor expanded in re around 0
associate-+r+N/A
distribute-rgt1-inN/A
+-commutativeN/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
lower-+.f648.5
Simplified8.5%
Taylor expanded in im around inf
lower-*.f64N/A
unpow2N/A
lower-*.f6424.7
Simplified24.7%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6480.5
Simplified80.5%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6468.4
Simplified68.4%
distribute-lft-inN/A
*-commutativeN/A
associate-+l+N/A
associate-*r*N/A
lift-fma.f64N/A
lower-fma.f64N/A
lower-*.f6468.4
lift-fma.f64N/A
*-commutativeN/A
lower-fma.f6468.4
Applied egg-rr68.4%
Taylor expanded in re around 0
Simplified68.0%
Final simplification50.4%
(FPCore (re im) :precision binary64 (if (<= (* (exp re) (cos im)) 0.0) (* -0.5 (* im (fma re im im))) (fma re (fma (* re re) 0.16666666666666666 1.0) 1.0)))
double code(double re, double im) {
double tmp;
if ((exp(re) * cos(im)) <= 0.0) {
tmp = -0.5 * (im * fma(re, im, im));
} else {
tmp = fma(re, fma((re * re), 0.16666666666666666, 1.0), 1.0);
}
return tmp;
}
function code(re, im) tmp = 0.0 if (Float64(exp(re) * cos(im)) <= 0.0) tmp = Float64(-0.5 * Float64(im * fma(re, im, im))); else tmp = fma(re, fma(Float64(re * re), 0.16666666666666666, 1.0), 1.0); end return tmp end
code[re_, im_] := If[LessEqual[N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision], 0.0], N[(-0.5 * N[(im * N[(re * im + im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(re * N[(N[(re * re), $MachinePrecision] * 0.16666666666666666 + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{re} \cdot \cos im \leq 0:\\
\;\;\;\;-0.5 \cdot \left(im \cdot \mathsf{fma}\left(re, im, im\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(re, \mathsf{fma}\left(re \cdot re, 0.16666666666666666, 1\right), 1\right)\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6462.6
Simplified62.6%
Taylor expanded in re around 0
associate-+r+N/A
distribute-rgt1-inN/A
+-commutativeN/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
lower-+.f648.5
Simplified8.5%
Taylor expanded in im around inf
lower-*.f64N/A
unpow2N/A
associate-*l*N/A
lower-*.f64N/A
+-commutativeN/A
distribute-rgt-inN/A
*-lft-identityN/A
lower-fma.f6419.3
Simplified19.3%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6480.5
Simplified80.5%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6468.4
Simplified68.4%
distribute-lft-inN/A
*-commutativeN/A
associate-+l+N/A
associate-*r*N/A
lift-fma.f64N/A
lower-fma.f64N/A
lower-*.f6468.4
lift-fma.f64N/A
*-commutativeN/A
lower-fma.f6468.4
Applied egg-rr68.4%
Taylor expanded in re around 0
Simplified68.0%
(FPCore (re im) :precision binary64 (if (<= (* (exp re) (cos im)) 0.0) (fma -0.5 (* im im) 1.0) (fma re (fma 0.5 re 1.0) 1.0)))
double code(double re, double im) {
double tmp;
if ((exp(re) * cos(im)) <= 0.0) {
tmp = fma(-0.5, (im * im), 1.0);
} else {
tmp = fma(re, fma(0.5, re, 1.0), 1.0);
}
return tmp;
}
function code(re, im) tmp = 0.0 if (Float64(exp(re) * cos(im)) <= 0.0) tmp = fma(-0.5, Float64(im * im), 1.0); else tmp = fma(re, fma(0.5, re, 1.0), 1.0); end return tmp end
code[re_, im_] := If[LessEqual[N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision], 0.0], N[(-0.5 * N[(im * im), $MachinePrecision] + 1.0), $MachinePrecision], N[(re * N[(0.5 * re + 1.0), $MachinePrecision] + 1.0), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{re} \cdot \cos im \leq 0:\\
\;\;\;\;\mathsf{fma}\left(-0.5, im \cdot im, 1\right)\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(re, \mathsf{fma}\left(0.5, re, 1\right), 1\right)\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 0.0Initial program 100.0%
Taylor expanded in re around 0
lower-cos.f6428.3
Simplified28.3%
Taylor expanded in im around 0
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f647.9
Simplified7.9%
if 0.0 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6480.5
Simplified80.5%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6462.0
Simplified62.0%
(FPCore (re im) :precision binary64 (if (<= (* (exp re) (cos im)) 20.0) (+ re 1.0) (* (* re re) 0.5)))
double code(double re, double im) {
double tmp;
if ((exp(re) * cos(im)) <= 20.0) {
tmp = re + 1.0;
} else {
tmp = (re * re) * 0.5;
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if ((exp(re) * cos(im)) <= 20.0d0) then
tmp = re + 1.0d0
else
tmp = (re * re) * 0.5d0
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if ((Math.exp(re) * Math.cos(im)) <= 20.0) {
tmp = re + 1.0;
} else {
tmp = (re * re) * 0.5;
}
return tmp;
}
def code(re, im): tmp = 0 if (math.exp(re) * math.cos(im)) <= 20.0: tmp = re + 1.0 else: tmp = (re * re) * 0.5 return tmp
function code(re, im) tmp = 0.0 if (Float64(exp(re) * cos(im)) <= 20.0) tmp = Float64(re + 1.0); else tmp = Float64(Float64(re * re) * 0.5); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if ((exp(re) * cos(im)) <= 20.0) tmp = re + 1.0; else tmp = (re * re) * 0.5; end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[N[(N[Exp[re], $MachinePrecision] * N[Cos[im], $MachinePrecision]), $MachinePrecision], 20.0], N[(re + 1.0), $MachinePrecision], N[(N[(re * re), $MachinePrecision] * 0.5), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;e^{re} \cdot \cos im \leq 20:\\
\;\;\;\;re + 1\\
\mathbf{else}:\\
\;\;\;\;\left(re \cdot re\right) \cdot 0.5\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (cos.f64 im)) < 20Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6466.4
Simplified66.4%
Taylor expanded in re around 0
lower-+.f6435.1
Simplified35.1%
if 20 < (*.f64 (exp.f64 re) (cos.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f64100.0
Simplified100.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6446.9
Simplified46.9%
Taylor expanded in re around inf
lower-*.f64N/A
unpow2N/A
lower-*.f6446.9
Simplified46.9%
Final simplification37.4%
(FPCore (re im)
:precision binary64
(if (<= re -1.35e+154)
(* (* (* im im) -0.5) (+ re 1.0))
(if (<= re -5.6e+102)
(*
(*
(* re re)
(*
(/
(fma (* re re) 0.027777777777777776 -0.25)
(fma (* re (* re re)) 0.004629629629629629 -0.125))
(-
(fma re (* re 0.027777777777777776) 0.25)
(* re -0.08333333333333333))))
(fma im (* im -0.5) 1.0))
(if (<= re -600.0)
(* -0.5 (* im (fma re im im)))
(if (<= re 2.4)
(cos im)
(if (<= re 7.8e+71)
(fma
(* im im)
(fma
(* im im)
(fma im (* im -0.001388888888888889) 0.041666666666666664)
-0.5)
1.0)
(if (<= re 8.2e+148)
(fma
(*
re
(fma
(fma re 0.16666666666666666 0.5)
(* (* re re) (fma re 0.16666666666666666 0.5))
-1.0))
(/ 1.0 (fma re (fma re 0.16666666666666666 0.5) -1.0))
1.0)
(* (* re re) 0.5))))))))
double code(double re, double im) {
double tmp;
if (re <= -1.35e+154) {
tmp = ((im * im) * -0.5) * (re + 1.0);
} else if (re <= -5.6e+102) {
tmp = ((re * re) * ((fma((re * re), 0.027777777777777776, -0.25) / fma((re * (re * re)), 0.004629629629629629, -0.125)) * (fma(re, (re * 0.027777777777777776), 0.25) - (re * -0.08333333333333333)))) * fma(im, (im * -0.5), 1.0);
} else if (re <= -600.0) {
tmp = -0.5 * (im * fma(re, im, im));
} else if (re <= 2.4) {
tmp = cos(im);
} else if (re <= 7.8e+71) {
tmp = fma((im * im), fma((im * im), fma(im, (im * -0.001388888888888889), 0.041666666666666664), -0.5), 1.0);
} else if (re <= 8.2e+148) {
tmp = fma((re * fma(fma(re, 0.16666666666666666, 0.5), ((re * re) * fma(re, 0.16666666666666666, 0.5)), -1.0)), (1.0 / fma(re, fma(re, 0.16666666666666666, 0.5), -1.0)), 1.0);
} else {
tmp = (re * re) * 0.5;
}
return tmp;
}
function code(re, im) tmp = 0.0 if (re <= -1.35e+154) tmp = Float64(Float64(Float64(im * im) * -0.5) * Float64(re + 1.0)); elseif (re <= -5.6e+102) tmp = Float64(Float64(Float64(re * re) * Float64(Float64(fma(Float64(re * re), 0.027777777777777776, -0.25) / fma(Float64(re * Float64(re * re)), 0.004629629629629629, -0.125)) * Float64(fma(re, Float64(re * 0.027777777777777776), 0.25) - Float64(re * -0.08333333333333333)))) * fma(im, Float64(im * -0.5), 1.0)); elseif (re <= -600.0) tmp = Float64(-0.5 * Float64(im * fma(re, im, im))); elseif (re <= 2.4) tmp = cos(im); elseif (re <= 7.8e+71) tmp = fma(Float64(im * im), fma(Float64(im * im), fma(im, Float64(im * -0.001388888888888889), 0.041666666666666664), -0.5), 1.0); elseif (re <= 8.2e+148) tmp = fma(Float64(re * fma(fma(re, 0.16666666666666666, 0.5), Float64(Float64(re * re) * fma(re, 0.16666666666666666, 0.5)), -1.0)), Float64(1.0 / fma(re, fma(re, 0.16666666666666666, 0.5), -1.0)), 1.0); else tmp = Float64(Float64(re * re) * 0.5); end return tmp end
code[re_, im_] := If[LessEqual[re, -1.35e+154], N[(N[(N[(im * im), $MachinePrecision] * -0.5), $MachinePrecision] * N[(re + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[re, -5.6e+102], N[(N[(N[(re * re), $MachinePrecision] * N[(N[(N[(N[(re * re), $MachinePrecision] * 0.027777777777777776 + -0.25), $MachinePrecision] / N[(N[(re * N[(re * re), $MachinePrecision]), $MachinePrecision] * 0.004629629629629629 + -0.125), $MachinePrecision]), $MachinePrecision] * N[(N[(re * N[(re * 0.027777777777777776), $MachinePrecision] + 0.25), $MachinePrecision] - N[(re * -0.08333333333333333), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]), $MachinePrecision] * N[(im * N[(im * -0.5), $MachinePrecision] + 1.0), $MachinePrecision]), $MachinePrecision], If[LessEqual[re, -600.0], N[(-0.5 * N[(im * N[(re * im + im), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[re, 2.4], N[Cos[im], $MachinePrecision], If[LessEqual[re, 7.8e+71], N[(N[(im * im), $MachinePrecision] * N[(N[(im * im), $MachinePrecision] * N[(im * N[(im * -0.001388888888888889), $MachinePrecision] + 0.041666666666666664), $MachinePrecision] + -0.5), $MachinePrecision] + 1.0), $MachinePrecision], If[LessEqual[re, 8.2e+148], N[(N[(re * N[(N[(re * 0.16666666666666666 + 0.5), $MachinePrecision] * N[(N[(re * re), $MachinePrecision] * N[(re * 0.16666666666666666 + 0.5), $MachinePrecision]), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision] * N[(1.0 / N[(re * N[(re * 0.16666666666666666 + 0.5), $MachinePrecision] + -1.0), $MachinePrecision]), $MachinePrecision] + 1.0), $MachinePrecision], N[(N[(re * re), $MachinePrecision] * 0.5), $MachinePrecision]]]]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;re \leq -1.35 \cdot 10^{+154}:\\
\;\;\;\;\left(\left(im \cdot im\right) \cdot -0.5\right) \cdot \left(re + 1\right)\\
\mathbf{elif}\;re \leq -5.6 \cdot 10^{+102}:\\
\;\;\;\;\left(\left(re \cdot re\right) \cdot \left(\frac{\mathsf{fma}\left(re \cdot re, 0.027777777777777776, -0.25\right)}{\mathsf{fma}\left(re \cdot \left(re \cdot re\right), 0.004629629629629629, -0.125\right)} \cdot \left(\mathsf{fma}\left(re, re \cdot 0.027777777777777776, 0.25\right) - re \cdot -0.08333333333333333\right)\right)\right) \cdot \mathsf{fma}\left(im, im \cdot -0.5, 1\right)\\
\mathbf{elif}\;re \leq -600:\\
\;\;\;\;-0.5 \cdot \left(im \cdot \mathsf{fma}\left(re, im, im\right)\right)\\
\mathbf{elif}\;re \leq 2.4:\\
\;\;\;\;\cos im\\
\mathbf{elif}\;re \leq 7.8 \cdot 10^{+71}:\\
\;\;\;\;\mathsf{fma}\left(im \cdot im, \mathsf{fma}\left(im \cdot im, \mathsf{fma}\left(im, im \cdot -0.001388888888888889, 0.041666666666666664\right), -0.5\right), 1\right)\\
\mathbf{elif}\;re \leq 8.2 \cdot 10^{+148}:\\
\;\;\;\;\mathsf{fma}\left(re \cdot \mathsf{fma}\left(\mathsf{fma}\left(re, 0.16666666666666666, 0.5\right), \left(re \cdot re\right) \cdot \mathsf{fma}\left(re, 0.16666666666666666, 0.5\right), -1\right), \frac{1}{\mathsf{fma}\left(re, \mathsf{fma}\left(re, 0.16666666666666666, 0.5\right), -1\right)}, 1\right)\\
\mathbf{else}:\\
\;\;\;\;\left(re \cdot re\right) \cdot 0.5\\
\end{array}
\end{array}
if re < -1.35000000000000003e154Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f64100.0
Simplified100.0%
Taylor expanded in re around 0
associate-+r+N/A
distribute-rgt1-inN/A
+-commutativeN/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
lower-+.f641.8
Simplified1.8%
Taylor expanded in im around inf
lower-*.f64N/A
unpow2N/A
lower-*.f6431.8
Simplified31.8%
if -1.35000000000000003e154 < re < -5.60000000000000037e102Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6485.0
Simplified85.0%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f641.6
Simplified1.6%
Taylor expanded in re around inf
*-commutativeN/A
cube-multN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
+-commutativeN/A
distribute-rgt-inN/A
associate-*l*N/A
lft-mult-inverseN/A
metadata-evalN/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f641.6
Simplified1.6%
Applied egg-rr85.0%
if -5.60000000000000037e102 < re < -600Initial program 100.0%
Taylor expanded in im around 0
associate-*r*N/A
*-lft-identityN/A
distribute-rgt-inN/A
lower-*.f64N/A
lower-exp.f64N/A
+-commutativeN/A
unpow2N/A
associate-*r*N/A
*-commutativeN/A
lower-fma.f64N/A
*-commutativeN/A
lower-*.f6458.3
Simplified58.3%
Taylor expanded in re around 0
associate-+r+N/A
distribute-rgt1-inN/A
+-commutativeN/A
*-commutativeN/A
lower-*.f64N/A
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
lower-+.f642.2
Simplified2.2%
Taylor expanded in im around inf
lower-*.f64N/A
unpow2N/A
associate-*l*N/A
lower-*.f64N/A
+-commutativeN/A
distribute-rgt-inN/A
*-lft-identityN/A
lower-fma.f6426.6
Simplified26.6%
if -600 < re < 2.39999999999999991Initial program 100.0%
Taylor expanded in re around 0
lower-cos.f6498.3
Simplified98.3%
if 2.39999999999999991 < re < 7.8000000000000002e71Initial program 100.0%
Taylor expanded in re around 0
lower-cos.f643.9
Simplified3.9%
Taylor expanded in im around 0
+-commutativeN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
sub-negN/A
metadata-evalN/A
lower-fma.f64N/A
unpow2N/A
lower-*.f64N/A
+-commutativeN/A
*-commutativeN/A
unpow2N/A
associate-*l*N/A
lower-fma.f64N/A
lower-*.f6433.6
Simplified33.6%
if 7.8000000000000002e71 < re < 8.1999999999999996e148Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6485.7
Simplified85.7%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
*-commutativeN/A
lower-fma.f6450.5
Simplified50.5%
lift-fma.f64N/A
lift-fma.f64N/A
*-commutativeN/A
lift-fma.f64N/A
flip-+N/A
associate-*l/N/A
div-invN/A
lower-fma.f64N/A
Applied egg-rr85.7%
if 8.1999999999999996e148 < re Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6481.5
Simplified81.5%
Taylor expanded in re around 0
+-commutativeN/A
lower-fma.f64N/A
+-commutativeN/A
lower-fma.f6481.5
Simplified81.5%
Taylor expanded in re around inf
lower-*.f64N/A
unpow2N/A
lower-*.f6481.5
Simplified81.5%
Final simplification78.5%
(FPCore (re im) :precision binary64 (+ re 1.0))
double code(double re, double im) {
return re + 1.0;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = re + 1.0d0
end function
public static double code(double re, double im) {
return re + 1.0;
}
def code(re, im): return re + 1.0
function code(re, im) return Float64(re + 1.0) end
function tmp = code(re, im) tmp = re + 1.0; end
code[re_, im_] := N[(re + 1.0), $MachinePrecision]
\begin{array}{l}
\\
re + 1
\end{array}
Initial program 100.0%
Taylor expanded in im around 0
lower-exp.f6473.0
Simplified73.0%
Taylor expanded in re around 0
lower-+.f6429.2
Simplified29.2%
Final simplification29.2%
(FPCore (re im) :precision binary64 1.0)
double code(double re, double im) {
return 1.0;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = 1.0d0
end function
public static double code(double re, double im) {
return 1.0;
}
def code(re, im): return 1.0
function code(re, im) return 1.0 end
function tmp = code(re, im) tmp = 1.0; end
code[re_, im_] := 1.0
\begin{array}{l}
\\
1
\end{array}
Initial program 100.0%
Taylor expanded in re around 0
lower-cos.f6450.7
Simplified50.7%
Taylor expanded in im around 0
Simplified28.7%
herbie shell --seed 2024207
(FPCore (re im)
:name "math.exp on complex, real part"
:precision binary64
(* (exp re) (cos im)))