bigatom.e - New ba_log10() function (fast)
- Posted by cargoan
Dec 23, 2014
-- con atajo para números grandes
-- log10(x * y) = log10(x) + log10(y)
-- y si 'x' ó 'y' son una potencia de diez, su logaritmo decimal es el
-- exponente y basta con sumarlo al logaritmo del otro número con exponente 0
-- así no es un número grande y se calcula más rápido...
-- ...el logaritmo de un número pequeño y una suma
-- me sorprende no haber caído antes... tan simple... tan eficaz.
--
-- 123456789 = 1.23456789 * 10^8 = {1, 8, {1,2,3,4,5,6,7,8,9}}
-- log10(123456789) = 8 + log10(1.23456789) = 8 + 1 + log10(0.123456789)
--
export function ba_log10(object x)
if not bigatom(x) then
x = ba_new(x)
end if
integer exponent = x[EXPONENT] + 1
x[EXPONENT] = -1
sequence res = ba_logb(x, 10)
return ba_add(res, exponent)
end function
--
Not Categorized, Please Help
|
|