例如:基数 10(999) => 3 位数字 === 基数 2(1111100111) => 10 位数字我目前正在使用一个表来进行这个估计,但它仍然限制在 base10 中的 15 位数字,因为在 JS 下我们仍然被 MAX_SAFE_INTEGER 阻止是下表(运行代码段查看它)。如何通过公式扩展此表,直到基数为 10 的 255 位数字?const TDigits = document.querySelector('#T-Digits tbody'), MaxDigits = Number.MAX_SAFE_INTEGER.toString().length;var x9 = '9';for (let n=1; n < MaxDigits; n++){ let newRow = TDigits.insertRow(-1) newRow.insertCell(0).textContent = n newRow.insertCell(1).textContent = (x9-0).toString(2).length newRow.insertCell(2).textContent = Math.ceil(Math.log2(Math.pow(10,n))) x9 += '9';}table { margin:1em}table thead { background-color: cadetblue }table td { text-align: center; padding: .2em .5em; border-bottom: 1px solid grey }<table id="T-Digits"> <caption>Max digits corresponding</caption> <thead> <tr><td>base 10</td> <td>base 2</td><td> log </td></tr> </thead> <tbody> <tr><td>0</td> <td>1</td><td>1</td></tr> </tbody></table>
2 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
for (n = 1; n < 256; n +=1 ) {
console.log(n, Math.ceil(Math.log2(Math.pow(10,n))));
}
据我所知,这些值匹配
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
⌊log2(n)⌋ + 1
var n = 123;
console.log(n, (n >>> 0).toString(2) );
var nb = Math.floor( Math.log2(n) ) + 1;
console.log( nb );
添加回答
举报
0/150
提交
取消