web-dev-qa-db-fra.com

Comment puis-je spécifier la base de Math.log () en JavaScript?

J'ai besoin d'une fonction log pour JavaScript, mais elle doit être en base 10. Je ne vois aucune liste pour cela, donc je suppose que ce n'est pas possible. Existe-t-il des experts en mathématiques qui connaissent une solution à ce problème?

189
BigOmega

Formule/Identité "Changement de base"

La valeur numérique pour le logarithme de la base 10 peut être calculée avec l'identité suivante.

 Logarithm for base 10


Puisque Math.log(x) dans JavaScript renvoie le logarithme naturel de x (identique à ln (x)), pour la base 10, vous pouvez diviser par Math.log(10) (identique à ln (10)):

function log10(val) {
  return Math.log(val) / Math.LN10;
}

Math.LN10 est une constante pré-calculée intégrée pour Math.log(10). Cette fonction est donc essentiellement identique à:

function log10(val) {
  return Math.log(val) / Math.log(10);
}
306
Peter

Facile, il suffit de changer la base en divisant par le journal (10). Il y a même une constante pour vous aider

Math.log(num) / Math.LN10;

qui est le même que:

Math.log(num) / Math.log(10);
62
bramp

Vous pouvez simplement diviser le logarithme de votre valeur et le logarithme de la base désirée. Vous pouvez également remplacer la méthode Math.log pour accepter un argument de base optionnel:

Math.log = (function() {
  var log = Math.log;
  return function(n, base) {
    return log(n)/(base ? log(base) : 1);
  };
})();

Math.log(5, 10);
48
CMS

la réponse ici poserait un problème évident de précision et n'est pas fiable dans certains cas d'utilisation

> Math.log(10)/Math.LN10
1

> Math.log(100)/Math.LN10
2

> Math.log(1000)/Math.LN10
2.9999999999999996

> Math.log(10000)/Math.LN10
4
14
Royce Chao
Math.log10 = function(n) {
    return (Math.log(n)) / (Math.log(10));
}

Alors tu peux faire

Math.log10(your_number);

NOTE: Au départ, je pensais faire Math.prototype.log10 = ... pour le faire, mais l'utilisateur CMS a fait remarquer que Math ne fonctionne pas de cette façon. J'ai donc supprimé la partie .prototype.

11
artlung
Math.logBase = function(n, base) {
    return Math.log(n) / Math.log(base);
};
10
Yukulélé

FF 25+ prend en charge une méthode Math.log10 . Vous pouvez utiliser polyfill:

if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };

MDN répertorie les navigateurs compatibles .

Navigateurs de bureau

Chrome    Firefox (Gecko) Internet Explorer   Opera   Safari
38        25 (25)         Not supported       25      7.1

Navigateurs mobiles

Android         Chrome for Android    Firefox Mobile (Gecko)  IE Mobile      Opera Mobile    Safari Mobile
Not supported   Not supported         25.0 (25)               Not supported  Not supported   iOS 8
8
Ivan Black

Math.log10(x)! ????

La meilleure réponse est acceptable pour une base arbitraire, mais la question concerne la base de journalisation 10 et Math.log10(x) est la norme de tous les navigateurs depuis 2015. *

* Sauf IE, si c'est important pour vous pour une raison quelconque.

0
Haumed Rahmani

Si vous avez un nombre x, l'utilisation de Math.log(x) serait essentiellement lnx. 

Pour le convertir en une base autre que e, vous pouvez utiliser la fonction suivante:

function(x){ return Math.log(x)/Math.log(10); }
0
Kartik Singh