如果您阅读System.Math.IEEERemainder的MSDN页面中给出的示例,您会注意到两个正数可以具有负余数.
回报价值
一个等于x - (y Q)的数字,其中Q是舍入到最接近整数的x/y的商(如果x/y落在两个整数之间,则返回偶数整数).
所以:3 - (2*(round(3/2)))= -1
/* ... Divide two double-precision floating-point values: 1) The IEEE remainder of 1.797693e+308/2.00 is 0.000000e+000 2) The IEEE remainder of 1.797693e+308/3.00 is -1.000000e+000 Note that two positive numbers can yield a negative remainder. */
实际的问题可能是,"为什么我们有两个剩余的操作?" 处理浮点数据时,您始终需要了解浮点标准.由于我们处于21世纪,大多数都是IEEE 754,我们很少有人担心VAX F_Float与IEEE 754.
的C#标准状态,该余数运算符(第7.7.3)中,当施加到浮点参数,当施加到整数参数是类似于余运算符.也就是说,在整数和浮点余数运算中使用相同的数学公式1(对于与浮点表示相关联的拐角情况的附加考虑).
因此,如果您希望浮点数上的余数运算符合当前的IEEE 754舍入模式,建议使用Math.IEEERemainder.但是,如果您的使用对C#余数运算符产生的舍入的细微差异不是特别敏感,那么继续使用运算符.
给定:z = x%y,则z = x - (x/y)*y