我正在研究一个程序,它的工作是迭代所有可能的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))
答案 0 :(得分:0)
您超过Number.MAX_SAFE_INTEGER
,即9007199254740991。您添加到此数字的额外值将作为舍入错误丢失,这就是您转换为ASCII的原因价值没有变化。