模是否在幕后使用浮点数

Does modulus use floating point behind the scenes?

本文关键字:浮点数 是否      更新时间:2023-10-16

在C++中,模数是否在幕后使用任何浮点数学?

int x = 1234;
int y = 5678;
int z = y % x;  // any floating point used underneath to calculate the integer result?

作为背景,我在思考这个问题,他说如果没有 FP 仿真,他就不能使用任何浮点数。然后我意识到我不确定模运算符是否使用了任何类型的浮点汇编操作。我的猜测是没有,但我想确定。

No 1。请参阅此类运算符的一些实现

  • 汇编语言 - 如何做模? - "[在 x86 中] DIV 指令 [..]给出商和余数"

  • 处理器上的汇编模算法,没有除法运算符


1 只要观察到的行为在规范范围内,实现就可以做任何它想做的事情。但是,我不知道有任何实现会选择使用浮点运算,也想不出这样做的一般理由。

不,它不使用浮点运算。结果可以非常简单地获得

z = y - ( y/x ) * x;

早期的计算机有时没有浮点协处理器。因此,此类操作是通过使用使用整数操作的机器命令来执行的。

这取决于

"C++"如何计算"幕后"模数的实现