这是我目前在网上找到的
int main(void)
{
long a = 12345;
int b = 10;
int remain = a - (a / b) * b;
printf("%i\n", remain);
}
首先,我想知道这个公式是如何工作的。也许我不会数学,但是这里的运算优先级似乎有点奇怪。如果我运行这段代码,预期的答案5会被打印出来。但是我不明白(a / b)* b为什么不抵消'a',导致a-a = 0。
这只对整型和长整型有效,一旦涉及到双精度型,它就不再有效了,有人可能会告诉我为什么,有没有一种替代模运算的方法可以对双精度型有效?
此外,我不知道如果我了解到什么值一个长可以去,我发现网上的上限是2147483647,但当我输入更大的数字,如一个在'a'的代码运行没有任何问题,直到一定的点...
谢谢你的帮助,我是新的编码和尝试学习!
2条答案
按热度按时间p5cysglq1#
给定两个
double
有限数x
和y
,其中y
不等于零,fmod(x, y)
得到x
除以y
的余数,具体地说,它返回x
− ny
。其中,n 的选择使得x
− ny
与x
具有相同的符号,并且在量值上小于y
。(因此,如果x
为正,则0 ≤fmod(x, y)
〈x
;如果x
为负,则x
〈fmod(x, y)
≤ 0。)在
<math.h>
中声明了fmod
。正确实现的
fmod
返回精确的结果;因为指定的结果总是可表示的,所以不存在浮点错误。C标准还指定
remquo
返回商 n 和remainder
的余数和一些低位(至少三位),并对余数的定义进行了修改。它还指定了这些函数的float
和long double
的变体。rekjcdws2#
简单的实现。有限的范围。添加额外的浮点不精确(因为它执行一些算术运算)