我需要處理可以是正值或負值的變數,方法應該能夠添加或減去其絕對值,但不改變其符號。
我有以下代碼可以做類似的事情:
public static class FloatExtensions
{
public static float sumToItsAbsolute(this float currentValue, float summedValue)
{
float currentAbsoluteValue = Math.Abs(currentValue);
return (currentValue / currentAbsoluteValue) * (currentAbsoluteValue summedValue);
}
}
我可以使用它,但我想知道是否有更好的方法。
編輯:“更好”,我的意思是更高的性能。如果沒有潛在的錯誤,我還沒有看到。
提前致謝。
uj5u.com熱心網友回復:
如果您花一點時間查看Math類的檔案(您已經在使用它,因此您已經知道它),您會注意到它提供了許多方便的功能。其中有一個函式來獲取一個值的符號。
因此,與其v / Math.Abs(v)獲取v值 -1 或 1的符號(功能性和創造性,但很麻煩,甚至可能容易出現 IEEE 浮點運算可能遭受的精度錯誤),您只需Math.Sign(v)獲取符號即可。
關于錯誤:我想把球扔回你的球場,并鼓勵你先為自己考慮一下你的代碼的行為。請注意您的代碼是如何進行除法和乘法運算的。您能否找到除法或乘法可能失敗或產生錯誤結果的currentValue值?
性能方面,我真的懷疑這個功能會讓你的程式比你想要的慢。如果您的程式在某些方面的表現比預期的要慢,請使用分析器找出程式中占大部分性能成本的實際部分,而不是盯著看和盲目猜測。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/352565.html
