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?
Formule/Identité "Changement de base"
La valeur numérique pour le logarithme de la base 10 peut être calculée avec l'identité suivante.
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);
}
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);
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);
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
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
.
Math.logBase = function(n, base) {
return Math.log(n) / Math.log(base);
};
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
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.
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); }