bigatom.e - New ba_log10() function (fast)

new topic     » topic index » view thread      » older message » newer message
-- 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 
-- 
new topic     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu