在C ++中,模数是否在幕后使用任何浮点数学?
int x = 1234;
int y = 5678;
int z = y % x; // any floating point used underneath to calculate the integer result?
作为背景,我在考虑this question他说他不能在没有FP模拟的情况下使用任何浮点数。然后我意识到我不确定模数运算符是否使用了任何类型的浮点组装操作。我的猜测是没有,但我想确定。
答案 0 :(得分:3)
没有 1 。请参阅此类运算符的一些实现。
Assembly Language - How to Do Modulo? - “[在x86中] DIV指令[..]给出了商和余数”
Assembly mod algorithm on processor with no division operator
1 实现可以做任何事情,因为观察到的行为在规范范围内。但是,我不知道任何选择使用浮点运算的实现,也不能想到这样做的一般理由。
答案 1 :(得分:2)
不,它不使用浮点运算。结果可以非常简单地获得
z = y - ( y/x ) * x;
早期的计算机有时没有浮点协处理器。因此,通过使用以整数运算的机器命令来执行此类操作。
答案 2 :(得分:1)
这取决于“C ++”如何计算“幕后”的模数