我今天在我的CS课上进行了测验并得到了关于模运算符错误的问题,因为我不知道C中%的可用性,我一直在使用fmod()
。为什么两者都存在?是一个更好/更快还是只处理不同的数据类型?
答案 0 :(得分:8)
modulo division
运算符的 %
仅适用于整数操作数,并返回除法的整数余数。
函数fmod
接受double
作为参数,这意味着它接受非整数值并返回除法的其余部分。
关于fmod的补充说明:在double
操作数的情况下如何计算余数?感谢@chux显示documentation 关于fmod如何计算浮点除法的余数。
计算除法运算x / y的浮点余数 通过这个函数恰好是值x - n * y,其中n是x / y 小数部分被截断。
返回的值与x具有相同的符号,并且小于或等于y in 大小
另一方面,当模数除法运算符(%)首次设计时,语言设计者确定它只支持“整数”类型的操作数,因为从技术上讲,“余数”的概念在数学仅适用于整数除法。
答案 1 :(得分:5)
因为%
是一个整数运算符,fmod
代表floatmod
并且用于浮点数。
答案 2 :(得分:2)
为什么两者都存在?
因为可能计算出不同的结果,即使具有相同的值。这些差异可能会出现负值。实质上fmod()
和%
是不同的数学函数。
fmod(x,y)
,因为C89,得到了结果"结果的符号与x相同,幅度小于y"
i%j
并没有如此明确地定义。见Remainder calculation for the modulo operation。这允许代码有效地使用现有的变体处理器。创建div()
函数是为了解决这种可变性。 Ref
通过C99,他们为相同的值计算相同的值。未来C可以允许123.4 % 56.7
答案 3 :(得分:1)
%只是整数模
fmod是float modulo,可以按照MSDN中的描述使用。 https://msdn.microsoft.com/en-us/library/20dckbeh.aspx