如何进行人工下溢/溢出?
How to make artificial underflow/ overflow?
我想在我的程序中将计算限制在 0-360 的范围内。我知道如果你有一个 8 位整数,加上 255 + 1 将溢出到 0,同样地,0 - 1 将下溢到 255。
我写这个函数作为测试:
//only for negative numbers
function clampTo360 (a) {
if (a < 0) {
var b = 361 + a;
if (b > 0) {
return b;
} else {
clampTo360(b);
}
}
}
有没有更好的方法来编写函数代码,以便计算 0 - 1 将 return 360?
您可以添加 360 以获得正值,return 余数。
function clampTo360(g) {
const rest = g % 360;
return rest < 0 ? 360 + rest : rest
}
console.log(clampTo360(365)); // 5
console.log(clampTo360(-5)); // 355
console.log(clampTo360(700)); // 340
console.log(clampTo360(-700)); // 20
您可以在此处使用取模运算符。但是,下溢输入将导致负值。
为避免这种情况,您可以添加 360
以获得区间 [0; 720)
中的数字,然后再次应用模运算符以获得 0
和 [=11= 之间的结果]:
function clampTo360(g) {
return (g % 360 + 360) % 360
}
console.log(clampTo360(720))
console.log(clampTo360(360))
console.log(clampTo360(-360))
console.log(clampTo360(-720))
我想在我的程序中将计算限制在 0-360 的范围内。我知道如果你有一个 8 位整数,加上 255 + 1 将溢出到 0,同样地,0 - 1 将下溢到 255。 我写这个函数作为测试:
//only for negative numbers
function clampTo360 (a) {
if (a < 0) {
var b = 361 + a;
if (b > 0) {
return b;
} else {
clampTo360(b);
}
}
}
有没有更好的方法来编写函数代码,以便计算 0 - 1 将 return 360?
您可以添加 360 以获得正值,return 余数。
function clampTo360(g) {
const rest = g % 360;
return rest < 0 ? 360 + rest : rest
}
console.log(clampTo360(365)); // 5
console.log(clampTo360(-5)); // 355
console.log(clampTo360(700)); // 340
console.log(clampTo360(-700)); // 20
您可以在此处使用取模运算符。但是,下溢输入将导致负值。
为避免这种情况,您可以添加 360
以获得区间 [0; 720)
中的数字,然后再次应用模运算符以获得 0
和 [=11= 之间的结果]:
function clampTo360(g) {
return (g % 360 + 360) % 360
}
console.log(clampTo360(720))
console.log(clampTo360(360))
console.log(clampTo360(-360))
console.log(clampTo360(-720))