模数函数

时间:2016-01-05 23:23:20

标签: c# floating-point precision floating-accuracy

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.80。我猜模数函数对浮点值的行为有所不同,但我不知道如何。或者它计算为0.8的百分比?

对此的解释将非常感激。

1 个答案:

答案 0 :(得分:1)

永远不要期望对十进制浮点值(例如float)进行二进制浮点计算(使用double0.8)来给出精确结果。

问题是大多数十进制数不能以二进制浮点格式精确表示。您可以将其视为尝试以十进制表示法表示1/3。这是不可能的。

在您的情况下,0.8f并非0.8。如果您将值转换为double以获得更高的精度,您会发现它更接近0.800000011920929

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