0

0

C++中的根号怎么表示_C++实现开平方运算方法

幻夢星雲

幻夢星雲

发布时间:2026-01-24 15:40:52

|

323人浏览过

|

来源于php中文网

原创

sqrt()是C++标准库开平方首选函数,需包含,注意负数返回NaN、整数需转浮点、大整数向下取整应加偏移或用二分法,避免混用pow(x,0.5)。

c++中的根号怎么表示_c++实现开平方运算方法

sqrt() 函数最直接

标准库里的 sqrt() 是开平方的首选,定义在 头文件中。它接受 doublefloatlong double,返回同类型结果。

常见错误是忘记包含头文件,或传入负数导致返回 NaN(在非调试模式下可能静默出错):

#include 
#include 

int main() { std::cout << sqrt(16.0) << "\n"; // 输出 4 std::cout << sqrt(-4.0) << "\n"; // 输出 -nan 或类似值 }

  • 对整数开方,建议显式转成浮点型,如 sqrt(static_cast(25)),避免整型截断或重载歧义
  • 若输入可能为负,先检查:if (x >= 0) result = sqrt(x); else /* 处理错误 */
  • 在嵌入式或无浮点支持环境里,sqrt() 可能不可用或极慢

整数开方用 sqrt() 后再取整要小心

想求整数 n 的“向下取整平方根”(即最大整数 k 满足 k*k ),不能简单写 static_cast(sqrt(n))

原因:浮点运算存在精度误差,比如 sqrt(1000000000000) 理论上是 1000000,但因舍入可能算成 999999.999999,向下取整就变 999999。

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

蕉点AI
蕉点AI

AI电商商品图生成平台 | 智能商品素材制作工具

下载
  • 安全做法是加一个微小偏移再取整:static_cast(sqrt(n) + 1e-10)
  • 更鲁棒的方式是用整数二分法,尤其当 n 很大(如接近 INT64_MAX)且不允许浮点误差时
  • std::sqrtint 参数不会自动调用整数版本——C++ 没有整数版 sqrt 重载

不用 怎么办:手写牛顿迭代

在裸机、freestanding 环境,或想控制精度/避免链接数学库时,可用牛顿法迭代求解 x² = a,公式为 x_{n+1} = (x_n + a/x_n) / 2

它收敛快、不依赖浮点库,但需注意初值和终止条件:

double my_sqrt(double a) {
    if (a < 0) return -1.0; // 错误处理
    if (a == 0) return 0.0;
    double x = a;
    while (true) {
        double next = (x + a / x) * 0.5;
        if (fabs(next - x) < 1e-10) return next;
        x = next;
    }
}
  • 初值选 aa > 1 ? a/2 : 1 都可,不影响收敛性
  • fabs 需要 ;若彻底禁用,可用 (next > x ? next-x : x-next)
  • 对非常小的 a(如 1e-200),除法可能溢出,应先归一化或设下限

std::sqrtstd::pow(x, 0.5) 别混用

虽然 pow(x, 0.5) 数学上等价,但它不是专为开方优化的,性能差、精度低、还可能触发域错误(如 pow(-1, 0.5) 在某些实现中抛异常而非返回 NaN)。

  • sqrt(x) 通常编译为单条 CPU 指令(如 x86 的 sqrtss),pow 是通用幂函数,至少几十倍慢
  • pow 接受任意实数指数,内部要做对数+指数运算,中间步骤放大误差
  • 即使参数是字面量 0.5,编译器也极少能把 pow(x, 0.5) 优化成 sqrt(x)

浮点开方看似简单,但精度边界、负数处理、整数截断、环境限制这四点,任一疏忽都容易埋下运行时 bug。特别是做算法题或系统编程时,别默认 sqrt 返回“精确整数”。

相关专题

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

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

574

2024.04.28

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

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

100

2025.10.23

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

765

2023.08.22

string转int
string转int

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

358

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

c++空格相关教程合集
c++空格相关教程合集

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

0

2026.01.23

热门下载

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

精品课程

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