modulo function

本文关键字:function modulo | 更新日期: 2023-09-27 18:29:03

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)

程序为new x生成的值是299.6(我不明白)。

(Distance % pitch)的值为0.7999955。如果手动计算,则300 modulo 0.80。我猜模函数对浮点值的表现不同,但我不知道怎么做。还是按0.8的300个百分比计算?

对此的解释将不胜感激。

modulo function

千万不要指望对十进制浮点值(例如0.8)进行二进制浮点计算(使用floatdouble)来给出准确的结果。

问题是,大多数十进制数字不能用二进制浮点格式精确表示。你可以把它看作是试图用十进制表示1/3。这是不可能的。

在您的情况下,0.8f并不是真正的0.8。如果您将值强制转换为double以获得一些额外的精度,您将看到它更接近0.800000011920929

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