J'ai besoin d'une log
fonction 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. Y a-t-il des magiciens des mathématiques qui connaissent une solution?
J'ai besoin d'une log
fonction 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. Y a-t-il des magiciens des mathématiques qui connaissent une solution?
Réponses:
Formule / identité "Changement de base"
La valeur numérique du logarithme à la base 10 peut être calculée avec l'identité suivante.
Comme Math.log(x)
en 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)
, donc cette fonction est essentiellement identique à:
function log10(val) {
return Math.log(val) / Math.log(10);
}
return Math.log(n) / Math.log(base);
Vous pouvez simplement diviser le logarithme de votre valeur et le logarithme de la base souhaitée, vous pouvez également remplacer la Math.log
méthode pour accepter un argument de base facultatif:
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 causerait un problème de précision évident 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.round(Math.log(1000) / Math.LN10 * 1e6) / 1e6)
const logBase = (n, base) => Math.log(n) / Math.log(base);
Math.log10 = function(n) {
return (Math.log(n)) / (Math.log(10));
}
Ensuite, vous pouvez faire
Math.log10(your_number);
NOTE: Au départ, je pensais Math.prototype.log10 = ...
faire cela, mais le CMS utilisateur a souligné que les mathématiques ne fonctionnent pas de cette façon, j'ai donc édité la .prototype
partie.
.prototype
pièce;)
FF 25+ prend en charge une Math.log10
méthode. Vous pouvez utiliser polyfill:
if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };
MDN répertorie les navigateurs pris en charge .
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 première réponse est correcte pour une base arbitraire, mais la question concerne la base de journal 10 et Math.log10(x)
est standard sur tous les navigateurs depuis 2015. *
* Sauf IE, si cela est important pour vous pour une raison quelconque.
Si vous avez un nombre x, alors 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); }
Pour une utilisation en base 10 Math.log10()
.
Voir les documents sur: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10