当前位置: 首页 > news >正文

C++常用数学函数详解与代码示例

C++常用数学函数详解与代码示例

C++标准库<cmath>提供了丰富的数学函数,本文将通过代码示例讲解8类核心函数的用法。

一、绝对值函数

#include <iostream>
#include <cmath>    // 数学函数头文件
#include <cstdlib>  // 用于整数绝对值

int main() {
    // 整数绝对值
    int a = -5;
    std::cout << "abs(-5): " << std::abs(a) << "\n";  // 输出5

    // 浮点数绝对值
    double b = -3.14;
    std::cout << "fabs(-3.14): " << std::fabs(b) << "\n";  // 输出3.14

    // C++11通用绝对值(自动匹配类型)
    std::cout << "std::abs(-2.718): " << std::abs(-2.718) << "\n";  // 输出2.718
    return 0;
}

二、四舍五入函数

#include <iostream>
#include <cmath>

int main() {
    double num1 = 2.3;
    double num2 = 2.5;
    double num3 = -2.5;

    std::cout << "round(2.3): " << std::round(num1) << "\n";   // 2
    std::cout << "round(2.5): " << std::round(num2) << "\n";   // 3(向远离0方向舍入)
    std::cout << "round(-2.5): " << std::round(num3) << "\n";  // -3
    return 0;
}

三、取整函数

#include <iostream>
#include <cmath>

int main() {
    double x = 2.7;
    double y = 2.3;
    double z = -2.7;

    // 下取整(地板函数)
    std::cout << "floor(2.7): " << std::floor(x) << "\n";   // 2.0
    std::cout << "floor(-2.7): " << std::floor(z) << "\n";  // -3.0

    // 上取整(天花板函数)
    std::cout << "ceil(2.3): " << std::ceil(y) << "\n";    // 3.0
    std::cout << "ceil(-2.7): " << std::ceil(z) << "\n";   // -2.0

    // 强制转换为整数
    int result = static_cast<int>(std::floor(3.99));  // 得到3
    return 0;
}

四、平方根函数

#include <iostream>
#include <cmath>

int main() {
    double val1 = 16.0;
    double val2 = -4.0;

    std::cout << "sqrt(16): " << std::sqrt(val1) << "\n";  // 4.0
    std::cout << "sqrt(-4): " << std::sqrt(val2) << "\n";  // 输出nan(非数字)
    
    // 错误处理示例
    if(std::isnan(std::sqrt(val2))) {
        std::cout << "Invalid input for sqrt!\n";
    }
    return 0;
}

五、三角函数

#include <iostream>
#include <cmath>

int main() {
    const double PI = 3.141592653589793;

    // 计算60度的正弦值(需转换为弧度)
    double angle = 60.0 * PI / 180.0;
    std::cout << "sin(60°): " << std::sin(angle) << "\n";  // ≈0.866025

    // 反三角函数示例
    double asin_val = std::asin(0.5) * 180 / PI;  // 结果转换为角度
    std::cout << "arcsin(0.5): " << asin_val << "°\n";  // 30°

    // 使用atan2计算方位角
    std::cout << "atan2(1,1): " << std::atan2(1,1) << " radians\n";  // π/4
    return 0;
}

六、对数函数

#include <iostream>
#include <cmath>

int main() {
    // 自然对数(以e为底)
    std::cout << "ln(e): " << std::log(M_E) << "\n";  // 1.0

    // 常用对数(以10为底)
    std::cout << "log10(1000): " << std::log10(1000) << "\n";  // 3.0

    // 二进对数(C++11)
    std::cout << "log2(256): " << std::log2(256) << "\n";  // 8.0

    // 错误示例
    std::cout << "log(-1): " << std::log(-1) << "\n";  // 输出nan
    return 0;
}

七、指数函数

#include <iostream>
#include <cmath>

int main() {
    // 自然指数函数
    std::cout << "exp(1): " << std::exp(1) << "\n";  // ≈2.71828

    // 幂函数
    std::cout << "pow(2,3): " << std::pow(2,3) << "\n";    // 8.0
    std::cout << "pow(8,1/3.0): " << std::pow(8,1/3.0) << "\n"; // 2.0

    // 负数幂运算
    std::cout << "pow(-2,3): " << std::pow(-2,3) << "\n";  // -8.0
    std::cout << "pow(-2,2.5): " << std::pow(-2,2.5) << "\n"; // nan
    return 0;
}

八、综合应用示例

#include <iostream>
#include <cmath>

// 计算二维空间两点距离
double distance(double x1, double y1, double x2, double y2) {
    return std::hypot(x2-x1, y2-y1);  // 更安全的计算方式
}

int main() {
    // 综合计算示例
    double num = 3.7;
    std::cout << "综合运算:\n"
              << "原始值: " << num << "\n"
              << "绝对值: " << std::abs(num) << "\n"
              << "平方根: " << std::sqrt(num) << "\n"
              << "四舍五入: " << std::round(num) << "\n"
              << "下取整: " << std::floor(num) << "\n"
              << "上取整: " << std::ceil(num) << "\n"
              << "正弦值: " << std::sin(num) << "\n"
              << "自然对数: " << std::log(num) << "\n"
              << "e的幂次: " << std::exp(num) << "\n";

    std::cout << "两点距离: " << distance(0,0,3,4) << "\n";  // 输出5.0
    return 0;
}

关键注意事项

  1. 类型匹配:注意整数和浮点函数的区别(如abs()fabs()
  2. 错误处理:负数平方根返回nan,对数函数需要正数输入
  3. 单位转换:三角函数使用弧度制,需自行转换角度
  4. 返回值类型:大部分函数返回double类型
  5. C++版本:部分函数(如round())需要C++11或更高标准

编译时建议使用以下命令:

g++ -std=c++11 -o math_demo math_demo.cpp

通过掌握这些核心数学函数,开发者可以高效实现各种数值计算需求。建议结合具体场景选择最合适的函数,并注意处理边界条件和异常输入。

相关文章:

  • C++ ——static关键字
  • ubuntu20.04安装nccl2.16.5
  • 物联网平台建设方案
  • 直线模组在搬运过程中需要注意什么?
  • 网络安全扫描--基础篇
  • Flowith.io 初探:DeepSeek-R1免费用,用画布式 AI 提升效率和创意
  • Deepseek部署-本地windows非系统C盘 -可视化 -4060甜品卡
  • Pikachu靶场-SSRF漏洞
  • DeepSeek视角下学术论文创新点探索干货分享!
  • 详述发票二维码与python解析技术
  • 链表和list
  • 情书网源码 情书大全帝国cms7.5模板
  • Vue 记录用户进入页面的时间、离开页面的时间并计算时长
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑤】
  • 网工项目理论1.7 设备选型
  • 嵌入式 Linux 设备树:为什么需要设备树?
  • 基于单片机ht7038 demo
  • 演绎推理及其与数学的关系介绍
  • Python大数据可视化:基于Python对B站热门视频的数据分析与研究_flask+hive+spider
  • 【Scrapy】Scrapy教程4——命令行工具
  • 如何做网站拉动条/网站注册流程
  • 网站建设需要租用什么/大连seo按天付费
  • 珠海华中建设工程有限公司网站/百度推广代理公司广州
  • wordpress视频商店/寻找郑州网站优化公司
  • 郑州教育培训机构网站建设/国内手机怎么上google浏览器
  • 用ps做网站首页顶部图片/seo黑帽技术