
(FPCore (re im) :precision binary64 (* (exp re) (sin im)))
double code(double re, double im) {
return exp(re) * sin(im);
}
real(8) function code(re, im)
use fmin_fmax_functions
real(8), intent (in) :: re
real(8), intent (in) :: im
code = exp(re) * sin(im)
end function
public static double code(double re, double im) {
return Math.exp(re) * Math.sin(im);
}
def code(re, im): return math.exp(re) * math.sin(im)
function code(re, im) return Float64(exp(re) * sin(im)) end
function tmp = code(re, im) tmp = exp(re) * sin(im); end
code[re_, im_] := N[(N[Exp[re], $MachinePrecision] * N[Sin[im], $MachinePrecision]), $MachinePrecision]
e^{re} \cdot \sin im
Herbie found 10 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (re im) :precision binary64 (* (exp re) (sin im)))
double code(double re, double im) {
return exp(re) * sin(im);
}
real(8) function code(re, im)
use fmin_fmax_functions
real(8), intent (in) :: re
real(8), intent (in) :: im
code = exp(re) * sin(im)
end function
public static double code(double re, double im) {
return Math.exp(re) * Math.sin(im);
}
def code(re, im): return math.exp(re) * math.sin(im)
function code(re, im) return Float64(exp(re) * sin(im)) end
function tmp = code(re, im) tmp = exp(re) * sin(im); end
code[re_, im_] := N[(N[Exp[re], $MachinePrecision] * N[Sin[im], $MachinePrecision]), $MachinePrecision]
e^{re} \cdot \sin im
(FPCore (re im)
:precision binary64
(let* ((t_0 (sin (fabs im)))
(t_1 (* (+ 1.0 re) t_0))
(t_2 (* (exp re) t_0))
(t_3 (* (fabs im) (exp re))))
(*
(copysign 1.0 im)
(if (<= t_2 (- INFINITY))
(*
(exp re)
(fma
(* (* (fabs im) -0.16666666666666666) (fabs im))
(fabs im)
(fabs im)))
(if (<= t_2 -0.05)
t_1
(if (<= t_2 2e-165) t_3 (if (<= t_2 1.0) t_1 t_3)))))))double code(double re, double im) {
double t_0 = sin(fabs(im));
double t_1 = (1.0 + re) * t_0;
double t_2 = exp(re) * t_0;
double t_3 = fabs(im) * exp(re);
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = exp(re) * fma(((fabs(im) * -0.16666666666666666) * fabs(im)), fabs(im), fabs(im));
} else if (t_2 <= -0.05) {
tmp = t_1;
} else if (t_2 <= 2e-165) {
tmp = t_3;
} else if (t_2 <= 1.0) {
tmp = t_1;
} else {
tmp = t_3;
}
return copysign(1.0, im) * tmp;
}
function code(re, im) t_0 = sin(abs(im)) t_1 = Float64(Float64(1.0 + re) * t_0) t_2 = Float64(exp(re) * t_0) t_3 = Float64(abs(im) * exp(re)) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = Float64(exp(re) * fma(Float64(Float64(abs(im) * -0.16666666666666666) * abs(im)), abs(im), abs(im))); elseif (t_2 <= -0.05) tmp = t_1; elseif (t_2 <= 2e-165) tmp = t_3; elseif (t_2 <= 1.0) tmp = t_1; else tmp = t_3; end return Float64(copysign(1.0, im) * tmp) end
code[re_, im_] := Block[{t$95$0 = N[Sin[N[Abs[im], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[(N[(1.0 + re), $MachinePrecision] * t$95$0), $MachinePrecision]}, Block[{t$95$2 = N[(N[Exp[re], $MachinePrecision] * t$95$0), $MachinePrecision]}, Block[{t$95$3 = N[(N[Abs[im], $MachinePrecision] * N[Exp[re], $MachinePrecision]), $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[t$95$2, (-Infinity)], N[(N[Exp[re], $MachinePrecision] * N[(N[(N[(N[Abs[im], $MachinePrecision] * -0.16666666666666666), $MachinePrecision] * N[Abs[im], $MachinePrecision]), $MachinePrecision] * N[Abs[im], $MachinePrecision] + N[Abs[im], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, -0.05], t$95$1, If[LessEqual[t$95$2, 2e-165], t$95$3, If[LessEqual[t$95$2, 1.0], t$95$1, t$95$3]]]]), $MachinePrecision]]]]]
\begin{array}{l}
t_0 := \sin \left(\left|im\right|\right)\\
t_1 := \left(1 + re\right) \cdot t\_0\\
t_2 := e^{re} \cdot t\_0\\
t_3 := \left|im\right| \cdot e^{re}\\
\mathsf{copysign}\left(1, im\right) \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -\infty:\\
\;\;\;\;e^{re} \cdot \mathsf{fma}\left(\left(\left|im\right| \cdot -0.16666666666666666\right) \cdot \left|im\right|, \left|im\right|, \left|im\right|\right)\\
\mathbf{elif}\;t\_2 \leq -0.05:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{-165}:\\
\;\;\;\;t\_3\\
\mathbf{elif}\;t\_2 \leq 1:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_3\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (sin.f64 im)) < -inf.0Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-+.f64N/A
lower-*.f64N/A
lower-pow.f6460.1%
Applied rewrites60.1%
lift-*.f64N/A
lift-+.f64N/A
distribute-lft-inN/A
*-rgt-identityN/A
+-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lift-pow.f64N/A
unpow2N/A
associate-*r*N/A
lower-fma.f64N/A
lower-*.f64N/A
lower-*.f6460.1%
Applied rewrites60.1%
if -inf.0 < (*.f64 (exp.f64 re) (sin.f64 im)) < -0.050000000000000003 or 2e-165 < (*.f64 (exp.f64 re) (sin.f64 im)) < 1Initial program 100.0%
Taylor expanded in re around 0
lower-+.f6451.9%
Applied rewrites51.9%
if -0.050000000000000003 < (*.f64 (exp.f64 re) (sin.f64 im)) < 2e-165 or 1 < (*.f64 (exp.f64 re) (sin.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-exp.f6469.2%
Applied rewrites69.2%
(FPCore (re im)
:precision binary64
(let* ((t_0 (* (fabs im) (exp re)))
(t_1 (sin (fabs im)))
(t_2 (* (exp re) t_1)))
(*
(copysign 1.0 im)
(if (<= t_2 (- INFINITY))
(*
(exp re)
(fma
(* (* (fabs im) -0.16666666666666666) (fabs im))
(fabs im)
(fabs im)))
(if (<= t_2 -0.05)
t_1
(if (<= t_2 2e-73) t_0 (if (<= t_2 1.0) t_1 t_0)))))))double code(double re, double im) {
double t_0 = fabs(im) * exp(re);
double t_1 = sin(fabs(im));
double t_2 = exp(re) * t_1;
double tmp;
if (t_2 <= -((double) INFINITY)) {
tmp = exp(re) * fma(((fabs(im) * -0.16666666666666666) * fabs(im)), fabs(im), fabs(im));
} else if (t_2 <= -0.05) {
tmp = t_1;
} else if (t_2 <= 2e-73) {
tmp = t_0;
} else if (t_2 <= 1.0) {
tmp = t_1;
} else {
tmp = t_0;
}
return copysign(1.0, im) * tmp;
}
function code(re, im) t_0 = Float64(abs(im) * exp(re)) t_1 = sin(abs(im)) t_2 = Float64(exp(re) * t_1) tmp = 0.0 if (t_2 <= Float64(-Inf)) tmp = Float64(exp(re) * fma(Float64(Float64(abs(im) * -0.16666666666666666) * abs(im)), abs(im), abs(im))); elseif (t_2 <= -0.05) tmp = t_1; elseif (t_2 <= 2e-73) tmp = t_0; elseif (t_2 <= 1.0) tmp = t_1; else tmp = t_0; end return Float64(copysign(1.0, im) * tmp) end
code[re_, im_] := Block[{t$95$0 = N[(N[Abs[im], $MachinePrecision] * N[Exp[re], $MachinePrecision]), $MachinePrecision]}, Block[{t$95$1 = N[Sin[N[Abs[im], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[(N[Exp[re], $MachinePrecision] * t$95$1), $MachinePrecision]}, N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[t$95$2, (-Infinity)], N[(N[Exp[re], $MachinePrecision] * N[(N[(N[(N[Abs[im], $MachinePrecision] * -0.16666666666666666), $MachinePrecision] * N[Abs[im], $MachinePrecision]), $MachinePrecision] * N[Abs[im], $MachinePrecision] + N[Abs[im], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], If[LessEqual[t$95$2, -0.05], t$95$1, If[LessEqual[t$95$2, 2e-73], t$95$0, If[LessEqual[t$95$2, 1.0], t$95$1, t$95$0]]]]), $MachinePrecision]]]]
\begin{array}{l}
t_0 := \left|im\right| \cdot e^{re}\\
t_1 := \sin \left(\left|im\right|\right)\\
t_2 := e^{re} \cdot t\_1\\
\mathsf{copysign}\left(1, im\right) \cdot \begin{array}{l}
\mathbf{if}\;t\_2 \leq -\infty:\\
\;\;\;\;e^{re} \cdot \mathsf{fma}\left(\left(\left|im\right| \cdot -0.16666666666666666\right) \cdot \left|im\right|, \left|im\right|, \left|im\right|\right)\\
\mathbf{elif}\;t\_2 \leq -0.05:\\
\;\;\;\;t\_1\\
\mathbf{elif}\;t\_2 \leq 2 \cdot 10^{-73}:\\
\;\;\;\;t\_0\\
\mathbf{elif}\;t\_2 \leq 1:\\
\;\;\;\;t\_1\\
\mathbf{else}:\\
\;\;\;\;t\_0\\
\end{array}
\end{array}
if (*.f64 (exp.f64 re) (sin.f64 im)) < -inf.0Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-+.f64N/A
lower-*.f64N/A
lower-pow.f6460.1%
Applied rewrites60.1%
lift-*.f64N/A
lift-+.f64N/A
distribute-lft-inN/A
*-rgt-identityN/A
+-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lift-pow.f64N/A
unpow2N/A
associate-*r*N/A
lower-fma.f64N/A
lower-*.f64N/A
lower-*.f6460.1%
Applied rewrites60.1%
if -inf.0 < (*.f64 (exp.f64 re) (sin.f64 im)) < -0.050000000000000003 or 2e-73 < (*.f64 (exp.f64 re) (sin.f64 im)) < 1Initial program 100.0%
Taylor expanded in re around 0
lower-sin.f6451.4%
Applied rewrites51.4%
if -0.050000000000000003 < (*.f64 (exp.f64 re) (sin.f64 im)) < 2e-73 or 1 < (*.f64 (exp.f64 re) (sin.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-exp.f6469.2%
Applied rewrites69.2%
(FPCore (re im)
:precision binary64
(*
(copysign 1.0 im)
(if (<= (* (exp re) (sin (fabs im))) -0.05)
(*
(exp re)
(fma
(* (* (fabs im) -0.16666666666666666) (fabs im))
(fabs im)
(fabs im)))
(* (fabs im) (exp re)))))double code(double re, double im) {
double tmp;
if ((exp(re) * sin(fabs(im))) <= -0.05) {
tmp = exp(re) * fma(((fabs(im) * -0.16666666666666666) * fabs(im)), fabs(im), fabs(im));
} else {
tmp = fabs(im) * exp(re);
}
return copysign(1.0, im) * tmp;
}
function code(re, im) tmp = 0.0 if (Float64(exp(re) * sin(abs(im))) <= -0.05) tmp = Float64(exp(re) * fma(Float64(Float64(abs(im) * -0.16666666666666666) * abs(im)), abs(im), abs(im))); else tmp = Float64(abs(im) * exp(re)); end return Float64(copysign(1.0, im) * tmp) end
code[re_, im_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[Exp[re], $MachinePrecision] * N[Sin[N[Abs[im], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -0.05], N[(N[Exp[re], $MachinePrecision] * N[(N[(N[(N[Abs[im], $MachinePrecision] * -0.16666666666666666), $MachinePrecision] * N[Abs[im], $MachinePrecision]), $MachinePrecision] * N[Abs[im], $MachinePrecision] + N[Abs[im], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[Abs[im], $MachinePrecision] * N[Exp[re], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\mathsf{copysign}\left(1, im\right) \cdot \begin{array}{l}
\mathbf{if}\;e^{re} \cdot \sin \left(\left|im\right|\right) \leq -0.05:\\
\;\;\;\;e^{re} \cdot \mathsf{fma}\left(\left(\left|im\right| \cdot -0.16666666666666666\right) \cdot \left|im\right|, \left|im\right|, \left|im\right|\right)\\
\mathbf{else}:\\
\;\;\;\;\left|im\right| \cdot e^{re}\\
\end{array}
if (*.f64 (exp.f64 re) (sin.f64 im)) < -0.050000000000000003Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-+.f64N/A
lower-*.f64N/A
lower-pow.f6460.1%
Applied rewrites60.1%
lift-*.f64N/A
lift-+.f64N/A
distribute-lft-inN/A
*-rgt-identityN/A
+-commutativeN/A
lift-*.f64N/A
associate-*r*N/A
lift-pow.f64N/A
unpow2N/A
associate-*r*N/A
lower-fma.f64N/A
lower-*.f64N/A
lower-*.f6460.1%
Applied rewrites60.1%
if -0.050000000000000003 < (*.f64 (exp.f64 re) (sin.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-exp.f6469.2%
Applied rewrites69.2%
(FPCore (re im)
:precision binary64
(*
(copysign 1.0 im)
(if (<= (* (exp re) (sin (fabs im))) -0.05)
(*
(+ 1.0 re)
(fma
(fabs im)
(* (fabs im) (* -0.16666666666666666 (fabs im)))
(fabs im)))
(* (fabs im) (exp re)))))double code(double re, double im) {
double tmp;
if ((exp(re) * sin(fabs(im))) <= -0.05) {
tmp = (1.0 + re) * fma(fabs(im), (fabs(im) * (-0.16666666666666666 * fabs(im))), fabs(im));
} else {
tmp = fabs(im) * exp(re);
}
return copysign(1.0, im) * tmp;
}
function code(re, im) tmp = 0.0 if (Float64(exp(re) * sin(abs(im))) <= -0.05) tmp = Float64(Float64(1.0 + re) * fma(abs(im), Float64(abs(im) * Float64(-0.16666666666666666 * abs(im))), abs(im))); else tmp = Float64(abs(im) * exp(re)); end return Float64(copysign(1.0, im) * tmp) end
code[re_, im_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[Exp[re], $MachinePrecision] * N[Sin[N[Abs[im], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -0.05], N[(N[(1.0 + re), $MachinePrecision] * N[(N[Abs[im], $MachinePrecision] * N[(N[Abs[im], $MachinePrecision] * N[(-0.16666666666666666 * N[Abs[im], $MachinePrecision]), $MachinePrecision]), $MachinePrecision] + N[Abs[im], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[Abs[im], $MachinePrecision] * N[Exp[re], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\mathsf{copysign}\left(1, im\right) \cdot \begin{array}{l}
\mathbf{if}\;e^{re} \cdot \sin \left(\left|im\right|\right) \leq -0.05:\\
\;\;\;\;\left(1 + re\right) \cdot \mathsf{fma}\left(\left|im\right|, \left|im\right| \cdot \left(-0.16666666666666666 \cdot \left|im\right|\right), \left|im\right|\right)\\
\mathbf{else}:\\
\;\;\;\;\left|im\right| \cdot e^{re}\\
\end{array}
if (*.f64 (exp.f64 re) (sin.f64 im)) < -0.050000000000000003Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-+.f64N/A
lower-*.f64N/A
lower-pow.f6460.1%
Applied rewrites60.1%
lift-*.f64N/A
lift-+.f64N/A
+-commutativeN/A
distribute-lft-inN/A
lift-*.f64N/A
*-commutativeN/A
associate-*r*N/A
lift-pow.f64N/A
unpow2N/A
cube-unmultN/A
*-lft-identityN/A
*-rgt-identityN/A
lower-fma.f64N/A
*-lft-identityN/A
metadata-evalN/A
pow-plusN/A
lift-pow.f64N/A
lower-*.f6460.1%
lift-pow.f64N/A
unpow2N/A
lower-*.f6460.1%
Applied rewrites60.1%
Taylor expanded in re around 0
lower-+.f6431.6%
Applied rewrites31.6%
lift-fma.f64N/A
lift-*.f64N/A
associate-*l*N/A
lift-*.f64N/A
associate-*l*N/A
lower-fma.f64N/A
lower-*.f64N/A
*-commutativeN/A
lower-*.f6431.6%
Applied rewrites31.6%
if -0.050000000000000003 < (*.f64 (exp.f64 re) (sin.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-exp.f6469.2%
Applied rewrites69.2%
(FPCore (re im)
:precision binary64
(*
(copysign 1.0 im)
(if (<= (* (exp re) (sin (fabs im))) -0.05)
(*
1.0
(fma
(* (* (fabs im) (fabs im)) (fabs im))
-0.16666666666666666
(fabs im)))
(* (fabs im) (exp re)))))double code(double re, double im) {
double tmp;
if ((exp(re) * sin(fabs(im))) <= -0.05) {
tmp = 1.0 * fma(((fabs(im) * fabs(im)) * fabs(im)), -0.16666666666666666, fabs(im));
} else {
tmp = fabs(im) * exp(re);
}
return copysign(1.0, im) * tmp;
}
function code(re, im) tmp = 0.0 if (Float64(exp(re) * sin(abs(im))) <= -0.05) tmp = Float64(1.0 * fma(Float64(Float64(abs(im) * abs(im)) * abs(im)), -0.16666666666666666, abs(im))); else tmp = Float64(abs(im) * exp(re)); end return Float64(copysign(1.0, im) * tmp) end
code[re_, im_] := N[(N[With[{TMP1 = Abs[1.0], TMP2 = Sign[im]}, TMP1 * If[TMP2 == 0, 1, TMP2]], $MachinePrecision] * If[LessEqual[N[(N[Exp[re], $MachinePrecision] * N[Sin[N[Abs[im], $MachinePrecision]], $MachinePrecision]), $MachinePrecision], -0.05], N[(1.0 * N[(N[(N[(N[Abs[im], $MachinePrecision] * N[Abs[im], $MachinePrecision]), $MachinePrecision] * N[Abs[im], $MachinePrecision]), $MachinePrecision] * -0.16666666666666666 + N[Abs[im], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[(N[Abs[im], $MachinePrecision] * N[Exp[re], $MachinePrecision]), $MachinePrecision]]), $MachinePrecision]
\mathsf{copysign}\left(1, im\right) \cdot \begin{array}{l}
\mathbf{if}\;e^{re} \cdot \sin \left(\left|im\right|\right) \leq -0.05:\\
\;\;\;\;1 \cdot \mathsf{fma}\left(\left(\left|im\right| \cdot \left|im\right|\right) \cdot \left|im\right|, -0.16666666666666666, \left|im\right|\right)\\
\mathbf{else}:\\
\;\;\;\;\left|im\right| \cdot e^{re}\\
\end{array}
if (*.f64 (exp.f64 re) (sin.f64 im)) < -0.050000000000000003Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-+.f64N/A
lower-*.f64N/A
lower-pow.f6460.1%
Applied rewrites60.1%
lift-*.f64N/A
lift-+.f64N/A
+-commutativeN/A
distribute-lft-inN/A
lift-*.f64N/A
*-commutativeN/A
associate-*r*N/A
lift-pow.f64N/A
unpow2N/A
cube-unmultN/A
*-lft-identityN/A
*-rgt-identityN/A
lower-fma.f64N/A
*-lft-identityN/A
metadata-evalN/A
pow-plusN/A
lift-pow.f64N/A
lower-*.f6460.1%
lift-pow.f64N/A
unpow2N/A
lower-*.f6460.1%
Applied rewrites60.1%
Taylor expanded in re around 0
Applied rewrites30.5%
if -0.050000000000000003 < (*.f64 (exp.f64 re) (sin.f64 im)) Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-exp.f6469.2%
Applied rewrites69.2%
(FPCore (re im) :precision binary64 (* im (exp re)))
double code(double re, double im) {
return im * exp(re);
}
real(8) function code(re, im)
use fmin_fmax_functions
real(8), intent (in) :: re
real(8), intent (in) :: im
code = im * exp(re)
end function
public static double code(double re, double im) {
return im * Math.exp(re);
}
def code(re, im): return im * math.exp(re)
function code(re, im) return Float64(im * exp(re)) end
function tmp = code(re, im) tmp = im * exp(re); end
code[re_, im_] := N[(im * N[Exp[re], $MachinePrecision]), $MachinePrecision]
im \cdot e^{re}
Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-exp.f6469.2%
Applied rewrites69.2%
(FPCore (re im) :precision binary64 (* im (sqrt (* (- re -1.0) (- re -1.0)))))
double code(double re, double im) {
return im * sqrt(((re - -1.0) * (re - -1.0)));
}
real(8) function code(re, im)
use fmin_fmax_functions
real(8), intent (in) :: re
real(8), intent (in) :: im
code = im * sqrt(((re - (-1.0d0)) * (re - (-1.0d0))))
end function
public static double code(double re, double im) {
return im * Math.sqrt(((re - -1.0) * (re - -1.0)));
}
def code(re, im): return im * math.sqrt(((re - -1.0) * (re - -1.0)))
function code(re, im) return Float64(im * sqrt(Float64(Float64(re - -1.0) * Float64(re - -1.0)))) end
function tmp = code(re, im) tmp = im * sqrt(((re - -1.0) * (re - -1.0))); end
code[re_, im_] := N[(im * N[Sqrt[N[(N[(re - -1.0), $MachinePrecision] * N[(re - -1.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
im \cdot \sqrt{\left(re - -1\right) \cdot \left(re - -1\right)}
Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-exp.f6469.2%
Applied rewrites69.2%
Taylor expanded in re around 0
lower-+.f6430.3%
Applied rewrites30.3%
rem-square-sqrtN/A
sqrt-unprodN/A
lower-sqrt.f64N/A
lower-*.f6437.2%
lift-+.f64N/A
+-commutativeN/A
add-flipN/A
lower--.f64N/A
metadata-eval37.2%
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
metadata-evalN/A
Applied rewrites37.2%
(FPCore (re im) :precision binary64 (fma re im im))
double code(double re, double im) {
return fma(re, im, im);
}
function code(re, im) return fma(re, im, im) end
code[re_, im_] := N[(re * im + im), $MachinePrecision]
\mathsf{fma}\left(re, im, im\right)
Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-exp.f6469.2%
Applied rewrites69.2%
Taylor expanded in re around 0
lower-+.f64N/A
lower-*.f6430.3%
Applied rewrites30.3%
lift-+.f64N/A
+-commutativeN/A
lift-*.f64N/A
*-commutativeN/A
lower-fma.f6430.3%
Applied rewrites30.3%
(FPCore (re im) :precision binary64 im)
double code(double re, double im) {
return im;
}
real(8) function code(re, im)
use fmin_fmax_functions
real(8), intent (in) :: re
real(8), intent (in) :: im
code = im
end function
public static double code(double re, double im) {
return im;
}
def code(re, im): return im
function code(re, im) return im end
function tmp = code(re, im) tmp = im; end
code[re_, im_] := im
im
Initial program 100.0%
Taylor expanded in im around 0
lower-*.f64N/A
lower-exp.f6469.2%
Applied rewrites69.2%
Taylor expanded in re around 0
Applied rewrites27.0%
herbie shell --seed 2025313 -o setup:search
(FPCore (re im)
:name "math.exp on complex, imaginary part"
:precision binary64
(* (exp re) (sin im)))