2014-01-16 36 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; 
相關問題