Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有更有效的方法来计算减法表达式的绝对值_C#_.net_Performance_Subtraction_Absolute Value - Fatal编程技术网

C# 有没有更有效的方法来计算减法表达式的绝对值

C# 有没有更有效的方法来计算减法表达式的绝对值,c#,.net,performance,subtraction,absolute-value,C#,.net,Performance,Subtraction,Absolute Value,这个问题几乎说明了一切。目前,我正在使用Math.Abs(a-b)计算减法表达式的绝对值,例如5-10和10-5都返回5 有没有更有效的方法来实现这一点,或者说这是最有效的方法?请不要对代码进行微优化,直到您确切知道问题所在 您可以自己实现一个函数,并使其成为一个内联函数,以通过使用来降低函数调用的成本 如果您使用的是Int32值,而您的输入恰好不是边界值,那么您可以使用此选项 Abs(x) = (x ^ (x >> 31)) - (x >> 31) 但是我建议你忘记它

这个问题几乎说明了一切。目前,我正在使用
Math.Abs(a-b)
计算减法表达式的绝对值,例如
5-10
10-5
都返回
5


有没有更有效的方法来实现这一点,或者说这是最有效的方法?

请不要对代码进行微优化,直到您确切知道问题所在

您可以自己实现一个函数,并使其成为一个内联函数,以通过使用来降低函数调用的成本

如果您使用的是Int32值,而您的输入恰好不是边界值,那么您可以使用此选项

Abs(x) = (x ^ (x >> 31)) - (x >> 31)
但是我建议你忘记它,分析你的应用程序,你会发现真正的问题不在调用
Math.Abs
,你应该首先让你的代码可读,然后在证明它们确实是性能问题之后调整性能问题

程序员浪费大量的时间思考或担心 关于,他们程序中非关键部分的速度 在以下情况下,提高效率的尝试实际上会产生强烈的负面影响: 考虑了调试和维护。我们应该忘记小问题 效率,比如说97%的时间:过早优化是关键 万恶之源。然而,我们不应放弃这方面的机会 临界3%。
(DonaldKnuth的论文“带GoToStatements的结构化编程”)


请阅读

这方面的任何改进都很可能是微不足道的。我坚持这一点,而不是试图重新发明轮子。内置功能通常是最有效的。我认为编译器在效率方面扮演着更重要的角色。是的,有几种方法,但是你应该考虑汇编语言。你一直在研究It32吗?你的意思是更有效?同意。我是一名游戏开发人员,我从来都不需要优化绝对值计算。(但如果我在做图形编程,那就完全是另一种动物了。)即使在图形中,重新排序指令和选择正确的数据类型组合也比使用不同的方法更有好处计算那个表达式是有问题的。比
x>慢=0?x:-x
,可以编译为(edi中的输入/eax中的输出):
xor eax、eax/sub eax、edi/cmovle eax、edi
,在x86上。关键路径上有2条指令,都具有低延迟。cmovLE=如果上一次比较小于或等于,则为条件复制。(即,如果<代码>0