0

0

c++中如何计算平方根_c++ sqrt函数的使用方法【实例】

冰火之心

冰火之心

发布时间:2026-01-21 12:12:09

|

813人浏览过

|

来源于php中文网

原创

必须包含头文件并使用std::sqrt;支持多类型重载,负数返回NaN,大整数开方需防浮点误差,推荐整数二分或验证r*r==n。

c++中如何计算平方根_c++ sqrt函数的使用方法【实例】

sqrt 函数必须包含 头文件

直接写 sqrt(4.0) 会编译失败,错误通常是 ‘sqrt’ was not declared in this scope。C++ 标准库把数学函数放在 (不是 ),且不自动引入全局命名空间。

正确做法是:

#include 
#include 

int main() {
    double x = 16.0;
    std::cout << std::sqrt(x) << "\n"; // 推荐显式用 std::sqrt
    return 0;
}
  • std::sqrt 是标准写法;用 using namespace std; 虽能省略 std::,但易引发命名冲突,不推荐
  • 中的 sqrt 有多个重载:支持 floatdoublelong double,传入整数(如 int)会隐式转为 double,但结果仍是 double
  • 传入负数(如 sqrt(-1.0))在大多数平台返回 NaN,不会抛异常,也不报错——需手动检查输入

整数平方根要小心类型和精度问题

如果目标是求整数 n 的“向下取整平方根”(比如 sqrt(10) → 3),不能只靠 static_cast(std::sqrt(n)),因为浮点计算可能有舍入误差。

例如:std::sqrt(25) + 1e-15 可能被截断为 5,也可能因浮点误差变成 5.000000000000001,再转 int 还是 5;但对大整数(如接近 LLONG_MAX 的完全平方数),误差可能让结果偏小 1。

68爱写
68爱写

专业高质量AI4.0论文写作平台,免费生成大纲,支持无线改稿

下载

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

  • 安全做法:先转 double 计算,再向零取整后微调
  • 更可靠的是用整数二分法(尤其当 nlong long 且不能转 double 精确表示时)
  • 若只是判断是否为完全平方数,可计算 r = static_cast(std::sqrt(n));,再验证 r*r == n || (r+1)*(r+1) == n

替代方案:std::sqrt 不是唯一选择

某些场景下 std::sqrt 并非最优。比如在嵌入式或性能敏感代码中,编译器可能无法内联或优化掉函数调用开销;或者需要处理向量数据。

  • 启用编译器优化(如 -O2)后,std::sqrt 通常会被内联并映射到 CPU 的 sqrtss/sqrtsd 指令,效率很高
  • 若需批量计算,考虑用 SIMD(如 Intel SSE/AVX 的 _mm_sqrt_ps),但需手动向量化,且丧失可移植性
  • C++20 引入了 std::numbers::sqrt2 等常量,但没提供新 sqrt 实现;仍依赖
  • 自定义牛顿迭代仅在特殊需求(如固定点、无浮点单元)下才值得做,日常开发没必要

常见错误:混用 C 风格头文件或忽略返回值类型

错误写法包括:#include (C 头文件,不保证 std:: 命名空间)、int y = sqrt(9);(未声明、未包含、未指定命名空间)、sqrt(9.0f) 返回 double 却赋给 float 变量导致隐式降精度。

  • 始终用 #include ,而非
  • 避免裸调用 sqrt;明确写 std::sqrt
  • 注意返回值类型:传 floatfloat,传 doubledouble,传 long doublelong double;不要假设都是 double
  • 调试时可用 std::isnan()std::isfinite() 检查结果是否有效
实际项目里最容易漏掉的是负数输入检查和大整数转浮点的精度丢失,这两处一出问题就很难定位。

相关专题

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

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

569

2024.04.28

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

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

99

2025.10.23

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

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

1468

2023.10.24

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

338

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

542

2024.08.29

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

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

53

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

197

2025.08.29

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

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

53

2025.08.29

Java编译相关教程合集
Java编译相关教程合集

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

5

2026.01.21

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

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

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