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

爱⌒轻易说出口 提交于 2019-11-26 08:42:54

问题


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?


回答1:


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



回答2:


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



回答3:


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



回答4:


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



回答5:


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.




回答6:


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

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




回答7:


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



回答8:


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.




回答9:


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


来源:https://stackoverflow.com/questions/3019278/how-can-i-specify-the-base-for-math-log-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!