C++中的 sqrt、sqrtl 和 sqrtf

简介: C++库中有多种函数可用于计算数字的平方根。最突出的是使用 sqrt。它以双重作为论据。 header 定义了另外两个内置函数,用于计算一个数字(sqrt 除外)的平方根,该数字的参数类型为float和long double。因此,用于计算C++平方根的所有函数都是:

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情


C++库中有多种函数可用于计算数字的平方根。最突出的是使用 sqrt。它以双重作为论据。  header 定义了另外两个内置函数,用于计算一个数字(sqrt 除外)的平方根,该数字的参数类型为floatlong double。因此,用于计算C++平方根的所有函数都是:


39.png

下面详细讨论了这些功能:


A) double sqrt(double arg): 它返回一个数字的平方根以键入 double。

语法:

double sqrt(double arg)
复制代码
// CPP代码说明sqrt函数的使用
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
// 驱动程序代码
int main()
{
  double val1 = 225.0;
  double val2 = 300.0;
  cout << fixed << setprecision(12) << sqrt(val1) << endl;
  cout << fixed << setprecision(12) << sqrt(val2) << endl;
  return (0);
}
复制代码

输出

15.000000000000
17.320508075689
复制代码

时间复杂度:O(√n)


辅助空间:O(1)


与此函数关联的错误和异常:


1. 必须给出参数,否则它会给出一个错误,没有匹配函数来调用 'sqrt()',如下所示,

// CPP程序演示双sqrt()中的错误
#include <cmath>
#include <iostream>
using namespace std;
// 驱动程序代码
int main()
{
  double answer;
  answer = sqrt();
  cout << "Square root of " << a << " is " << answer
    << endl;
  return 0;
}
复制代码


输出

prog.cpp:9:19: error: no matching function for call to ‘sqrt()’
     answer = sqrt();
复制代码


时间复杂度:O(√n)


辅助空间:O(1)


2. 如果我们在参数域中传递负值,则会发生错误,输出将是 -a 的平方根,即 -nan。

// CPP程序演示双sqrt()中的错误
#include <cmath>
#include <iostream>
using namespace std;
// 驱动程序代码
int main()
{
  double a = -2, answer;
  answer = sqrt(a);
  cout << "Square root of " << a << " is " << answer
    << endl;
  return 0;
}
复制代码


输出:

Square root of -2 is -nan
复制代码


时间复杂度:O(√n)


辅助空间:O(1)


B) 浮点数 sqrtf(浮点参数) :它返回一个数字的平方根以键入浮点数。


语法:

float sqrtf(float arg)
复制代码
// CPP代码说明sqrtf函数的使用
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
  float val1 = 225.0;
  float val2 = 300.0;
  cout << fixed << setprecision(12) << sqrtf(val1)
    << endl;
  cout << fixed << setprecision(12) << sqrtf(val2)
    << endl;
  return (0);
}
复制代码


输出


15.000000000000
17.320508956909
复制代码


时间复杂度:O(√n)


辅助空间:O(1)


C) 长双精度 sqrtl(长双参数) :它返回数字的平方根以更精确地键入长双精度。

sqrtl 函数的优点: 处理 10 阶整数时18,使用sqrt函数计算其平方根可能会由于精度错误而给出不正确的答案,因为编程语言中的默认函数适用于浮点数/双精度数。但这总会给出准确的答案。


语法:


long double sqrtl(long double arg)
复制代码


下图显示了使用 sqrt 和 sqrtl 处理长整数时的确切区别,


1) 使用 sqrt 函数:

// 用于说明sqrt函数错误的CPP代码
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
  long long int val1 = 1000000000000000000;
  long long int val2 = 999999999999999999;
  cout << fixed << setprecision(12) << sqrt(val1) << endl;
  cout << fixed << setprecision(12) << sqrt(val2) << endl;
  return (0);
}
复制代码


输出

1000000000.000000000000
1000000000.000000000000
复制代码


时间复杂度:O(√n)


辅助空间:O(1)


2)使用sqrtl函数:

// 用于说明sqrtl函数正确性的CPP代码
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
  long long int val1 = 1000000000000000000;
  long long int val2 = 999999999999999999;
  cout << fixed << setprecision(12) << sqrtl(val1)
    << endl;
  cout << fixed << setprecision(12) << sqrtl(val2)
    << endl;
  return (0);
}
复制代码


输出

1000000000.000000000000
999999999.999999999476
复制代码


时间复杂度:O(√n)


辅助空间:O(1)


如果大家发现什么不正确的地方,或者你想分享有关上述的更多内容,可以在下面评论。



目录
相关文章
|
监控 安全 算法
悬垂引用与临时对象在C++中的深入探讨: 风险、原因与预防策略
悬垂引用与临时对象在C++中的深入探讨: 风险、原因与预防策略
399 3
|
12月前
|
安全 Java 测试技术
Java“AccessControlException”解决
Java中的“AccessControlException”通常发生在尝试访问受限资源时,如文件或网络。解决方法包括:确保所需权限已授予,检查安全策略配置,使用doPrivileged块执行敏感操作。调整策略文件或代码以匹配实际需求。
591 1
|
监控 安全 Linux
IT知识百科:什么是黑洞路由?
【7月更文挑战第10天】
798 5
IT知识百科:什么是黑洞路由?
|
缓存 安全
预检请求(Preflight Request)
预检请求(Preflight Request)
599 3
|
Java Android开发
Android 保存资源图片到相册最新写法适用于Android10.0及以上
Android 保存资源图片到相册最新写法适用于Android10.0及以上
1052 0
|
安全 程序员 编译器
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误(一)
【C++ 异常 】深入了解C++ 异常机制中的 terminate()处理 避免不必要的错误
976 1
|
负载均衡 网络架构
IP地址:是给主机配置的,还是给网卡配置的?🤔
在探索网络的奥秘时,我们经常会遇到一个看似简单但又复杂的问题:IP地址到底是配置在主机上,还是配置在网卡上?为什么我们通常说的是“主机IP地址”呢?让我们一起深入探讨。
IP地址:是给主机配置的,还是给网卡配置的?🤔
|
Java 开发者 存储
数组初始化的几种方法及其在不同场景下的性能比较
数组初始化的几种方法及其在不同场景下的性能比较
|
前端开发 JavaScript Java
获取Servlet中的request.getContextPath方法详解
获取Servlet中的request.getContextPath方法详解
|
缓存 算法 开发者
【Conan 入门教程 】了解 Conan2.1 中内置部署策略
【Conan 入门教程 】了解 Conan2.1 中内置部署策略
255 1