web-dev-qa-db-ja.com

JavaScriptでMath.log()のベースを指定するにはどうすればよいですか?

JavaScriptにはlog関数が必要ですが、ベース10である必要があります。これのリストが表示されないため、それは不可能だと思います。これに対する解決策を知っている数学ウィザードはいますか?

195
MetaGuru

「ベースの変更」フォーミュラ/アイデンティティ

10を底とする対数の数値は、次の恒等式で計算できます。

Logarithm for base 10


JavaScriptのMath.log(x)xln(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);
}
314
Peter

簡単です。log(10)で割ってベースを変更するだけです。あなたを助ける定数もあります

Math.log(num) / Math.LN10;

次と同じです:

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

値の対数と目的の底の対数を単純に除算できます。また、Math.logメソッドをオーバーライドして、オプションの基底引数を受け入れることもできます。

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

Math.log(5, 10);
49
CMS

ここの答えは明らかな精度の問題を引き起こし、いくつかのユースケースでは信頼できません

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

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

13
Yukulélé
Math.log10 = function(n) {
    return (Math.log(n)) / (Math.log(10));
}

その後、あなたはできる

Math.log10(your_number);

注:最初はこれを行うためにMath.prototype.log10 = ...を実行しようと思っていましたが、ユーザー CMS はMathを指摘しましたこの方法では機能しないため、.prototype部分を編集しました。

12
artlung

FF 25+は Math.log10 メソッドをサポートします。ポリフィルを使用できます:

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
9
Ivan Black

Math.log10(x)! ????

一番上の答えは任意のベースで問題ありませんが、質問は10を底とするログに関するもので、Math.log10(x)2015年以降のすべてのブラウザーで標準です *

*何らかの理由でそれがあなたにとって重要な場合、IEを除く。

0
Haumed Rahmani

数値xがある場合、Math.log(x)の使用は本質的にlnxになります。

E以外のベースに変換するには、次の関数を使用できます。

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