//值是雙將這兩種方法轉換爲負值是否有區別?
什麼區別?編譯器執行此計算的快速方法是什麼?
value = System.Math.Abs(55.55);
this.Value = -value;
// or
this.Value = System.Math.Abs(value) * (-1);
//值是雙將這兩種方法轉換爲負值是否有區別?
什麼區別?編譯器執行此計算的快速方法是什麼?
value = System.Math.Abs(55.55);
this.Value = -value;
// or
this.Value = System.Math.Abs(value) * (-1);
是任意性差異?
絕對。試想一下:
double value = -5;
this.Value = -value; // Sets Value to 5
this.Value = Math.Abs(value) * -1; // Sets Value to -5
關注正確性和簡單演出前。你究竟在努力實現什麼?那最簡單的表達方式是什麼?
不同之處在於:當value
爲負值時,第一項分配將使this.Value
爲正數,而第二項分配不會產生正數。
由於這兩個語句執行不同的東西,還有就是在比較哪一個是快沒有意義的。但是,總體而言,調整這些微小的代碼片段以提高性能幾乎沒有意義,因爲這種微型優化對產品整體性能的影響幾乎總是不存在。
代碼這兩行做不同的事情。
使用-value
會改變的跡象,如果該值是積極的也將是負面的,而如果它是消極的,將是積極的。
使用Math.Abs(value) * -1
會使值負,無論原始符號。
第二個選項可以更有效地使用一元負運算符來完成:
this.Value = -System.Math.Abs(value);
你也可以考慮自己做,而不是使用Math.Abs
的比較可能是更快:
this.Value = value < 0 ? value : -value;
_編譯器做這種計算的方法是什麼?_你可以測量自己。從埃裏克利珀:http://ericlippert.com/2012/12/17/performance-rant/如果你有兩匹馬,你想知道哪兩個是快**然後比賽你的馬** –
歡迎堆棧溢出!我編輯過你的標題。請參閱「應該在標題中是否包含」標籤?「,其中的共識是」不,他們不應該「。 http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles –