sqrt函数需包含头文件且位于std命名空间,仅支持浮点类型,整数须显式转换;负数输入返回NaN,需预先检查或断言。

sqrt 函数必须包含 头文件
直接写 sqrt(4.0) 而不引入头文件,多数编译器会报 ‘sqrt’ was not declared in this scope。C++ 标准库中 sqrt 定义在 (不是 ),且位于 std 命名空间内。
常见写法有三种:
-
#include+ 显式调用std::sqrt(4.0) -
#include+using std::sqrt;后直接用sqrt(4.0) -
#include+using namespace std;(不推荐,污染全局命名空间)
sqrt 只接受浮点类型,整数需显式转换
sqrt 没有 int 重载版本,传入整数如 sqrt(9) 会触发隐式转换,但容易掩盖精度问题或编译警告(尤其开启 -Wconversion 时)。
更安全的做法是明确指定精度:
立即学习“C++免费学习笔记(深入)”;
- 单精度:用
sqrtf(9.0f)(中声明,参数为float) - 双精度:用
sqrt(9.0)或sqrt(9.0)(自动推导为double) - 长双精度:用
sqrtl(9.0L)
例如:int x = 16; double y = sqrt(static_cast 比 sqrt(x) 更清晰、可读性更强。
25175企业客户管理系统能够方便的录入新的信息例如新的项目、新增客户等同时能够清楚的管理一些款项结算。由于功能的强大,用户可以在该系统上发表文章后让员工递交工作计划或工作报告。加强企业工作效率,为企业提高实力。因为该系统可由客户、程序员、负责人等身份登入 所以适合广大企业使用。管理首页:{信息录入|信息修改|信息查询}1信息录入:你可以根据实际情况进行以下操作 1-1新的项目
负数输入导致 NaN,需提前检查
sqrt(-1.0) 不会抛异常,而是返回 NaN(Not a Number)。后续若用该值参与比较(如 if (y > 0))或算术运算,结果不可预测。
实际使用中应主动防御:
- 对已知非负变量,可用断言:
assert(x >= 0); double r = sqrt(x); - 对可能为负的输入,加判断:
if (x - 用
std::isnan()检查结果(需再包含)
性能上,sqrt 通常由硬件指令实现,但反复调用仍可优化
现代 CPU 的 sqrt 指令(如 x86 的 sqrtss/sqrtsd)延迟低、吞吐高,一般无需手动替换。但以下情况值得注意:
- 循环内对同一值反复调用
sqrt→ 提前计算并缓存 - 需要开方后立刻平方(如归一化向量长度)→ 考虑是否能避免开方(如用平方距离比较)
- 大量小整数开方(如 0~100)→ 查表可能更快,但注意内存与 cache 行为
没有 profile 数据前,别过早优化;但看到 for (int i...) { d = sqrt(a[i]*a[i] + b[i]*b[i]); } 这类代码,至少该确认是否真需要每次算。








