簡體   English   中英

如何在 JavaScript 中指定 Math.log() 的基礎?

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

我需要一個用於 JavaScript 的log函數,但它需要以 10 為基數。我看不到任何列表,所以我假設這是不可能的。 是否有任何數學奇才知道解決方案?

“改變基礎”公式/身份

可以使用以下恆等式計算以 10 為底的對數數值。

以 10 為底的對數


由於Math.log(x)在JavaScript返回的自然對數x (同為ln(X)),對基體10可以通過划分Math.log(10)同樣為ln(10)):

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

Math.LN10Math.log(10)的內置預計算常量,因此該函數本質上等同於:

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

很簡單,只需通過除以 log(10) 來更改基數。 甚至有一個常數可以幫助您

Math.log(num) / Math.LN10;

這與:

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

您可以簡單地將值的對數和所需基數的對數Math.log ,也可以覆蓋Math.log方法以接受可選的基數參數:

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

Math.log(5, 10);

這里的答案會導致明顯的精度問題,並且在某些用例中不可靠

> 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
const logBase = (n, base) => Math.log(n) / Math.log(base);

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

Math.log10 = function(n) {
    return (Math.log(n)) / (Math.log(10));
}

然后你可以做

Math.log10(your_number);

注意:最初我想用Math.prototype.log10 = ...來做這個,但是用戶CMS指出 Math 不能這樣工作,所以我編輯了.prototype部分。

FF 25+ 支持Math.log10方法。 您可以使用 polyfill:

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

MDN 列出了支持的瀏覽器

桌面瀏覽器

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

移動瀏覽器

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

最佳答案適用於任意基數,但問題是關於以 10 為基數的日志, 自 2015 年以來Math.log10(x)已成為所有瀏覽器的標准。 *

*除了 IE,如果出於某種原因這對您很重要。

如果你有一個數字 x,那么Math.log(x)使用本質上就是 lnx。

要將其轉換為 e 以外的基數,可以使用以下函數:

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

對於基數 10,請使用Math.log10()

請參閱以下文檔: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM