【C语言标准库函数】取整与取余函数:ceil(), floor(), fmod(), 和 modf()_fmod函数
目录
一、头文件
二、函数简介
2.1. ceil(double x)
2.2. floor(double x)
2.3. fmod(double x, double y)
2.4. modf(double value, double *iptr)
三、伪代码实现(概念性)
四、注意事项
五、示例代码
在 C 语言标准库中, 头文件提供了用于浮点数取整和取余操作的函数,包括
ceil()
、floor()
、fmod()
和 modf()
。
一、头文件
这些函数都定义在头文件中,因此在使用之前需要包含这个头文件:
#include
二、函数简介
2.1. ceil(double x)
功能:ceil
函数用于计算不小于给定数x
的最小整数,即执行向上取整操作。
参数:double x
,要取整的浮点数。
返回值:返回类型为double
,表示不小于x
的最小整数。
注意点:
- 当
x
为正数时,结果是大于或等于x
的最小整数。 - 当
x
为负数时,结果是小于或等于x
的最大整数(即向0方向取整,但由于是负数,结果仍然是“向上”的)。 - 对于
x
为非整数的情况,结果总是比x
大或相等(如果x
已经是整数,则结果就是x
本身)。
2.2. floor(double x)
功能:floor
函数用于计算不大于给定数x
的最大整数,即执行向下取整操作。
参数:double x
,要取整的浮点数。
返回值:返回类型为double
,表示不大于x
的最大整数。
注意点:
- 当
x
为正数时,结果是小于或等于x
的最大整数。 - 当
x
为负数时,由于数学上的“下方”对应于整数轴上更小的数(即更大的负数),因此结果是大于或等于x
的最小整数(这与直觉上的“向下”相反,但在数学上是准确的描述)。 - 对于
x
为非整数的情况,结果总是比x
小或相等(如果x
已经是整数,则结果就是x
本身)。
2.3. fmod(double x, double y)
功能:fmod
函数用于计算两个数相除的余数,其结果的符号与被除数x
相同。
参数:
double x
,被除数。double y
,除数。
返回值:返回类型为double
,表示x
除以y
的余数。
注意点:
- 与整数除法中的取余操作不同,
fmod
的结果可能与除数y
的符号不同,但一定与被除数x
的符号相同。 - 如果
y
为0,则结果是未定义的。 fmod
函数通常用于浮点数运算,以获取除法的精确余数。
2.4. modf(double value, double *iptr)
功能:modf
函数用于将浮点数value
分解为整数部分和小数部分。
参数:
double value
,要分解的浮点数。double *iptr
,指向一个double
变量的指针,用于存储整数部分。
返回值:返回类型为double
,表示value
的小数部分。
注意点:
- 通过
iptr
指针参数,modf
函数将value
的整数部分返回给调用者。 - 返回的值是
value
的小数部分,其符号与value
相同。 - 如果
value
本身就是整数,小数部分将是0.0。 - 该函数不会修改
value
本身,而是将结果通过返回值和指针参数返回。
三、伪代码实现(概念性)
由于这些函数的实际实现依赖于底层库和编译器,以下给出的是概念性的伪代码:
function ceil(x): if x is integer: return x elif x > 0: return smallest integer greater than x else: return largest integer less than or equal to x function floor(x): if x is integer: return x elif x > 0: return largest integer less than or equal to x else: return smallest integer greater than x function fmod(x, y): result = 0 while x >= y: x = x - y result = result + 1 if x = 0, -1 if x < 0 function modf(value, iptr): iptr = truncate(value) # truncate to integer part return value - iptr # return fractional part
注意:上述fmod()
的伪代码实现仅用于说明目的,并不准确,因为fmod()
直接计算余数而不是通过循环。
四、注意事项
- 在使用这些函数时,需要包含
头文件。
- 这些函数处理的是浮点数,因此结果也是浮点数(除了
modf()
的整数部分通过指针返回)。 - 对于
ceil()
和floor()
,负数取整的结果可能与直觉不同,特别是floor()
对负数的处理。 fmod()
的结果符号与被除数相同,这与某些语言或环境中的整数取余操作不同。modf()
同时返回整数部分和小数部分,但整数部分是通过指针参数返回的。
五、示例代码
#include #include int main() { double x = 3.14; double y = 2.0; double ipart; printf(\"ceil(%f) = %f\\n\", x, ceil(x)); printf(\"floor(%f) = %f\\n\", x, floor(x)); printf(\"fmod(%f, %f) = %f\\n\", x, y, fmod(x, y)); modf(x, &ipart); printf(\"modf(%f) = integer part: %f, fractional part: %f\\n\", x, ipart, x - ipart); return 0; }
输出展示了这些函数如何工作,并验证它们的正确性。