Saya memerlukan log
fungsi untuk JavaScript, tetapi harus berbasis 10. Saya tidak dapat melihat daftar apa pun untuk ini, jadi saya menganggap itu tidak mungkin. Apakah ada penyihir matematika di luar sana yang tahu solusi untuk ini?
Saya memerlukan log
fungsi untuk JavaScript, tetapi harus berbasis 10. Saya tidak dapat melihat daftar apa pun untuk ini, jadi saya menganggap itu tidak mungkin. Apakah ada penyihir matematika di luar sana yang tahu solusi untuk ini?
Jawaban:
Formula / Identitas "Perubahan Basis"
Nilai numerik untuk logaritma ke basis 10 dapat dihitung dengan identitas berikut.
Karena Math.log(x)
dalam JavaScript mengembalikan logaritma natural dari x
(sama dengan ln (x) ), untuk basis 10 Anda dapat membaginya dengan Math.log(10)
(sama dengan ln (10) ):
function log10(val) {
return Math.log(val) / Math.LN10;
}
Math.LN10
adalah konstanta precomputed bawaan untuk Math.log(10)
, jadi fungsi ini pada dasarnya identik dengan:
function log10(val) {
return Math.log(val) / Math.log(10);
}
return Math.log(n) / Math.log(base);
Anda bisa membagi logaritma nilai Anda, dan logaritma basis yang diinginkan, juga Anda bisa mengganti Math.log
metode untuk menerima argumen basis opsional:
Math.log = (function() {
var log = Math.log;
return function(n, base) {
return log(n)/(base ? log(base) : 1);
};
})();
Math.log(5, 10);
jawabannya di sini akan menyebabkan masalah presisi yang jelas dan tidak dapat diandalkan dalam beberapa kasus penggunaan
> 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.round(Math.log(1000) / Math.LN10 * 1e6) / 1e6)
const logBase = (n, base) => Math.log(n) / Math.log(base);
Math.log10 = function(n) {
return (Math.log(n)) / (Math.log(10));
}
Maka Anda bisa melakukannya
Math.log10(your_number);
CATATAN: Awalnya saya berpikir untuk melakukan Math.prototype.log10 = ...
ini, tetapi pengguna CMS menunjukkan bahwa Math tidak berfungsi seperti ini, jadi saya mengedit .prototype
bagian itu.
.prototype
bagian;)
FF 25+ mendukung suatu Math.log10
metode. Anda dapat menggunakan polyfill:
if (!Math.log10) Math.log10 = function(t){ return Math.log(t)/Math.LN10; };
MDN mencantumkan browser yang didukung .
Browser Desktop
Chrome Firefox (Gecko) Internet Explorer Opera Safari 38 25 (25) Not supported 25 7.1
Peramban Seluler
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)
! 😁
Jawaban teratas baik untuk basis arbitrer, tetapi pertanyaannya adalah mengenai basis log 10, dan Math.log10(x)
telah menjadi standar di semua browser sejak 2015. *
* Kecuali IE, jika itu penting bagi Anda karena alasan tertentu.
Jika Anda memiliki angka x, maka penggunaan Math.log(x)
dasarnya adalah lnx.
Untuk mengonversinya menjadi basis selain e, Anda dapat menggunakan fungsi berikut:
function(x){ return Math.log(x)/Math.log(10); }
Untuk penggunaan basis 10 Math.log10()
.
Lihat dokumen di: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log10