JavaScriptの関数が必要ですが、log
10進数である必要があります。これのリストが表示されないため、不可能だと思います。これに対する解決策を知っている数学の魔法使いはいますか?
10 に答える
「ベースの変更」式/アイデンティティ
10を底とする対数の数値は、次のIDで計算できます。
JavaScriptでは(ln(x)と同じ)Math.log(x)
の自然対数が返されるため、基数10の場合は( ln(10)と同じ)で除算できます。x
Math.log(10)
function log10(val) {
return Math.log(val) / Math.LN10;
}
Math.LN10
はの組み込みの事前計算された定数であるためMath.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 = (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
Math.log10 = function(n) {
return (Math.log(n)) / (Math.log(10));
}
その後、あなたはすることができます
Math.log10(your_number);
注:当初はこれを行うことを考えていMath.prototype.log10 = ...
ましたが、ユーザーCMSが、Mathがこのように機能しないことを指摘したため、.prototype
パーツを編集しました。
const logBase = (n, base) => Math.log(n) / Math.log(base);
FF25+は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
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のドキュメントを参照してください。