为什么%和fmod()都存在于C中

时间:2017-01-25 17:22:49

标签: c math.h

我今天在我的CS课上进行了测验并得到了关于模运算符错误的问题,因为我不知道C中%的可用性,我一直在使用fmod()。为什么两者都存在?是一个更好/更快还是只处理不同的数据类型?

4 个答案:

答案 0 :(得分:8)

在C中使用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