ie6网站模板,wordpress utc时间差12个小时,如何查询网站哪个公司做的,搭建什么平台博客主页#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 #x1f4af;前言#x1f4af;ceil 和 floor 函数的基础介绍1. ceil 函数定义与功能示例代码输出结果功能分析使用场景 2. floor 函数定义与功能示例代码输出结果功能分析使用场景 #x1f4af;自行实现… 博客主页 [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 前言ceil 和 floor 函数的基础介绍1. ceil 函数定义与功能示例代码输出结果功能分析使用场景 2. floor 函数定义与功能示例代码输出结果功能分析使用场景 自行实现 ceil 和 floor 函数1. 自行实现 ceil 函数代码实现示例输入输出优化 2. 自行实现 floor 函数代码实现示例输入输出 (int) 类型转换的局限性具体原因示例 小结 前言
在日常的编程任务中处理浮点数的向上取整和向下取整是一个非常常见的需求。C 提供了强大的数学库 cmath其中包含了 ceil 和 floor 函数分别用于实现向上取整和向下取整的功能。然而有些场景可能需要我们自行实现这些功能以便深入理解其底层逻辑或者针对某些特殊需求进行优化和扩展。 本文将通过代码实例详细分析 ceil 和 floor 的功能、实现思路及其扩展包括自行实现的方式。同时针对读者可能会遇到的问题比如 (int) 类型转换的局限性我们也会进行详细说明并提供相应的解决方案。 C 参考手册 ceil 和 floor 函数的基础介绍
1. ceil 函数
定义与功能
ceil向上取整是一个数学函数它的作用是将一个浮点数向上取整为大于等于它的最小整数。
示例代码
以下是使用标准库 ceil 函数的代码示例
#include iostream
#include cmath
using namespace std;int main()
{cout ceil(2.3) endl; // 输出: 3cout ceil(3.8) endl; // 输出: 4cout ceil(-2.3) endl; // 输出: -2cout ceil(-3.8) endl; // 输出: -3return 0;
}输出结果
3
4
-2
-3功能分析
对正数ceil 会向上取整到最近的更大整数。例如2.3 向上取整为 33.8 向上取整为 4。对负数ceil 会向上取整到更接近零的整数。例如-2.3 向上取整为 -2-3.8 向上取整为 -3。
使用场景
ceil 常用于需要确保数值“至少达到某个值”的场景比如
计算物品的最少包装数量。计算天数时向上取整到完整的天数。 2. floor 函数
定义与功能
floor向下取整是一个数学函数它的作用是将一个浮点数向下取整为小于等于它的最大整数。
示例代码
以下是使用标准库 floor 函数的代码示例
#include iostream
#include cmath
using namespace std;int main()
{cout floor(2.3) endl; // 输出: 2cout floor(3.8) endl; // 输出: 3cout floor(-2.3) endl; // 输出: -3cout floor(-3.8) endl; // 输出: -4return 0;
}输出结果
2
3
-3
-4功能分析
对正数floor 会向下取整到最近的更小整数。例如2.3 向下取整为 23.8 向下取整为 3。对负数floor 会向下取整到更远离零的整数。例如-2.3 向下取整为 -3-3.8 向下取整为 -4。
使用场景
floor 常用于需要确保数值“不超过某个值”的场景比如
分配预算确保不超出限额。对数据进行分组向下取整到某个区间。 自行实现 ceil 和 floor 函数
1. 自行实现 ceil 函数
自行实现 ceil 的核心在于判断浮点数的小数部分是否大于 0。如果大于 0则将整数部分加 1否则直接返回整数部分。
代码实现
#include iostream
using namespace std;int main() {double d 0; // 声明一个双精度浮点数并初始化为0cin d; // 输入一个浮点数int q (int)d; // 提取浮点数的整数部分double p d - q; // 计算浮点数的小数部分if (p 0.0) // 如果小数部分大于 0cout (int)(d 1); // 输出向上取整后的整数elsecout (int)d; // 否则直接输出整数部分return 0;
}示例输入输出 输入3.14 整数部分3小数部分0.14输出4 输入5.00 整数部分5小数部分0输出5 输入-2.7 整数部分-2小数部分-0.7输出-2
优化
为了更清晰地表达逻辑我们可以将代码封装为函数
int myCeil(double d) {int q (int)d;if (d - q 0.0)return q 1;return q;
}2. 自行实现 floor 函数
自行实现 floor 的核心在于处理负数的特殊情况。如果是负数且存在小数部分则需要向更小的整数方向取整。
代码实现
#include iostream
using namespace std;int main() {double d 0;cin d;if (d 0) {cout (int)d endl; // 正数直接取整数部分} else {if (d (int)d) {cout (int)d endl; // 如果是负整数直接输出} else {cout (int)(d - 1) endl; // 负数向下取整}}return 0;
}示例输入输出
输入3.14 输出3 输入-3.14 输出-4 (int) 类型转换的局限性
在讨论 ceil 和 floor 的实现时(int) 强制类型转换是一个常见的手段但它并不完全等同于 ceil 或 floor特别是在处理负数时。
具体原因
(int) 强制类型转换会直接截断小数部分舍弃小数部分相当于向零方向取整。对正数效果等同于 floor。对负数效果既不等同于 ceil也不等同于 floor。
示例
输入值(int) 转换ceil 结果floor 结果3.14343-3.14-3-3-4 小结
ceil 和 floor 是 C 中处理浮点数取整的两个重要函数其核心在于处理小数部分的舍入方式。(int) 强制转换可以用于简单的取整但在负数场景下需要特别注意。自行实现 ceil 和 floor 的过程能够帮助我们更好地理解这两个函数的逻辑同时也能根据实际需求进行定制。
建议在实际开发中优先使用标准库函数 ceil 和 floor它们经过高度优化并且能够处理更多边界情况。