在取消负值即5 - (-5)
的情况下,我们将其设为10,这是肯定的,数学上是正确的。
但在这种情况下,我们的逻辑应该将每个数字视为正数而不是负数。根据我们的要求,它应该是5 - (-5) = 0
。
答案 0 :(得分:2)
其他人提供了Math.Abs作为解决方案。我不知道这是否会内联Math.Abs ......但是从这样的数字来衡量性能增益与Math.Abs相比:
int d = X > 0 ? X : -X;
验证它真的值得。
如果Math.Abs抛出OverflowException。您也可以使用选中的算法在直接C#中强制执行此操作:
int d = X > 0 ? X : checked(-X);
编辑:我对你可以使用的不同方法进行了一些快速测试:
Math.Abs(i) 5839 ms Factor 1
i > 0 ? i : -i 6395 ms Factor 1.09
(i + (i >> 31)) ^ (i >> 31) 5053 ms Factor 0.86
答案 1 :(得分:0)
答案 2 :(得分:0)
尝试Math.Abs这将解决目的。
因此,在应用任何算术运算之前,您应该应用Math.Abs(value),它会将您的负值转换为正值。
class Program
{
static void Main()
{
//
// Compute two absolute values.
//
int value1 = -1000;
int value2 = 20;
int abs1 = Math.Abs(value1);
int abs2 = Math.Abs(value2);
//
// Write integral results.
//
Console.WriteLine(value1);
Console.WriteLine(abs1);
Console.WriteLine(value2);
Console.WriteLine(abs2);
}
}