如何在C中找到绝对值?
How to find absolute value in C?
我需要简化代码,然后消除检查减法是否为 <0
的底层 if
,如果条件为真,我乘以 * -1 以便进行减法 > 0(绝对值)。
不知道有没有函数或者运算符可以直接在绝对值中进行计算?
int i, j, N, max, s, s1;
s = v[i] - v[j];
s1 = i - j;
if (s1 < 0){
s1 *= -1;
}
if (s < 0){
s *= -1;
}
正如评论所说:
s = abs(x - y)
abs
(以及实验室、llabs)的联机帮助页:https://linux.die.net/man/3/abs
看起来您是在某种 for 循环中执行此操作(i,j 是 希望 循环索引,否则您需要更具描述性地命名变量)。在这种情况下,您应该能够构建它,使得 j
永远不会大于 i
以提高性能。
绝对值
为了避免 abs(v[i] - v[j])
的 int
溢出 及其 未定义的行为 (UB),请利用unsigned
范围通常是 int
正范围的两倍并执行 unsigned 数学运算。
// int s;
unsigned s;
if (v[i] > v[j]) {
s = 0u + v[i] - v[j];
} else {
s = 0u + v[j] - v[i];
}
我需要简化代码,然后消除检查减法是否为 <0
的底层 if
,如果条件为真,我乘以 * -1 以便进行减法 > 0(绝对值)。
不知道有没有函数或者运算符可以直接在绝对值中进行计算?
int i, j, N, max, s, s1;
s = v[i] - v[j];
s1 = i - j;
if (s1 < 0){
s1 *= -1;
}
if (s < 0){
s *= -1;
}
正如评论所说:
s = abs(x - y)
abs
(以及实验室、llabs)的联机帮助页:https://linux.die.net/man/3/abs
看起来您是在某种 for 循环中执行此操作(i,j 是 希望 循环索引,否则您需要更具描述性地命名变量)。在这种情况下,您应该能够构建它,使得 j
永远不会大于 i
以提高性能。
绝对值
为了避免 abs(v[i] - v[j])
的 int
溢出 及其 未定义的行为 (UB),请利用unsigned
范围通常是 int
正范围的两倍并执行 unsigned 数学运算。
// int s;
unsigned s;
if (v[i] > v[j]) {
s = 0u + v[i] - v[j];
} else {
s = 0u + v[j] - v[i];
}