我有一个关于在C / C ++中用整数余数执行除法的问题。据说在两个整数之间的除法运算中,如果结果不能表示为整数,则其十进制中的非整数部分将被删除。 例如,int a = 17;一个/ = 3; / 伪浮点数a,得到值5.6666 .. /所以结果是5.这是由于点后的部分而在算术中同时具有余数的正常除法的结果(6666。 。)实际上是将余数(2)除以3。 这适用于我的compter,但是它绝对可靠,或者我必须使用float声明,然后使用floor转换为int以保证安全吗?对于性能和安全性哪个更好? 提前谢谢。
答案 0 :(得分:4)
C ++中对整数的算术运算不依赖于计算机
如果a
和b
是整数,a / b
将始终为您提供除法的整数商,a % b
将始终为您提供整数除法的余数。
就性能而言,您可以查看this StackOverflow question,但它似乎取决于架构。
答案 1 :(得分:1)
您应该使用a / b
和a % b
进行整数除法和余数。正如Levans所说,这些可以保证为您提供独立于您的硬件的“正确”值(至少a
和b
为正)。使用浮点运算时,结果可能会受到舍入误差的影响,舍入误差也可能与硬件有关。
答案 2 :(得分:0)
因此,您可以获得两个浮点数,而不是整数模数,然后将一个浮点数乘以除法符的倒数:
17.0 * 0.33 = 5.61
然后将它()变成一个整数并减去:
5.61 - 5 ----> 0.61
然后将结果乘以0.33的倒数:
0.61 * 3 ------> 1.83
然后ceil()它
2 ----> this is 17%3
根据用户“Oseiskar”的基准测试,这比使用直接模数慢14倍。