2014-01-16 38 views
-1

//值是双将这两种方法转换为负值是否有区别?

什么区别?编译器执行此计算的快速方法是什么?

value = System.Math.Abs(55.55); 
this.Value = -value; 

// or  
this.Value = System.Math.Abs(value) * (-1); 
+8

_编译器做这种计算的方法是什么?_你可以测量自己。从埃里克利珀:http://ericlippert.com/2012/12/17/performance-rant/如果你有两匹马,你想知道哪两个是快**然后比赛你的马** –

+1

欢迎堆栈溢出!我编辑过你的标题。请参阅“应该在标题中是否包含”标签?“,其中的共识是”不,他们不应该“。 http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles –

回答

8

是任意性差异?

绝对。试想一下:

double value = -5; 
this.Value = -value; // Sets Value to 5 
this.Value = Math.Abs(value) * -1; // Sets Value to -5 

关注正确性简单演出前。你究竟在努力实现什么?那最简单的表达方式是什么?

3

不同之处在于:当value为负值时,第一项分配将使this.Value为正数,而第二项分配不会产生正数。

由于这两个语句执行不同的东西,还有就是在比较哪一个是快没有意义的。但是,总体而言,调整这些微小的代码片段以提高性能几乎没有意义,因为这种微型优化对产品整体性能的影响几乎总是不存在。

0

代码这两行做不同的事情。

使用-value会改变的迹象,如果该值是积极的也将是负面的,而如果它是消极的,将是积极的。

使用Math.Abs(value) * -1会使值负,无论原始符号。

第二个选项可以更有效地使用一元负运算符来完成:

this.Value = -System.Math.Abs(value); 

你也可以考虑自己做,而不是使用Math.Abs的比较可能是更快:

this.Value = value < 0 ? value : -value; 
相关问题