gpt4 book ai didi

javascript - 将一个字节(数字)移动一个除法的小数部分

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:50 25 4
gpt4 key购买 nike

我正在尝试根据 b/n 的小数部分移动字节数组

我使用的(简化的)公式是(给定 n = 2):

b = b / 2
if (decimal part of b == 0.5) {
b = floor(b) + 256 / 2
}

所以在这种情况下:

b = 0 then 0
b = 1 then 128
b = 2 then 2
b = 3 then 129

在我到达 n = 6 之前它工作正常,但我不确定如何修复它。

这是一个完整的例子:http://jsfiddle.net/cBY2H/4/embedded/result,js/

可以在控制台输出中看到:

Shift by 2-5: fine

Shift by 6:
Extra 128
Missing 213

Shift by 7:
Extra 110
Missing 219

Shift by 8: fine

我怎样才能让它至少适用于 n = 2-9 甚至更好 n = 2+

执行移位的实际代码:

function shiftByte(byte, shiftAmount) {
var shiftSize = 256 / shiftAmount,
decimal = 1 / shiftAmount,
currentDecimal = decimal,
shiftCount = 1;
byte = byte / shiftAmount;
while (numberLessThan(currentDecimal, 1)) {
if (numberEquals(byte - Math.floor(byte), currentDecimal)) {
return Math.ceil(shiftSize * shiftCount) + Math.floor(byte);
}
currentDecimal += decimal;
shiftCount++;
}
return Math.floor(byte);
}

最佳答案

如果您只想用唯一索引填充数组,您可以使用一种直接的方法,而无需所有这些繁琐的浮点除法和比较:

function shiftData(data, n) {
var result = [];
var k = 0;
var next = 0;

for (var i = 0; i < data.length; i++) {
result[k] = i;
k += n;
if (k > 256) {
k = ++next;
}
}
return result;
}

这会填充您的字节字段并满足您的验证例程。

如果您需要在 shiftData 之外调用 shiftByte,您可以使用相同的方法并即时创建移位表。当然,您不必每次都这样做:保留一个全局字典,其中您的移位量(或者可能是移位量和表大小)作为键,字节表作为值。如果它不存在,则创建一个表,然后只查找之后的字节。

关于javascript - 将一个字节(数字)移动一个除法的小数部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23406941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com