C#中的新手,尝试计算一个简单的计算。
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.8
是0
。我猜模数函数对浮点值的行为有所不同,但我不知道如何。或者它计算为0.8的百分比?
对此的解释将非常感激。
答案 0 :(得分:1)
永远不要期望对十进制浮点值(例如float
)进行二进制浮点计算(使用double
或0.8
)来给出精确结果。
问题是大多数十进制数不能以二进制浮点格式精确表示。您可以将其视为尝试以十进制表示法表示1/3
。这是不可能的。
在您的情况下,0.8f
并非0.8
。如果您将值转换为double
以获得更高的精度,您会发现它更接近0.800000011920929
float pitch = 0.8f;
Console.WriteLine((double)pitch); // prints 0.800000011920929