| Alternative 1 | |
|---|---|
| Error | 10.5 |
| Cost | 13188 |
\[\begin{array}{l}
\mathbf{if}\;re \leq -5.7 \cdot 10^{-70}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log 10}\\
\mathbf{else}:\\
\;\;\;\;\frac{\log im}{\log 10}\\
\end{array}
\]
(FPCore (re im) :precision binary64 (/ (log (sqrt (+ (* re re) (* im im)))) (log 10.0)))
(FPCore (re im)
:precision binary64
(if (<= re -1.16e+48)
(/ (log (- re)) (log 10.0))
(if (<= re -4.1e-156)
(/ (log (sqrt (+ (* re re) (* im im)))) (log 10.0))
(/ (log im) (log 10.0)))))double code(double re, double im) {
return log(sqrt(((re * re) + (im * im)))) / log(10.0);
}
double code(double re, double im) {
double tmp;
if (re <= -1.16e+48) {
tmp = log(-re) / log(10.0);
} else if (re <= -4.1e-156) {
tmp = log(sqrt(((re * re) + (im * im)))) / log(10.0);
} else {
tmp = log(im) / log(10.0);
}
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)))) / log(10.0d0)
end function
real(8) function code(re, im)
real(8), intent (in) :: re
real(8), intent (in) :: im
real(8) :: tmp
if (re <= (-1.16d+48)) then
tmp = log(-re) / log(10.0d0)
else if (re <= (-4.1d-156)) then
tmp = log(sqrt(((re * re) + (im * im)))) / log(10.0d0)
else
tmp = log(im) / log(10.0d0)
end if
code = tmp
end function
public static double code(double re, double im) {
return Math.log(Math.sqrt(((re * re) + (im * im)))) / Math.log(10.0);
}
public static double code(double re, double im) {
double tmp;
if (re <= -1.16e+48) {
tmp = Math.log(-re) / Math.log(10.0);
} else if (re <= -4.1e-156) {
tmp = Math.log(Math.sqrt(((re * re) + (im * im)))) / Math.log(10.0);
} else {
tmp = Math.log(im) / Math.log(10.0);
}
return tmp;
}
def code(re, im): return math.log(math.sqrt(((re * re) + (im * im)))) / math.log(10.0)
def code(re, im): tmp = 0 if re <= -1.16e+48: tmp = math.log(-re) / math.log(10.0) elif re <= -4.1e-156: tmp = math.log(math.sqrt(((re * re) + (im * im)))) / math.log(10.0) else: tmp = math.log(im) / math.log(10.0) return tmp
function code(re, im) return Float64(log(sqrt(Float64(Float64(re * re) + Float64(im * im)))) / log(10.0)) end
function code(re, im) tmp = 0.0 if (re <= -1.16e+48) tmp = Float64(log(Float64(-re)) / log(10.0)); elseif (re <= -4.1e-156) tmp = Float64(log(sqrt(Float64(Float64(re * re) + Float64(im * im)))) / log(10.0)); else tmp = Float64(log(im) / log(10.0)); end return tmp end
function tmp = code(re, im) tmp = log(sqrt(((re * re) + (im * im)))) / log(10.0); end
function tmp_2 = code(re, im) tmp = 0.0; if (re <= -1.16e+48) tmp = log(-re) / log(10.0); elseif (re <= -4.1e-156) tmp = log(sqrt(((re * re) + (im * im)))) / log(10.0); else tmp = log(im) / log(10.0); end tmp_2 = tmp; end
code[re_, im_] := N[(N[Log[N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] / N[Log[10.0], $MachinePrecision]), $MachinePrecision]
code[re_, im_] := If[LessEqual[re, -1.16e+48], N[(N[Log[(-re)], $MachinePrecision] / N[Log[10.0], $MachinePrecision]), $MachinePrecision], If[LessEqual[re, -4.1e-156], N[(N[Log[N[Sqrt[N[(N[(re * re), $MachinePrecision] + N[(im * im), $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] / N[Log[10.0], $MachinePrecision]), $MachinePrecision], N[(N[Log[im], $MachinePrecision] / N[Log[10.0], $MachinePrecision]), $MachinePrecision]]]
\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log 10}
\begin{array}{l}
\mathbf{if}\;re \leq -1.16 \cdot 10^{+48}:\\
\;\;\;\;\frac{\log \left(-re\right)}{\log 10}\\
\mathbf{elif}\;re \leq -4.1 \cdot 10^{-156}:\\
\;\;\;\;\frac{\log \left(\sqrt{re \cdot re + im \cdot im}\right)}{\log 10}\\
\mathbf{else}:\\
\;\;\;\;\frac{\log im}{\log 10}\\
\end{array}
Results
if re < -1.15999999999999992e48Initial program 44.5
Taylor expanded in re around -inf 6.9
Simplified6.9
[Start]6.9 | \[ \frac{\log \left(-1 \cdot re\right)}{\log 10}
\] |
|---|---|
rational_best_oopsla_all_46_json_45_simplify-74 [=>]6.9 | \[ \frac{\log \color{blue}{\left(re \cdot -1\right)}}{\log 10}
\] |
rational_best_oopsla_all_46_json_45_simplify-94 [<=]6.9 | \[ \frac{\log \color{blue}{\left(-re\right)}}{\log 10}
\] |
if -1.15999999999999992e48 < re < -4.1000000000000002e-156Initial program 12.5
if -4.1000000000000002e-156 < re Initial program 32.7
Taylor expanded in re around 0 5.4
Final simplification7.6
| Alternative 1 | |
|---|---|
| Error | 10.5 |
| Cost | 13188 |
| Alternative 2 | |
|---|---|
| Error | 30.5 |
| Cost | 12992 |
herbie shell --seed 2023090
(FPCore (re im)
:name "math.log10 on complex, real part"
:precision binary64
(/ (log (sqrt (+ (* re re) (* im im)))) (log 10.0)))