# How can I specify the base for Math.log() in JavaScript?

I need a `log` function for JavaScript, but it needs to be base 10. I can't see any listing for this, so I'm assuming it's not possible. Are there any math wizards out there who know a solution for this?

"Change of Base" Formula / Identity

The numerical value for logarithm to the base 10 can be calculated with the following identity.

Since `Math.log(x)` in JavaScript returns the natural logarithm of `x` (same as ln(x)), for base 10 you can divide by `Math.log(10)` (same as ln(10)):

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

`Math.LN10` is a built-in precomputed constant for `Math.log(10)`, so this function is essentially identical to:

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

Easy, just change the base by dividing by the log(10). There is even a constant to help you

``````Math.log(num) / Math.LN10;
``````

which is the same as:

``````Math.log(num) / Math.log(10);
``````

You can simply divide the logarithm of your value, and the logarithm of the desired base, also you could override the `Math.log` method to accept an optional base argument:

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

Math.log(5, 10);
``````

the answer here would cause obvious precision problem and is not reliable in some use cases

``````> 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));
}
``````

Then you can do

``````Math.log10(your_number);
``````

NOTE: Initially I thought to do `Math.prototype.log10 = ...` to do this, but user CMS pointed out that Math doesn't work this way, so I edited out the `.prototype` part.

``````const logBase = (n, base) => Math.log(n) / Math.log(base);
``````

https://en.wikipedia.org/wiki/Logarithm#Change_of_base

FF 25+ supports a `Math.log10` method. You may to use polyfill:

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

MDN lists the supported browsers.

### Desktop Browsers

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

### Mobile Browsers

``````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
``````

If you have a number x, then use of `Math.log(x)` would essentially be lnx.

To convert it to a base other than e, you can use the following function :

``````function(x){ return Math.log(x)/Math.log(10); }
``````

`Math.log10(x)`! ????

The top answer is fine for an arbitrary base, but the question is regarding log base 10, and `Math.log10(x)` has been standard across all browsers since 2015.*

*Except IE, if that's important to you for some reason.

For base 10 use `Math.log10()`.