
(FPCore (re im) :precision binary64 (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))
double code(double re, double im) {
return 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re)));
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = 0.5d0 * sqrt((2.0d0 * (sqrt(((re * re) + (im * im))) - re)))
end function
public static double code(double re, double im) {
return 0.5 * Math.sqrt((2.0 * (Math.sqrt(((re * re) + (im * im))) - re)));
}
def code(re, im): return 0.5 * math.sqrt((2.0 * (math.sqrt(((re * re) + (im * im))) - re)))
function code(re, im) return Float64(0.5 * sqrt(Float64(2.0 * Float64(sqrt(Float64(Float64(re * re) + Float64(im * im))) - re)))) end
function tmp = code(re, im) tmp = 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re))); end
code[re_, im_] := N[(0.5 * N[Sqrt[N[(2.0 * N[(N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\end{array}
Sampling outcomes in binary64 precision:
Herbie found 6 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (re im) :precision binary64 (* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))
double code(double re, double im) {
return 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re)));
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = 0.5d0 * sqrt((2.0d0 * (sqrt(((re * re) + (im * im))) - re)))
end function
public static double code(double re, double im) {
return 0.5 * Math.sqrt((2.0 * (Math.sqrt(((re * re) + (im * im))) - re)));
}
def code(re, im): return 0.5 * math.sqrt((2.0 * (math.sqrt(((re * re) + (im * im))) - re)))
function code(re, im) return Float64(0.5 * sqrt(Float64(2.0 * Float64(sqrt(Float64(Float64(re * re) + Float64(im * im))) - re)))) end
function tmp = code(re, im) tmp = 0.5 * sqrt((2.0 * (sqrt(((re * re) + (im * im))) - re))); end
code[re_, im_] := N[(0.5 * N[Sqrt[N[(2.0 * N[(N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision] - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \sqrt{2 \cdot \left(\sqrt{re \cdot re + im \cdot im} - re\right)}
\end{array}
(FPCore (re im) :precision binary64 (* 0.5 (sqrt (* 2.0 (- (hypot re im) re)))))
double code(double re, double im) {
return 0.5 * sqrt((2.0 * (hypot(re, im) - re)));
}
public static double code(double re, double im) {
return 0.5 * Math.sqrt((2.0 * (Math.hypot(re, im) - re)));
}
def code(re, im): return 0.5 * math.sqrt((2.0 * (math.hypot(re, im) - re)))
function code(re, im) return Float64(0.5 * sqrt(Float64(2.0 * Float64(hypot(re, im) - re)))) end
function tmp = code(re, im) tmp = 0.5 * sqrt((2.0 * (hypot(re, im) - re))); end
code[re_, im_] := N[(0.5 * N[Sqrt[N[(2.0 * N[(N[Sqrt[re ^ 2 + im ^ 2], $MachinePrecision] - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \sqrt{2 \cdot \left(\mathsf{hypot}\left(re, im\right) - re\right)}
\end{array}
Initial program 48.5%
sub-neg48.5%
sqr-neg48.5%
sub-neg48.5%
sqr-neg48.5%
hypot-define98.7%
Simplified98.7%
Final simplification98.7%
(FPCore (re im)
:precision binary64
(if (<= re -3.8e+53)
(* 0.5 (sqrt (* 2.0 (* re -2.0))))
(if (<= re 1.7e-91)
(* 0.5 (sqrt (* 2.0 (- im re))))
(if (<= re 4.5e+17)
(* 0.5 (pow (pow (* 2.0 im) 1.5) 0.3333333333333333))
(if (<= re 1.85e+60)
(* 0.5 (sqrt (* 2.0 im)))
(* 0.5 (sqrt (* 2.0 (- re re)))))))))
double code(double re, double im) {
double tmp;
if (re <= -3.8e+53) {
tmp = 0.5 * sqrt((2.0 * (re * -2.0)));
} else if (re <= 1.7e-91) {
tmp = 0.5 * sqrt((2.0 * (im - re)));
} else if (re <= 4.5e+17) {
tmp = 0.5 * pow(pow((2.0 * im), 1.5), 0.3333333333333333);
} else if (re <= 1.85e+60) {
tmp = 0.5 * sqrt((2.0 * im));
} else {
tmp = 0.5 * sqrt((2.0 * (re - re)));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (re <= (-3.8d+53)) then
tmp = 0.5d0 * sqrt((2.0d0 * (re * (-2.0d0))))
else if (re <= 1.7d-91) then
tmp = 0.5d0 * sqrt((2.0d0 * (im - re)))
else if (re <= 4.5d+17) then
tmp = 0.5d0 * (((2.0d0 * im) ** 1.5d0) ** 0.3333333333333333d0)
else if (re <= 1.85d+60) then
tmp = 0.5d0 * sqrt((2.0d0 * im))
else
tmp = 0.5d0 * sqrt((2.0d0 * (re - re)))
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (re <= -3.8e+53) {
tmp = 0.5 * Math.sqrt((2.0 * (re * -2.0)));
} else if (re <= 1.7e-91) {
tmp = 0.5 * Math.sqrt((2.0 * (im - re)));
} else if (re <= 4.5e+17) {
tmp = 0.5 * Math.pow(Math.pow((2.0 * im), 1.5), 0.3333333333333333);
} else if (re <= 1.85e+60) {
tmp = 0.5 * Math.sqrt((2.0 * im));
} else {
tmp = 0.5 * Math.sqrt((2.0 * (re - re)));
}
return tmp;
}
def code(re, im): tmp = 0 if re <= -3.8e+53: tmp = 0.5 * math.sqrt((2.0 * (re * -2.0))) elif re <= 1.7e-91: tmp = 0.5 * math.sqrt((2.0 * (im - re))) elif re <= 4.5e+17: tmp = 0.5 * math.pow(math.pow((2.0 * im), 1.5), 0.3333333333333333) elif re <= 1.85e+60: tmp = 0.5 * math.sqrt((2.0 * im)) else: tmp = 0.5 * math.sqrt((2.0 * (re - re))) return tmp
function code(re, im) tmp = 0.0 if (re <= -3.8e+53) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re * -2.0)))); elseif (re <= 1.7e-91) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(im - re)))); elseif (re <= 4.5e+17) tmp = Float64(0.5 * ((Float64(2.0 * im) ^ 1.5) ^ 0.3333333333333333)); elseif (re <= 1.85e+60) tmp = Float64(0.5 * sqrt(Float64(2.0 * im))); else tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re - re)))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (re <= -3.8e+53) tmp = 0.5 * sqrt((2.0 * (re * -2.0))); elseif (re <= 1.7e-91) tmp = 0.5 * sqrt((2.0 * (im - re))); elseif (re <= 4.5e+17) tmp = 0.5 * (((2.0 * im) ^ 1.5) ^ 0.3333333333333333); elseif (re <= 1.85e+60) tmp = 0.5 * sqrt((2.0 * im)); else tmp = 0.5 * sqrt((2.0 * (re - re))); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[re, -3.8e+53], N[(0.5 * N[Sqrt[N[(2.0 * N[(re * -2.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[re, 1.7e-91], N[(0.5 * N[Sqrt[N[(2.0 * N[(im - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[re, 4.5e+17], N[(0.5 * N[Power[N[Power[N[(2.0 * im), $MachinePrecision], 1.5], $MachinePrecision], 0.3333333333333333], $MachinePrecision]), $MachinePrecision], If[LessEqual[re, 1.85e+60], N[(0.5 * N[Sqrt[N[(2.0 * im), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * N[(re - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;re \leq -3.8 \cdot 10^{+53}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re \cdot -2\right)}\\
\mathbf{elif}\;re \leq 1.7 \cdot 10^{-91}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \leq 4.5 \cdot 10^{+17}:\\
\;\;\;\;0.5 \cdot {\left({\left(2 \cdot im\right)}^{1.5}\right)}^{0.3333333333333333}\\
\mathbf{elif}\;re \leq 1.85 \cdot 10^{+60}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot im}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re - re\right)}\\
\end{array}
\end{array}
if re < -3.79999999999999997e53Initial program 28.9%
Taylor expanded in re around -inf 89.2%
*-commutative89.2%
Simplified89.2%
if -3.79999999999999997e53 < re < 1.70000000000000013e-91Initial program 65.8%
Taylor expanded in re around 0 79.2%
if 1.70000000000000013e-91 < re < 4.5e17Initial program 82.0%
add-cbrt-cube81.9%
pow1/380.1%
add-sqr-sqrt80.1%
pow180.1%
pow1/280.1%
pow-prod-up80.1%
hypot-define90.9%
metadata-eval90.9%
Applied egg-rr90.9%
Taylor expanded in re around 0 71.4%
if 4.5e17 < re < 1.84999999999999994e60Initial program 52.2%
Taylor expanded in re around 0 75.5%
pow175.5%
*-commutative75.5%
sqrt-unprod75.9%
Applied egg-rr75.9%
unpow175.9%
Simplified75.9%
if 1.84999999999999994e60 < re Initial program 20.2%
Taylor expanded in re around inf 80.1%
Final simplification81.1%
(FPCore (re im)
:precision binary64
(if (<= re -7.5e+51)
(* 0.5 (sqrt (* 2.0 (* re -2.0))))
(if (<= re 6.3e-21)
(* 0.5 (sqrt (* 2.0 (- im re))))
(if (or (<= re 1.5e+18) (not (<= re 1.45e+62)))
(* 0.5 (sqrt (* 2.0 (- re re))))
(* 0.5 (sqrt (* 2.0 im)))))))
double code(double re, double im) {
double tmp;
if (re <= -7.5e+51) {
tmp = 0.5 * sqrt((2.0 * (re * -2.0)));
} else if (re <= 6.3e-21) {
tmp = 0.5 * sqrt((2.0 * (im - re)));
} else if ((re <= 1.5e+18) || !(re <= 1.45e+62)) {
tmp = 0.5 * sqrt((2.0 * (re - re)));
} else {
tmp = 0.5 * sqrt((2.0 * im));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (re <= (-7.5d+51)) then
tmp = 0.5d0 * sqrt((2.0d0 * (re * (-2.0d0))))
else if (re <= 6.3d-21) then
tmp = 0.5d0 * sqrt((2.0d0 * (im - re)))
else if ((re <= 1.5d+18) .or. (.not. (re <= 1.45d+62))) then
tmp = 0.5d0 * sqrt((2.0d0 * (re - re)))
else
tmp = 0.5d0 * sqrt((2.0d0 * im))
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (re <= -7.5e+51) {
tmp = 0.5 * Math.sqrt((2.0 * (re * -2.0)));
} else if (re <= 6.3e-21) {
tmp = 0.5 * Math.sqrt((2.0 * (im - re)));
} else if ((re <= 1.5e+18) || !(re <= 1.45e+62)) {
tmp = 0.5 * Math.sqrt((2.0 * (re - re)));
} else {
tmp = 0.5 * Math.sqrt((2.0 * im));
}
return tmp;
}
def code(re, im): tmp = 0 if re <= -7.5e+51: tmp = 0.5 * math.sqrt((2.0 * (re * -2.0))) elif re <= 6.3e-21: tmp = 0.5 * math.sqrt((2.0 * (im - re))) elif (re <= 1.5e+18) or not (re <= 1.45e+62): tmp = 0.5 * math.sqrt((2.0 * (re - re))) else: tmp = 0.5 * math.sqrt((2.0 * im)) return tmp
function code(re, im) tmp = 0.0 if (re <= -7.5e+51) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re * -2.0)))); elseif (re <= 6.3e-21) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(im - re)))); elseif ((re <= 1.5e+18) || !(re <= 1.45e+62)) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re - re)))); else tmp = Float64(0.5 * sqrt(Float64(2.0 * im))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (re <= -7.5e+51) tmp = 0.5 * sqrt((2.0 * (re * -2.0))); elseif (re <= 6.3e-21) tmp = 0.5 * sqrt((2.0 * (im - re))); elseif ((re <= 1.5e+18) || ~((re <= 1.45e+62))) tmp = 0.5 * sqrt((2.0 * (re - re))); else tmp = 0.5 * sqrt((2.0 * im)); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[re, -7.5e+51], N[(0.5 * N[Sqrt[N[(2.0 * N[(re * -2.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[LessEqual[re, 6.3e-21], N[(0.5 * N[Sqrt[N[(2.0 * N[(im - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], If[Or[LessEqual[re, 1.5e+18], N[Not[LessEqual[re, 1.45e+62]], $MachinePrecision]], N[(0.5 * N[Sqrt[N[(2.0 * N[(re - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * im), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;re \leq -7.5 \cdot 10^{+51}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re \cdot -2\right)}\\
\mathbf{elif}\;re \leq 6.3 \cdot 10^{-21}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\mathbf{elif}\;re \leq 1.5 \cdot 10^{+18} \lor \neg \left(re \leq 1.45 \cdot 10^{+62}\right):\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re - re\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot im}\\
\end{array}
\end{array}
if re < -7.4999999999999999e51Initial program 28.9%
Taylor expanded in re around -inf 89.2%
*-commutative89.2%
Simplified89.2%
if -7.4999999999999999e51 < re < 6.3e-21Initial program 66.2%
Taylor expanded in re around 0 77.7%
if 6.3e-21 < re < 1.5e18 or 1.44999999999999992e62 < re Initial program 28.9%
Taylor expanded in re around inf 80.5%
if 1.5e18 < re < 1.44999999999999992e62Initial program 52.2%
Taylor expanded in re around 0 75.5%
pow175.5%
*-commutative75.5%
sqrt-unprod75.9%
Applied egg-rr75.9%
unpow175.9%
Simplified75.9%
Final simplification81.0%
(FPCore (re im) :precision binary64 (if (<= re -3.2e+51) (* 0.5 (sqrt (* 2.0 (* re -2.0)))) (* 0.5 (sqrt (* 2.0 im)))))
double code(double re, double im) {
double tmp;
if (re <= -3.2e+51) {
tmp = 0.5 * sqrt((2.0 * (re * -2.0)));
} else {
tmp = 0.5 * sqrt((2.0 * im));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (re <= (-3.2d+51)) then
tmp = 0.5d0 * sqrt((2.0d0 * (re * (-2.0d0))))
else
tmp = 0.5d0 * sqrt((2.0d0 * im))
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (re <= -3.2e+51) {
tmp = 0.5 * Math.sqrt((2.0 * (re * -2.0)));
} else {
tmp = 0.5 * Math.sqrt((2.0 * im));
}
return tmp;
}
def code(re, im): tmp = 0 if re <= -3.2e+51: tmp = 0.5 * math.sqrt((2.0 * (re * -2.0))) else: tmp = 0.5 * math.sqrt((2.0 * im)) return tmp
function code(re, im) tmp = 0.0 if (re <= -3.2e+51) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re * -2.0)))); else tmp = Float64(0.5 * sqrt(Float64(2.0 * im))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (re <= -3.2e+51) tmp = 0.5 * sqrt((2.0 * (re * -2.0))); else tmp = 0.5 * sqrt((2.0 * im)); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[re, -3.2e+51], N[(0.5 * N[Sqrt[N[(2.0 * N[(re * -2.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * im), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;re \leq -3.2 \cdot 10^{+51}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re \cdot -2\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot im}\\
\end{array}
\end{array}
if re < -3.2000000000000002e51Initial program 28.9%
Taylor expanded in re around -inf 89.2%
*-commutative89.2%
Simplified89.2%
if -3.2000000000000002e51 < re Initial program 54.8%
Taylor expanded in re around 0 58.9%
pow158.9%
*-commutative58.9%
sqrt-unprod59.3%
Applied egg-rr59.3%
unpow159.3%
Simplified59.3%
Final simplification66.5%
(FPCore (re im) :precision binary64 (if (<= re -2.25e+52) (* 0.5 (sqrt (* 2.0 (* re -2.0)))) (* 0.5 (sqrt (* 2.0 (- im re))))))
double code(double re, double im) {
double tmp;
if (re <= -2.25e+52) {
tmp = 0.5 * sqrt((2.0 * (re * -2.0)));
} else {
tmp = 0.5 * sqrt((2.0 * (im - re)));
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (re <= (-2.25d+52)) then
tmp = 0.5d0 * sqrt((2.0d0 * (re * (-2.0d0))))
else
tmp = 0.5d0 * sqrt((2.0d0 * (im - re)))
end if
code = tmp
end function
public static double code(double re, double im) {
double tmp;
if (re <= -2.25e+52) {
tmp = 0.5 * Math.sqrt((2.0 * (re * -2.0)));
} else {
tmp = 0.5 * Math.sqrt((2.0 * (im - re)));
}
return tmp;
}
def code(re, im): tmp = 0 if re <= -2.25e+52: tmp = 0.5 * math.sqrt((2.0 * (re * -2.0))) else: tmp = 0.5 * math.sqrt((2.0 * (im - re))) return tmp
function code(re, im) tmp = 0.0 if (re <= -2.25e+52) tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(re * -2.0)))); else tmp = Float64(0.5 * sqrt(Float64(2.0 * Float64(im - re)))); end return tmp end
function tmp_2 = code(re, im) tmp = 0.0; if (re <= -2.25e+52) tmp = 0.5 * sqrt((2.0 * (re * -2.0))); else tmp = 0.5 * sqrt((2.0 * (im - re))); end tmp_2 = tmp; end
code[re_, im_] := If[LessEqual[re, -2.25e+52], N[(0.5 * N[Sqrt[N[(2.0 * N[(re * -2.0), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision], N[(0.5 * N[Sqrt[N[(2.0 * N[(im - re), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]
\begin{array}{l}
\\
\begin{array}{l}
\mathbf{if}\;re \leq -2.25 \cdot 10^{+52}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(re \cdot -2\right)}\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \sqrt{2 \cdot \left(im - re\right)}\\
\end{array}
\end{array}
if re < -2.25e52Initial program 28.9%
Taylor expanded in re around -inf 89.2%
*-commutative89.2%
Simplified89.2%
if -2.25e52 < re Initial program 54.8%
Taylor expanded in re around 0 60.1%
Final simplification67.2%
(FPCore (re im) :precision binary64 (* 0.5 (sqrt (* 2.0 im))))
double code(double re, double im) {
return 0.5 * sqrt((2.0 * im));
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = 0.5d0 * sqrt((2.0d0 * im))
end function
public static double code(double re, double im) {
return 0.5 * Math.sqrt((2.0 * im));
}
def code(re, im): return 0.5 * math.sqrt((2.0 * im))
function code(re, im) return Float64(0.5 * sqrt(Float64(2.0 * im))) end
function tmp = code(re, im) tmp = 0.5 * sqrt((2.0 * im)); end
code[re_, im_] := N[(0.5 * N[Sqrt[N[(2.0 * im), $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\begin{array}{l}
\\
0.5 \cdot \sqrt{2 \cdot im}
\end{array}
Initial program 48.5%
Taylor expanded in re around 0 48.4%
pow148.4%
*-commutative48.4%
sqrt-unprod48.8%
Applied egg-rr48.8%
unpow148.8%
Simplified48.8%
Final simplification48.8%
herbie shell --seed 2024052
(FPCore (re im)
:name "math.sqrt on complex, imaginary part, im greater than 0 branch"
:precision binary64
:pre (> im 0.0)
(* 0.5 (sqrt (* 2.0 (- (sqrt (+ (* re re) (* im im))) re)))))