
(FPCore (x) :precision binary64 (- (log x) (log (log x))))
double code(double x) {
return log(x) - log(log(x));
}
real(8) function code(x)
use fmin_fmax_functions
real(8), intent (in) :: x
code = log(x) - log(log(x))
end function
public static double code(double x) {
return Math.log(x) - Math.log(Math.log(x));
}
def code(x): return math.log(x) - math.log(math.log(x))
function code(x) return Float64(log(x) - log(log(x))) end
function tmp = code(x) tmp = log(x) - log(log(x)); end
code[x_] := N[(N[Log[x], $MachinePrecision] - N[Log[N[Log[x], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\log x - \log \log x
Herbie found 7 alternatives:
| Alternative | Accuracy | Speedup |
|---|
(FPCore (x) :precision binary64 (- (log x) (log (log x))))
double code(double x) {
return log(x) - log(log(x));
}
real(8) function code(x)
use fmin_fmax_functions
real(8), intent (in) :: x
code = log(x) - log(log(x))
end function
public static double code(double x) {
return Math.log(x) - Math.log(Math.log(x));
}
def code(x): return math.log(x) - math.log(math.log(x))
function code(x) return Float64(log(x) - log(log(x))) end
function tmp = code(x) tmp = log(x) - log(log(x)); end
code[x_] := N[(N[Log[x], $MachinePrecision] - N[Log[N[Log[x], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]
\log x - \log \log x
(FPCore (x)
:precision binary64
(let* ((t_0 (log (fabs x)))
(t_1 (fabs (* t_0 (fabs x))))
(t_2 (log (fabs t_0))))
(if (<= (fabs x) 7.4e+133)
(/
(- (pow (log (fabs (fabs x))) 3.0) (pow t_2 3.0))
(fma (log (fabs (* (fabs x) t_0))) t_2 (log (pow (fabs x) t_0))))
(log (pow t_1 (/ (log (fabs (/ (fabs x) t_0))) (log t_1)))))))double code(double x) {
double t_0 = log(fabs(x));
double t_1 = fabs((t_0 * fabs(x)));
double t_2 = log(fabs(t_0));
double tmp;
if (fabs(x) <= 7.4e+133) {
tmp = (pow(log(fabs(fabs(x))), 3.0) - pow(t_2, 3.0)) / fma(log(fabs((fabs(x) * t_0))), t_2, log(pow(fabs(x), t_0)));
} else {
tmp = log(pow(t_1, (log(fabs((fabs(x) / t_0))) / log(t_1))));
}
return tmp;
}
function code(x) t_0 = log(abs(x)) t_1 = abs(Float64(t_0 * abs(x))) t_2 = log(abs(t_0)) tmp = 0.0 if (abs(x) <= 7.4e+133) tmp = Float64(Float64((log(abs(abs(x))) ^ 3.0) - (t_2 ^ 3.0)) / fma(log(abs(Float64(abs(x) * t_0))), t_2, log((abs(x) ^ t_0)))); else tmp = log((t_1 ^ Float64(log(abs(Float64(abs(x) / t_0))) / log(t_1)))); end return tmp end
code[x_] := Block[{t$95$0 = N[Log[N[Abs[x], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Abs[N[(t$95$0 * N[Abs[x], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[Log[N[Abs[t$95$0], $MachinePrecision]], $MachinePrecision]}, If[LessEqual[N[Abs[x], $MachinePrecision], 7.4e+133], N[(N[(N[Power[N[Log[N[Abs[N[Abs[x], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 3.0], $MachinePrecision] - N[Power[t$95$2, 3.0], $MachinePrecision]), $MachinePrecision] / N[(N[Log[N[Abs[N[(N[Abs[x], $MachinePrecision] * t$95$0), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * t$95$2 + N[Log[N[Power[N[Abs[x], $MachinePrecision], t$95$0], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[Log[N[Power[t$95$1, N[(N[Log[N[Abs[N[(N[Abs[x], $MachinePrecision] / t$95$0), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] / N[Log[t$95$1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]]]]
\begin{array}{l}
t_0 := \log \left(\left|x\right|\right)\\
t_1 := \left|t\_0 \cdot \left|x\right|\right|\\
t_2 := \log \left(\left|t\_0\right|\right)\\
\mathbf{if}\;\left|x\right| \leq 7.4 \cdot 10^{+133}:\\
\;\;\;\;\frac{{\log \left(\left|\left|x\right|\right|\right)}^{3} - {t\_2}^{3}}{\mathsf{fma}\left(\log \left(\left|\left|x\right| \cdot t\_0\right|\right), t\_2, \log \left({\left(\left|x\right|\right)}^{t\_0}\right)\right)}\\
\mathbf{else}:\\
\;\;\;\;\log \left({t\_1}^{\left(\frac{\log \left(\left|\frac{\left|x\right|}{t\_0}\right|\right)}{\log t\_1}\right)}\right)\\
\end{array}
if x < 7.4000000000000005e133Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
lower-log.f64N/A
lower-/.f6424.7%
Applied rewrites24.7%
Applied rewrites25.1%
lift-*.f64N/A
lift-log.f64N/A
log-pow-revN/A
lower-log.f64N/A
lower-pow.f6425.8%
Applied rewrites25.8%
if 7.4000000000000005e133 < x Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
lower-log.f64N/A
lower-/.f6424.7%
Applied rewrites24.7%
Applied rewrites25.1%
Applied rewrites25.2%
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lift-log.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
log-pow-revN/A
lower-log.f64N/A
lower-pow.f64N/A
Applied rewrites25.2%
(FPCore (x)
:precision binary64
(let* ((t_0 (log (fabs x)))
(t_1 (fabs (* t_0 (fabs x))))
(t_2 (log (fabs t_0))))
(if (<= (fabs x) 7.4e+133)
(/
(- (pow (log (fabs (fabs x))) 3.0) (pow t_2 3.0))
(fma (log (fabs (log (pow (fabs x) (fabs x))))) t_2 (* t_0 t_0)))
(log (pow t_1 (/ (log (fabs (/ (fabs x) t_0))) (log t_1)))))))double code(double x) {
double t_0 = log(fabs(x));
double t_1 = fabs((t_0 * fabs(x)));
double t_2 = log(fabs(t_0));
double tmp;
if (fabs(x) <= 7.4e+133) {
tmp = (pow(log(fabs(fabs(x))), 3.0) - pow(t_2, 3.0)) / fma(log(fabs(log(pow(fabs(x), fabs(x))))), t_2, (t_0 * t_0));
} else {
tmp = log(pow(t_1, (log(fabs((fabs(x) / t_0))) / log(t_1))));
}
return tmp;
}
function code(x) t_0 = log(abs(x)) t_1 = abs(Float64(t_0 * abs(x))) t_2 = log(abs(t_0)) tmp = 0.0 if (abs(x) <= 7.4e+133) tmp = Float64(Float64((log(abs(abs(x))) ^ 3.0) - (t_2 ^ 3.0)) / fma(log(abs(log((abs(x) ^ abs(x))))), t_2, Float64(t_0 * t_0))); else tmp = log((t_1 ^ Float64(log(abs(Float64(abs(x) / t_0))) / log(t_1)))); end return tmp end
code[x_] := Block[{t$95$0 = N[Log[N[Abs[x], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Abs[N[(t$95$0 * N[Abs[x], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[Log[N[Abs[t$95$0], $MachinePrecision]], $MachinePrecision]}, If[LessEqual[N[Abs[x], $MachinePrecision], 7.4e+133], N[(N[(N[Power[N[Log[N[Abs[N[Abs[x], $MachinePrecision]], $MachinePrecision]], $MachinePrecision], 3.0], $MachinePrecision] - N[Power[t$95$2, 3.0], $MachinePrecision]), $MachinePrecision] / N[(N[Log[N[Abs[N[Log[N[Power[N[Abs[x], $MachinePrecision], N[Abs[x], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * t$95$2 + N[(t$95$0 * t$95$0), $MachinePrecision]), $MachinePrecision]), $MachinePrecision], N[Log[N[Power[t$95$1, N[(N[Log[N[Abs[N[(N[Abs[x], $MachinePrecision] / t$95$0), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] / N[Log[t$95$1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]]]]
\begin{array}{l}
t_0 := \log \left(\left|x\right|\right)\\
t_1 := \left|t\_0 \cdot \left|x\right|\right|\\
t_2 := \log \left(\left|t\_0\right|\right)\\
\mathbf{if}\;\left|x\right| \leq 7.4 \cdot 10^{+133}:\\
\;\;\;\;\frac{{\log \left(\left|\left|x\right|\right|\right)}^{3} - {t\_2}^{3}}{\mathsf{fma}\left(\log \left(\left|\log \left({\left(\left|x\right|\right)}^{\left(\left|x\right|\right)}\right)\right|\right), t\_2, t\_0 \cdot t\_0\right)}\\
\mathbf{else}:\\
\;\;\;\;\log \left({t\_1}^{\left(\frac{\log \left(\left|\frac{\left|x\right|}{t\_0}\right|\right)}{\log t\_1}\right)}\right)\\
\end{array}
if x < 7.4000000000000005e133Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
lower-log.f64N/A
lower-/.f6424.7%
Applied rewrites24.7%
Applied rewrites25.1%
lift-*.f64N/A
lift-log.f64N/A
log-pow-revN/A
lower-log.f64N/A
lower-pow.f6424.7%
Applied rewrites24.7%
if 7.4000000000000005e133 < x Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
lower-log.f64N/A
lower-/.f6424.7%
Applied rewrites24.7%
Applied rewrites25.1%
Applied rewrites25.2%
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lift-log.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
log-pow-revN/A
lower-log.f64N/A
lower-pow.f64N/A
Applied rewrites25.2%
(FPCore (x)
:precision binary64
(let* ((t_0 (log (fabs x)))
(t_1 (log (fabs t_0)))
(t_2 (fabs (fabs x))))
(if (<= (- t_0 (log t_0)) 654.0)
(log (/ (fabs x) t_0))
(/
(- (pow (log t_2) 3.0) (pow t_1 3.0))
(fma
(log (sqrt t_2))
(log (* (fabs x) (fabs x)))
(* (log (fabs (* t_0 (fabs x)))) t_1))))))double code(double x) {
double t_0 = log(fabs(x));
double t_1 = log(fabs(t_0));
double t_2 = fabs(fabs(x));
double tmp;
if ((t_0 - log(t_0)) <= 654.0) {
tmp = log((fabs(x) / t_0));
} else {
tmp = (pow(log(t_2), 3.0) - pow(t_1, 3.0)) / fma(log(sqrt(t_2)), log((fabs(x) * fabs(x))), (log(fabs((t_0 * fabs(x)))) * t_1));
}
return tmp;
}
function code(x) t_0 = log(abs(x)) t_1 = log(abs(t_0)) t_2 = abs(abs(x)) tmp = 0.0 if (Float64(t_0 - log(t_0)) <= 654.0) tmp = log(Float64(abs(x) / t_0)); else tmp = Float64(Float64((log(t_2) ^ 3.0) - (t_1 ^ 3.0)) / fma(log(sqrt(t_2)), log(Float64(abs(x) * abs(x))), Float64(log(abs(Float64(t_0 * abs(x)))) * t_1))); end return tmp end
code[x_] := Block[{t$95$0 = N[Log[N[Abs[x], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Log[N[Abs[t$95$0], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$2 = N[Abs[N[Abs[x], $MachinePrecision]], $MachinePrecision]}, If[LessEqual[N[(t$95$0 - N[Log[t$95$0], $MachinePrecision]), $MachinePrecision], 654.0], N[Log[N[(N[Abs[x], $MachinePrecision] / t$95$0), $MachinePrecision]], $MachinePrecision], N[(N[(N[Power[N[Log[t$95$2], $MachinePrecision], 3.0], $MachinePrecision] - N[Power[t$95$1, 3.0], $MachinePrecision]), $MachinePrecision] / N[(N[Log[N[Sqrt[t$95$2], $MachinePrecision]], $MachinePrecision] * N[Log[N[(N[Abs[x], $MachinePrecision] * N[Abs[x], $MachinePrecision]), $MachinePrecision]], $MachinePrecision] + N[(N[Log[N[Abs[N[(t$95$0 * N[Abs[x], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] * t$95$1), $MachinePrecision]), $MachinePrecision]), $MachinePrecision]]]]]
\begin{array}{l}
t_0 := \log \left(\left|x\right|\right)\\
t_1 := \log \left(\left|t\_0\right|\right)\\
t_2 := \left|\left|x\right|\right|\\
\mathbf{if}\;t\_0 - \log t\_0 \leq 654:\\
\;\;\;\;\log \left(\frac{\left|x\right|}{t\_0}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{{\log t\_2}^{3} - {t\_1}^{3}}{\mathsf{fma}\left(\log \left(\sqrt{t\_2}\right), \log \left(\left|x\right| \cdot \left|x\right|\right), \log \left(\left|t\_0 \cdot \left|x\right|\right|\right) \cdot t\_1\right)}\\
\end{array}
if (-.f64 (log.f64 x) (log.f64 (log.f64 x))) < 654Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
lower-log.f64N/A
lower-/.f6424.7%
Applied rewrites24.7%
if 654 < (-.f64 (log.f64 x) (log.f64 (log.f64 x))) Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
lower-log.f64N/A
lower-/.f6424.7%
Applied rewrites24.7%
Applied rewrites25.1%
Applied rewrites25.0%
(FPCore (x) :precision binary64 (let* ((t_0 (log (fabs x))) (t_1 (fabs (* t_0 (fabs x))))) (log (pow t_1 (/ (log (fabs (/ (fabs x) t_0))) (log t_1))))))
double code(double x) {
double t_0 = log(fabs(x));
double t_1 = fabs((t_0 * fabs(x)));
return log(pow(t_1, (log(fabs((fabs(x) / t_0))) / log(t_1))));
}
real(8) function code(x)
use fmin_fmax_functions
real(8), intent (in) :: x
real(8) :: t_0
real(8) :: t_1
t_0 = log(abs(x))
t_1 = abs((t_0 * abs(x)))
code = log((t_1 ** (log(abs((abs(x) / t_0))) / log(t_1))))
end function
public static double code(double x) {
double t_0 = Math.log(Math.abs(x));
double t_1 = Math.abs((t_0 * Math.abs(x)));
return Math.log(Math.pow(t_1, (Math.log(Math.abs((Math.abs(x) / t_0))) / Math.log(t_1))));
}
def code(x): t_0 = math.log(math.fabs(x)) t_1 = math.fabs((t_0 * math.fabs(x))) return math.log(math.pow(t_1, (math.log(math.fabs((math.fabs(x) / t_0))) / math.log(t_1))))
function code(x) t_0 = log(abs(x)) t_1 = abs(Float64(t_0 * abs(x))) return log((t_1 ^ Float64(log(abs(Float64(abs(x) / t_0))) / log(t_1)))) end
function tmp = code(x) t_0 = log(abs(x)); t_1 = abs((t_0 * abs(x))); tmp = log((t_1 ^ (log(abs((abs(x) / t_0))) / log(t_1)))); end
code[x_] := Block[{t$95$0 = N[Log[N[Abs[x], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Abs[N[(t$95$0 * N[Abs[x], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]}, N[Log[N[Power[t$95$1, N[(N[Log[N[Abs[N[(N[Abs[x], $MachinePrecision] / t$95$0), $MachinePrecision]], $MachinePrecision]], $MachinePrecision] / N[Log[t$95$1], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]]]
\begin{array}{l}
t_0 := \log \left(\left|x\right|\right)\\
t_1 := \left|t\_0 \cdot \left|x\right|\right|\\
\log \left({t\_1}^{\left(\frac{\log \left(\left|\frac{\left|x\right|}{t\_0}\right|\right)}{\log t\_1}\right)}\right)
\end{array}
Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
lower-log.f64N/A
lower-/.f6424.7%
Applied rewrites24.7%
Applied rewrites25.1%
Applied rewrites25.2%
lift-/.f64N/A
lift-*.f64N/A
associate-/l*N/A
*-commutativeN/A
lift-log.f64N/A
lift-*.f64N/A
*-commutativeN/A
lift-*.f64N/A
log-pow-revN/A
lower-log.f64N/A
lower-pow.f64N/A
Applied rewrites25.2%
(FPCore (x) :precision binary64 (let* ((t_0 (log (fabs x))) (t_1 (log (fabs t_0)))) (/ (- (* t_0 t_0) (* t_1 t_1)) (log (fabs (* t_0 (fabs x)))))))
double code(double x) {
double t_0 = log(fabs(x));
double t_1 = log(fabs(t_0));
return ((t_0 * t_0) - (t_1 * t_1)) / log(fabs((t_0 * fabs(x))));
}
real(8) function code(x)
use fmin_fmax_functions
real(8), intent (in) :: x
real(8) :: t_0
real(8) :: t_1
t_0 = log(abs(x))
t_1 = log(abs(t_0))
code = ((t_0 * t_0) - (t_1 * t_1)) / log(abs((t_0 * abs(x))))
end function
public static double code(double x) {
double t_0 = Math.log(Math.abs(x));
double t_1 = Math.log(Math.abs(t_0));
return ((t_0 * t_0) - (t_1 * t_1)) / Math.log(Math.abs((t_0 * Math.abs(x))));
}
def code(x): t_0 = math.log(math.fabs(x)) t_1 = math.log(math.fabs(t_0)) return ((t_0 * t_0) - (t_1 * t_1)) / math.log(math.fabs((t_0 * math.fabs(x))))
function code(x) t_0 = log(abs(x)) t_1 = log(abs(t_0)) return Float64(Float64(Float64(t_0 * t_0) - Float64(t_1 * t_1)) / log(abs(Float64(t_0 * abs(x))))) end
function tmp = code(x) t_0 = log(abs(x)); t_1 = log(abs(t_0)); tmp = ((t_0 * t_0) - (t_1 * t_1)) / log(abs((t_0 * abs(x)))); end
code[x_] := Block[{t$95$0 = N[Log[N[Abs[x], $MachinePrecision]], $MachinePrecision]}, Block[{t$95$1 = N[Log[N[Abs[t$95$0], $MachinePrecision]], $MachinePrecision]}, N[(N[(N[(t$95$0 * t$95$0), $MachinePrecision] - N[(t$95$1 * t$95$1), $MachinePrecision]), $MachinePrecision] / N[Log[N[Abs[N[(t$95$0 * N[Abs[x], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]]]
\begin{array}{l}
t_0 := \log \left(\left|x\right|\right)\\
t_1 := \log \left(\left|t\_0\right|\right)\\
\frac{t\_0 \cdot t\_0 - t\_1 \cdot t\_1}{\log \left(\left|t\_0 \cdot \left|x\right|\right|\right)}
\end{array}
Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
log-divN/A
diff-logN/A
lower-log.f64N/A
div-fabsN/A
lower-fabs.f64N/A
lower-/.f6425.5%
Applied rewrites25.5%
lift-log.f64N/A
*-rgt-identityN/A
log-prodN/A
lift-fabs.f64N/A
lift-log.f64N/A
metadata-evalN/A
metadata-evalN/A
lower-+.f6427.0%
Applied rewrites27.0%
lift-+.f64N/A
+-rgt-identity27.0%
Applied rewrites27.0%
Applied rewrites25.0%
(FPCore (x) :precision binary64 (log (fabs (/ (fabs x) (log (fabs x))))))
double code(double x) {
return log(fabs((fabs(x) / log(fabs(x)))));
}
real(8) function code(x)
use fmin_fmax_functions
real(8), intent (in) :: x
code = log(abs((abs(x) / log(abs(x)))))
end function
public static double code(double x) {
return Math.log(Math.abs((Math.abs(x) / Math.log(Math.abs(x)))));
}
def code(x): return math.log(math.fabs((math.fabs(x) / math.log(math.fabs(x)))))
function code(x) return log(abs(Float64(abs(x) / log(abs(x))))) end
function tmp = code(x) tmp = log(abs((abs(x) / log(abs(x))))); end
code[x_] := N[Log[N[Abs[N[(N[Abs[x], $MachinePrecision] / N[Log[N[Abs[x], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]], $MachinePrecision]
\log \left(\left|\frac{\left|x\right|}{\log \left(\left|x\right|\right)}\right|\right)
Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
log-divN/A
diff-logN/A
lower-log.f64N/A
div-fabsN/A
lower-fabs.f64N/A
lower-/.f6425.5%
Applied rewrites25.5%
(FPCore (x) :precision binary64 (log (/ (fabs x) (log (fabs x)))))
double code(double x) {
return log((fabs(x) / log(fabs(x))));
}
real(8) function code(x)
use fmin_fmax_functions
real(8), intent (in) :: x
code = log((abs(x) / log(abs(x))))
end function
public static double code(double x) {
return Math.log((Math.abs(x) / Math.log(Math.abs(x))));
}
def code(x): return math.log((math.fabs(x) / math.log(math.fabs(x))))
function code(x) return log(Float64(abs(x) / log(abs(x)))) end
function tmp = code(x) tmp = log((abs(x) / log(abs(x)))); end
code[x_] := N[Log[N[(N[Abs[x], $MachinePrecision] / N[Log[N[Abs[x], $MachinePrecision]], $MachinePrecision]), $MachinePrecision]], $MachinePrecision]
\log \left(\frac{\left|x\right|}{\log \left(\left|x\right|\right)}\right)
Initial program 24.6%
lift--.f64N/A
lift-log.f64N/A
lift-log.f64N/A
diff-logN/A
lower-log.f64N/A
lower-/.f6424.7%
Applied rewrites24.7%
herbie shell --seed 2025313 -o setup:search
(FPCore (x)
:name "Jmat.Real.lambertw, estimator"
:precision binary64
(- (log x) (log (log x))))