| Alternative 1 | |
|---|---|
| Error | 10.4 |
| Cost | 6660 |
\[\begin{array}{l}
\mathbf{if}\;im \leq 3.75 \cdot 10^{-81}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{else}:\\
\;\;\;\;\log im\\
\end{array}
\]
(FPCore (re im) :precision binary64 (log (sqrt (+ (* re re) (* im im)))))
(FPCore (re im) :precision binary64 (if (<= im 4.4e-132) (log (- re)) (if (<= im 3.2e+73) (log (sqrt (+ (* re re) (* im im)))) (log im))))
double code(double re, double im) {
return log(sqrt(((re * re) + (im * im))));
}
double code(double re, double im) {
double tmp;
if (im <= 4.4e-132) {
tmp = log(-re);
} else if (im <= 3.2e+73) {
tmp = log(sqrt(((re * re) + (im * im))));
} else {
tmp = log(im);
}
return tmp;
}
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
code = log(sqrt(((re * re) + (im * im))))
end function
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (im <= 4.4d-132) then
tmp = log(-re)
else if (im <= 3.2d+73) then
tmp = log(sqrt(((re * re) + (im * im))))
else
tmp = log(im)
end if
code = tmp
end function
public static double code(double re, double im) {
return Math.log(Math.sqrt(((re * re) + (im * im))));
}
public static double code(double re, double im) {
double tmp;
if (im <= 4.4e-132) {
tmp = Math.log(-re);
} else if (im <= 3.2e+73) {
tmp = Math.log(Math.sqrt(((re * re) + (im * im))));
} else {
tmp = Math.log(im);
}
return tmp;
}
def code(re, im): return math.log(math.sqrt(((re * re) + (im * im))))
def code(re, im): tmp = 0 if im <= 4.4e-132: tmp = math.log(-re) elif im <= 3.2e+73: tmp = math.log(math.sqrt(((re * re) + (im * im)))) else: tmp = math.log(im) return tmp
function code(re, im) return log(sqrt(Float64(Float64(re * re) + Float64(im * im)))) end
function code(re, im) tmp = 0.0 if (im <= 4.4e-132) tmp = log(Float64(-re)); elseif (im <= 3.2e+73) tmp = log(sqrt(Float64(Float64(re * re) + Float64(im * im)))); else tmp = log(im); end return tmp end
function tmp = code(re, im) tmp = log(sqrt(((re * re) + (im * im)))); end
function tmp_2 = code(re, im) tmp = 0.0; if (im <= 4.4e-132) tmp = log(-re); elseif (im <= 3.2e+73) tmp = log(sqrt(((re * re) + (im * im)))); else tmp = log(im); end tmp_2 = tmp; end
code[re_, im_] := N[Log[N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]
code[re_, im_] := If[LessEqual[im, 4.4e-132], N[Log[(-re)], $MachinePrecision], If[LessEqual[im, 3.2e+73], N[Log[N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision], N[Log[im], $MachinePrecision]]]
\log \left(\sqrt{re \cdot re + im \cdot im}\right)
\begin{array}{l}
\mathbf{if}\;im \leq 4.4 \cdot 10^{-132}:\\
\;\;\;\;\log \left(-re\right)\\
\mathbf{elif}\;im \leq 3.2 \cdot 10^{+73}:\\
\;\;\;\;\log \left(\sqrt{re \cdot re + im \cdot im}\right)\\
\mathbf{else}:\\
\;\;\;\;\log im\\
\end{array}
Results
if im < 4.39999999999999981e-132Initial program 32.0
Taylor expanded in re around -inf 6.8
Simplified6.8
[Start]6.8 | \[ \log \left(-1 \cdot re\right)
\] |
|---|---|
rational.json-simplify-2 [=>]6.8 | \[ \log \color{blue}{\left(re \cdot -1\right)}
\] |
rational.json-simplify-9 [=>]6.8 | \[ \log \color{blue}{\left(-re\right)}
\] |
if 4.39999999999999981e-132 < im < 3.19999999999999982e73Initial program 10.9
if 3.19999999999999982e73 < im Initial program 46.8
Taylor expanded in re around 0 6.3
Final simplification7.6
| Alternative 1 | |
|---|---|
| Error | 10.4 |
| Cost | 6660 |
| Alternative 2 | |
|---|---|
| Error | 30.5 |
| Cost | 6464 |
herbie shell --seed 2023074
(FPCore (re im)
:name "math.log/1 on complex, real part"
:precision binary64
(log (sqrt (+ (* re re) (* im im)))))