Cálculo del logaritmo y logaritmo neperiano en Javascript.

Ayer me mandaban este chiste por Whatsapp:

Y como soy así de tocahuevos, que hasta llevo un reloj calculadora Casio, les mandé de vuelta el resultado del logaritmo neperiano de 1437. Y sí, estoy escribiendo esto para cuando me lo vuelvan a mandar, para contestar con este enlace, que me vale tanto para la sección de programación como para la de ciencia.

El elcálculo de logaritmos es la operación inversa a la exponenciación de la base del logaritmo. El desarrollo de calculadoras y ordenadores ha hecho que las tablas de logaritmos, que se usaban hace años para simplificar operaciones complejas, hayan perdido mucha importancia para los estudiantes de matemáticas en la actualidad. Este blog nos da una entrada muy intersante sobre el uso de los logaritmos.

La clase Math de Javascript tiene varias funciones para calcular un logaritmo. Para el logaritmo natural (logaritmo cuya base es el número e, un número irracional cuyo valor aproximado es 2,7182818284590452353602874713527):

//vamos a calcular el logaritmo de 5
var logaritmo = Math.log(5);

¿Y para obtener el logaritmo en base 10?

//vamos a calcular el logaritmo de 5
//pero con base decimal
var logaritmo = Math.log10(5);

¿Y para obtener el logaritmo en base 2?

//vamos a calcular el logaritmo de 5
//pero con base binaria
var logaritmo = Math.log2(5);

¿Y el logaritmo neperiano? Bueno, en lenguaje coloquial suele llamarse logaritmo neperiano al logaritmo natural, pero si nos ponemos precisos son dos conceptos disintos. El logaritmo neperiano, nombrado en honor del matemático John Napier, se calcularía con la fórmula -107*ln(x/-107):

//vamos a calcular el logaritmo neperiano
//de 5.
var logaritmo = Math.pow(-10,7)*Mat.log(5/Math.pow(-10,7))

Como puedes ver los logaritmos neperianos son esencialmente logaritmos naturales con la coma desplazada siete posiciones hacia la derecha y el signo invertido.

Anuncios

Calculadora de Ohm en Javascript

La ley de Ohm fue postulada por el físico y matemático Georg Simon Ohm, es una ley básica de los circuitos eléctricos. Nos dice que la diferencia de potencial V que aplicamos entre los extremos de un conductor es proporcional a la intensidad de la corriente I que circula por él. Introduce la noción de resistencia eléctrica R: el factor de proporcionalidad que aparece en la relación entre diferencia potencial e intensidad.

En este ejemplo vamos a hacer una función de Javascript que puede recibir tres parámetros y, según el que reciba vacío, devolverá un resultado u otro valiéndose de la fórmula general de la ley de Ohm, que resumimos en la fórmula V=R*I.

function calculadoraOhm(V,R,I){
  //si la diferencia potencial va vacía
  //en ese caso calculamos el voltaje.
  if(V==""){
    return parseFloat(R)*parseFloat(I);
  }
  //si la resistencia va vacía
  //en ese caso calculamos el voltaje.
  if(R==""){
    return parseFloat(V)/parseFloat(I);
  }
  //si la intensidad va vacía
  //es la que calculamos.
  if(I==""){
    return parseFloat(V)/parseFloat(R);
  }
  //si no va nada vacío devuelve una cadena vacía.
  return "";
}

Expresiones regulares en Javascript para validar fecha u hora.

Vamos con una entrada rápida en Javascript. Ya hace años que revisamos el tema de las expresiones regulares, pero hoy vamos a ver un ejemplo concreto ¿Cómo hago una expresión regular que me valide un formato de fecha dd/mm/aaaa?

Pues sería esta:
/^\d{1,2}\/\d{1,2}\/\d{2,4}$/

Ok ¿Y como valido un formato de hora tipo hh:mm:ss? Pues con esta:
/^(0[1-9]|1\d|2[0-3]):([0-5]\d):([0-5]\d)$/

Ordenación de burbuja en Javascript

El método del intercambio directo, también llamado ordenación de burbuja (bubble sort en inglés), es un algoritmo de ordenamiento extremadamente sencillo que suele ser un ejercicio clásico en los cursos de programación para entender el uso de los bucles anidados en otros bucles. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Esto hace necesario revisar varias veces toda la lista, hasta que no se necesiten más intercambios. Por ello se trata de un algoritmo lento y poco eficiente.

La implementación de dicho algoritmo en una función de Javascript que recibe un array desordenado sería la siguiente:

//la función recibe un array desordenado
function burbuja(arr) {
 //Primer bucle, recore todo el array
 for (var i = 0; i < arr.length; i++) {
   //segundo bucle, va ordenando los elementos.
   for(var j=0; j  arr[j + 1]) {
      var el1 = arr[j];      
      arr[j] = arr[j + 1];
      arr[j + 1] = el1;
     }
   }
  }
  //al acabar la ordenación devulve el array, 
  //ahora ordenado
  return arr;
}

Javascript: convertir una cadena CSV en un array.

Vamos con un tip rápido de Javascript ¿cómo convertimos en un array una cadena de valores separados por comas? (en una entrada antigua hicimos el proceso contrario) Es bastante sencillo lograrlo:

var sabbath = 'ozzy,iommi,bill,geezer';
var sabbath_array = sabbath.split(",")

Basta con usar la función split() pasándole la coma como parámetro para que cree un array con tantas posiciones como valores separados por coma haya en la cadena.

Métodos del objeto Number en Javascript

El lenguaje Javascript tiene una serie de objetos básicos, que a su vez tienen propiedades y métodos. En próximas entradas iremos viendo distintos objetos, hoy vamos a empezar por los de Number, que tiene básicamente cinco métodos:

  • .toExponential(): Esta función nos devuelve una cadena representando el valor del número con el que trabajamos, pero representado en notación exponencial (también llamada notación científica). Opcionalmente puede recibir un parámetro donde le indiquemos el número de decimales que queremos.
  • .toFixed(): Esta función nos devuelve una cadena representando el valor del número con el que trabajamos, pero redondeando el número de decimales a la cantidad que le digamos. Si no recibe parámetro alguno lo interpretará como un 0 y nos dará un valor entero, si recibe parámetros mostrará tantos decimales como el parámetro indique, rellenando con ceros cuando sea necesario.
  • .toPrecision(): Esta función nos devuelve una cadena representando el valor del número con el que trabajamos, pero redondeado a la longitud que le pasemos como parámetro. Si no se le pasa parámetro alguno entonces devuelve el número entero, si el parámetro es mayor que la longitud del número añadirá un separador decimal seguido de ceros hasta complertar dicha longitud.
  • .toString(): Esta función nos devuelve una cadena representando el valor del número con el que trabajamos. Se le puede pasar como parámetro un valor entre 2 y 36, dicho valor es la base en la que queremos que se formatee el número (por ejemplo 16 para conseguir un resultado hexadecimal, 2 para un resultado binario,etc) .
  • .valueOf(): Esta función nos devuelve el tipo primitivo del objeto Number, es decir, un valor numérico. Es un método que generalmente se usa de forma interna en Javascript y pocas veces se invoca desde el código web.