我正在编写一个程序,它的工作是遍历所有可能的ASCII字符。该代码能够成功地转换为一个点。当输入数字100000000000000008191时,返回值为!__Ej2~nHK%。当输入下一个数字100000000000000008192时,返回值为!__Ej2~nHK%,相同的值。序列中的下一个和下一个都会发生这种情况。它变得如此低效,以至于16384个数字生成相同的值。
这不应该发生,因为在任何数字系统中计数时,不同值的数字不应该是相同的。
有没有人知道它出了什么问题?
function generate(state) {
const printables = ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~'
var ones = state % printables.length
var newstate = Math.floor(state / printables.length)
if (newstate !== 0) {
return generate(newstate) + printables[ones]
} else {
return printables[ones]
}
}
console.log(generate(90071992514740992227))发布于 2018-04-19 10:10:01
您超出了Number.MAX_SAFE_INTEGER,即9007199254740991。添加到这个数字中的额外值将作为舍入错误丢失,这就是ASCII转换后的值不变的原因。
https://stackoverflow.com/questions/49911568
复制相似问题