2016-01-05 57 views
-1

C#中的新手,試圖制定一個簡單的計算。modulo函數

float old x=300 
float Distance=300 
float pitch=0.8 
int sign=1 

new x= old x - (sign * (Distance % pitch) * 0.5 f)

通過程序對新的x產生的值是299.6(我不理解)。

(Distance % pitch)的值是0.7999955。如果您手動計算300 modulo 0.80。我猜測模數函數對浮點值的行爲不同,但我不知道如何。或者它被計算爲0.8的300個百分比?

對此的解釋將不勝感激。

+0

見http://stackoverflow.com/questions/20671518 –

+0

這與浮點數的一個典型問題.. 。 –

回答

1

不要期望二進制浮點計算(使用floatdouble)對十進制浮點值(例如0.8)給出確切的結果。

問題是大多數小數不能完全用二進制浮點格式表示。您可以將其想象爲試圖用十進制表示法表示1/3。這是不可能的。

在你的情況下,0.8f並不是真的0.8。如果你投的價值double得到一些額外的精度,你會看到它更接近0.800000011920929

float pitch = 0.8f; 
Console.WriteLine((double)pitch); // prints 0.800000011920929