0

0

C++ 怎么计算平方根 C++ sqrt函数使用与参数类型限制【数学库】

裘德小鎮的故事

裘德小鎮的故事

发布时间:2026-01-29 11:17:44

|

398人浏览过

|

来源于php中文网

原创

sqrt函数需包含头文件,否则编译报错;支持float/double/long double重载,整数会隐式转double,负数返回NaN;无整数开方专用版本,边界值强转易出错,推荐校正法;C++20起支持constexpr浮点开方。

c++ 怎么计算平方根 c++ sqrt函数使用与参数类型限制【数学库】

sqrt 函数必须包含 头文件

不加这行,编译器会报 undefined reference to sqrt'sqrt' was not declared in this scope。C++ 标准库把数学函数全收在 里,不是 (那是 C 的头文件,虽部分编译器兼容但行为不可靠)。

常见错误:用 using namespace std; 后仍报错——问题不在命名空间,而在没包含头文件。

正确写法:

#include 
#include 

int main() { double x = 16.0; std::cout << std::sqrt(x) << "\n"; // 输出 4 }

sqrt 的重载版本只支持 floatdoublelong double

传整数(如 intlong long)进去不会报错,但会隐式转成 double 调用;可一旦传负数,结果就是 NaN(非数),且不抛异常。

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

  • sqrt(-4) → 返回 NaN,输出可能显示为 -nannan
  • sqrt(25LL) → 自动转为 double,结果正确,但注意精度损失(long long 超过 2⁵³ 后无法精确表示)
  • 没有 sqrt(int) 专属重载,所以别指望它对整数做整数开方(比如返回 int 类型的 4 而非 4.0)

需要整数平方根?别直接用 sqrt 强转

(int)sqrt(n) 看似简单,但在边界值上极易出错。例如 n = 2147395600(= 46340²),某些平台下 sqrt 返回略小于 46340.0 的值,强转后变成 46339。

更可靠的做法是用二分查找或 std::sqrt 后手动校正:

知了zKnown
知了zKnown

知了zKnown:致力于信息降噪 / 阅读提效的个人知识助手。

下载
long long isqrt(long long n) {
    if (n < 0) return -1;
    long long r = std::sqrt(n);
    while (r * r > n) r--;
    while ((r + 1) * (r + 1) <= n) r++;
    return r;
}

注意:该函数适用于 n ≤ 2⁶³−1,但乘法 r * r 可能溢出,生产环境建议用 n / r >= r 替代 r * r 判断。

性能与 constexpr 支持:C++20 起 std::sqrtconstexpr

在编译期能确定值时(如字面量、consteval 上下文),C++20 允许 std::sqrt(4.0) 直接算出 2.0 —— 但仅限浮点类型,且输入不能是负数(否则编译失败)。

典型误用:

  • constexpr double x = std::sqrt(-1.0);编译错误,不是运行时 NaN
  • constexpr int n = 25; constexpr double s = std::sqrt(n); → 合法,n 隐式转 double 后参与常量求值

老标准(C++17 及以前)中 sqrt 不是 constexpr,若需编译期整数开方,只能手写 constexpr 二分或查表。

实际用 sqrt 时最易忽略的是负输入静默返回 NaN,而不是报错或抛异常;调试时看到输出是 nan 却没检查源数据是否为负,会浪费大量时间。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

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

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

579

2024.04.28

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

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

102

2025.10.23

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

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

1501

2023.10.24

string转int
string转int

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

463

2023.08.02

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

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

544

2024.08.29

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

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

93

2025.08.29

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

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

200

2025.08.29

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

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

93

2025.08.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

11

2026.01.29

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
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号