| Alternative 1 | |
|---|---|
| Error | 10.9 |
| Cost | 13252 |
\[\begin{array}{l}
\mathbf{if}\;re \leq -6 \cdot 10^{-133}:\\
\;\;\;\;\frac{\log \left(re \cdot -1\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.45e+110)
(/ (log (* re -1.0)) (log 10.0))
(if (<= re -3.5e-154)
(/ (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.45e+110) {
tmp = log((re * -1.0)) / log(10.0);
} else if (re <= -3.5e-154) {
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.45d+110)) then
tmp = log((re * (-1.0d0))) / log(10.0d0)
else if (re <= (-3.5d-154)) 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.45e+110) {
tmp = Math.log((re * -1.0)) / Math.log(10.0);
} else if (re <= -3.5e-154) {
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.45e+110: tmp = math.log((re * -1.0)) / math.log(10.0) elif re <= -3.5e-154: 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.45e+110) tmp = Float64(log(Float64(re * -1.0)) / log(10.0)); elseif (re <= -3.5e-154) 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.45e+110) tmp = log((re * -1.0)) / log(10.0); elseif (re <= -3.5e-154) 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.45e+110], N[(N[Log[N[(re * -1.0), $MachinePrecision]], $MachinePrecision] / N[Log[10.0], $MachinePrecision]), $MachinePrecision], If[LessEqual[re, -3.5e-154], 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.45 \cdot 10^{+110}:\\
\;\;\;\;\frac{\log \left(re \cdot -1\right)}{\log 10}\\
\mathbf{elif}\;re \leq -3.5 \cdot 10^{-154}:\\
\;\;\;\;\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.45e110Initial program 53.8
Taylor expanded in re around -inf 5.5
Simplified5.5
[Start]5.5 | \[ \frac{\log \left(-1 \cdot re\right)}{\log 10}
\] |
|---|---|
rational.json-simplify-2 [=>]5.5 | \[ \frac{\log \color{blue}{\left(re \cdot -1\right)}}{\log 10}
\] |
if -1.45e110 < re < -3.5000000000000001e-154Initial program 12.0
if -3.5000000000000001e-154 < re Initial program 33.1
Taylor expanded in re around 0 5.4
Final simplification7.6
| Alternative 1 | |
|---|---|
| Error | 10.9 |
| Cost | 13252 |
| Alternative 2 | |
|---|---|
| Error | 30.6 |
| Cost | 12992 |
herbie shell --seed 2023053
(FPCore (re im)
:name "math.log10 on complex, real part"
:precision binary64
(/ (log (sqrt (+ (* re re) (* im im)))) (log 10.0)))