remquo 结果没有意义

remquo Results Not Making Sense

我读 here remquo 应该 return:

If successful, returns the floating-point remainder of the division x/y as defined in std::remainder, and a value whose sign is the sign of x/y and whose magnitude is congruent modulo 2n to the magnitude of the integral quotient of x/y, where n is an implementation-defined integer greater than or equal to 3.

很明显,我误解了所有技术术语,因为我认为我要取回除法的小数结果。而是这个操作:

int quot;
const float rem = remquo(7.0F, 4.0F, &quot);

quot 设置为 2 并将 rem 设置为 -1.0!我可以看出这是如何有效的,因为 4.0 * 2 = 8.07.0 - 8.0 = -1.0。但是为什么我们使用 quot 会导致负值 rem?我不应该取回 1quot3.0rem 吗?

由于您的问题是关于 remquo 返回的值,所以它完全是关于 std::remainder,因为 remquo 的那部分行为被直接定义为与std::remainder.

std::remainder 提供了 IEEE 754 余数运算,它与 fmod 的不同之处在于两个正值的 fmod 可以预期始终为正,而 IEEE 754余数是相对于积分商 q 定义为 最近 整数到数学商 x/y,因此 remainder = x - y*q 每个都产生负结果时间将数学商舍入 到下一个整数。

IEEE 754 余数运算是 question “Math.IEEERemainder returns negative results.” 中讨论的运算,因此您可能想阅读它和已接受的答案,尽管它们是关于不同的编程语言。

注意:规范中关于商的部分是“全等模 2n 到积分商的大小”只是意味着您没有得到整个积分商,它确实可能不适合 int 类型(想想 remquo(FLT_MAX, 1.0f, ...)。相反,你得到整数商的最低有效位的 implementation-defined 数量。implementation-defined 数字您获得的位数必须至少为三个,但可以更多。

行为正确;如std::remainder所述,商四舍五入为最接近的整数,则余数可以为负数。

如果您使用整数,我建议您使用 C 函数 div()