0

0

c++如何计算正弦余弦值_c++ math库常用函数【入门】

穿越時空

穿越時空

发布时间:2026-02-10 14:18:11

|

895人浏览过

|

来源于php中文网

原创

C++中必须用而非,sin/cos参数为弧度,需std::前缀;M_PI非标准,应自定义PI;大数值需模运算防精度丢失;优先用std::sincos批量计算。

c++如何计算正弦余弦值_c++ math库常用函数【入门】

sin 和 cos 函数必须包含 ,不是

在 C++ 中调用 sincos 等数学函数,头文件必须是 (C++ 标准写法),而非 C 风格的 。后者虽在部分编译器下能用,但不保证命名空间隔离——sin 可能未声明在 std 命名空间中,导致编译失败或隐式依赖全局作用域。

正确写法:

#include 
#include 

int main() { double x = 1.57; // 弧度制 std::cout << std::sin(x) << "\n"; // 必须加 std:: 前缀 std::cout << std::cos(x) << "\n"; }

  • 不加 std:: 且没写 using namespace std; → 编译错误:‘sin’ was not declared in this scope
  • 用了 + std::sin → 可能报错,因为该头文件通常不向 std 注入符号
  • 参数单位永远是弧度,不是角度 —— 这是新手最常踩的坑

角度转弧度:别硬背 π/180,用 M_PI 要小心

M_PI 不是 C++ 标准常量,是否可用取决于编译器和宏定义。GCC/Clang 默认不启用,需在包含 前定义:

#define _USE_MATH_DEFINES
#include 

但更稳妥、跨平台的方式是自己定义:

立即学习C++免费学习笔记(深入)”;

constexpr double PI = 3.14159265358979323846;
double angle_deg = 90.0;
double angle_rad = angle_deg * PI / 180.0;
double s = std::sin(angle_rad); // ≈ 1.0
  • 直接写 90 * M_PI / 180 而没开宏 → M_PI 未声明,编译失败
  • float 类型传参给 std::sin → 实际调用的是 double 版本,会隐式转换;如需单精度,用 std::sinf
  • 角度值很大时(如 1e9 度),先取模再转弧度,否则精度严重丢失

sin/cos 的输入范围不影响结果,但大数值会损失精度

std::sinstd::cos 对任意实数都有定义,不会因输入过大而崩溃或抛异常。但 IEEE 754 double 仅约 15–17 位有效数字,当输入值远大于 2*PI(比如 1e15),其小数部分(即等效相位)已无法被精确表示,导致结果完全不可靠。

Nanonets
Nanonets

基于AI的自学习OCR文档处理,自动捕获文档数据

下载
  • 例如:std::sin(1e15) 返回值基本是噪声,不是数学意义上的正弦值
  • 若你处理的是周期性信号且输入可能极大,应手动做模运算:fmod(x, 2*PI),注意 fmod 本身也有精度限制,对超大数慎用
  • 无特殊需求时,保持输入在 [-4*PI, 4*PI] 内可获得较好精度

性能敏感场景:查表 or intrinsics?普通用途别过早优化

标准库的 sin/cos 经过高度优化,在多数场景下比手写查表更快更准。只有在满足以下全部条件时才考虑替代方案:

  • 输入是离散、有限、且重复出现的(如动画帧固定角度)
  • 精度要求不高(比如只要 0.01 误差内)
  • 已确认 math 函数成为性能瓶颈(用 profiler 实测)

否则强行用查表反而引入 cache miss、分支预测失败等问题。AVX/SSE intrinsics(如 _mm_sin_ps)属于非标扩展,需额外依赖 Intel SVML 或其他数学库,可移植性差。

真正容易被忽略的是:频繁调用 sincos 时,若两者共用同一角度,优先用 std::sincos(POSIX 扩展,非 ISO C++ 标准,但 GCC/Clang 在 中支持):

double s, c;
std::sincos(x, &s, &c); // 一次计算 sin 和 cos,比分别调用快约 1.3–1.5×

不过要注意:它不是所有平台都可用,Windows MSVC 默认不提供,需换用 sin+cos 分开调用。

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

582

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

104

2025.10.23

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1541

2023.10.24

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

193

2025.08.29

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

104

2025.10.23

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1000

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1143

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

817

2023.08.01

包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法
包子漫画网页版入口与全集阅读指南_正版免费漫画快速访问方法

本专题汇总了包子漫画官网和网页版入口,提供最新章节抢先看方法、正版免费阅读指南,以及稳定访问方式,帮助用户快速直达包子漫画页面,无广告畅享全集漫画内容。

18

2026.02.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 9万人学习

C 教程
C 教程

共75课时 | 4.6万人学习

C++教程
C++教程

共115课时 | 16.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号