C++11标准模板(STL)- 常用数学函数 - 计算平方根 (√x)(std::sqrt, std::sqrtf, std::sqrtl)

ops/2024/10/20 8:38:53/

常用数学函数

计算平方根 (√x)

std::sqrt, 
std::sqrtf, 
std::sqrtl

float       sqrtf( float arg );

(1)(C99 起)

double      sqrt( double arg );

(2)

long double sqrtl( long double arg );

(3)(C99 起)

定义于头文件 <tgmath.h>

#define sqrt( arg )

(4)(C99 起)

1-3) 计算 arg 的平方根。

4) 泛型宏:若 arg 拥有 long double 类型,则调用 sqrtl 。否则,若 arg 拥有整数类型或 double 类型,则调用 sqrt 。否则调用 sqrtf 。若 arg 为复数或虚数,则宏调用对应复数函数( csqrtf 、 csqrt 、 csqrtl )。

参数

arg-浮点值

返回值

若不出现错误,则返回 arg 的平方根( √arg )。

若出现定义域错误,则返回实现定义值(支持的平台上为 NaN )。

若出现下溢所致的值域错误,则返回(舍入后的)正确结果。

错误处理

报告 math_errhandling 中指定的错误。

arg 小于零则出现定义域错误。

若实现支持 IEEE 浮点算术( IEC 60559 ),则

  • 若参数小于 -0 ,则引发 FE_INVALID 并返回 NaN 。
  • 若参数为 +∞ 或 ±0 ,则返回不修改的参数。
  • 若参数为 NaN ,则返回 NaN 。

注意

IEEE 标准要求 sqrt 为准确。其他要求为准确的运算只有算术运算符和函数 fma 。舍入到返回类型后(用默认舍入模式), sqrt 的结果与无限精度结果不可辨别。换言之,误差小于 0.5 ulp 。其他函数,包含 pow ,不受如此的制约。

调用示例

#include <iostream>
#include <cstdlib>
#include <typeinfo>
#include <cinttypes>
#include <cmath>int main()
{//1-3) 计算 arg 的平方根。const float fNumber = 0.1314;std::cout << "typeid(float).name():   " << typeid(float).name() << std::endl;for (int i = 0; i < 1000; i += 100){std::cout << "std::sqrt(" << fNumber + i << "):   "<< std::sqrt(fNumber + i) << std::endl;}std::cout << std::endl;for (int i = 0; i < 1000; i += 100){std::cout << "std::sqrt(" << -fNumber - i << "):   "<< std::sqrt(-fNumber - i) << std::endl;}std::cout << std::endl;const double dNumber = 0.01314;std::cout << "typeid(double).name():   " << typeid(double).name() << std::endl;for (int i = 0; i < 1000; i += 100){std::cout << "std::sqrt(" << dNumber + i << "):   "<< std::sqrt(dNumber + i) << std::endl;}std::cout << std::endl;for (int i = 0; i < 1000; i += 100){std::cout << "std::sqrt(" << -dNumber - i << "):   "<< std::sqrt(-dNumber - i) << std::endl;}std::cout << std::endl;const long double ldNumber = 0.001314;std::cout << "typeid(long double).name():   " << typeid(long double).name() << std::endl;for (int i = 0; i < 1000; i += 100){std::cout << "std::sqrt(" << ldNumber + i << "):   "<< std::sqrt(ldNumber + i) << std::endl;}std::cout << std::endl;for (int i = 0; i < 1000; i += 100){std::cout << "std::sqrt(" << -ldNumber - i << "):   "<< std::sqrt(-ldNumber - i) << std::endl;}std::cout << std::endl;return 0;
}

输出

typeid(float).name():   f
std::sqrt(0.1314):   0.362491
std::sqrt(100.131):   10.0066
std::sqrt(200.131):   14.1468
std::sqrt(300.131):   17.3243
std::sqrt(400.131):   20.0033
std::sqrt(500.131):   22.3636
std::sqrt(600.131):   24.4976
std::sqrt(700.131):   26.46
std::sqrt(800.131):   28.2866
std::sqrt(900.131):   30.0022std::sqrt(-0.1314):   nan
std::sqrt(-100.131):   nan
std::sqrt(-200.131):   nan
std::sqrt(-300.131):   nan
std::sqrt(-400.131):   nan
std::sqrt(-500.131):   nan
std::sqrt(-600.131):   nan
std::sqrt(-700.131):   nan
std::sqrt(-800.131):   nan
std::sqrt(-900.131):   nantypeid(double).name():   d
std::sqrt(0.01314):   0.11463
std::sqrt(100.013):   10.0007
std::sqrt(200.013):   14.1426
std::sqrt(300.013):   17.3209
std::sqrt(400.013):   20.0003
std::sqrt(500.013):   22.361
std::sqrt(600.013):   24.4952
std::sqrt(700.013):   26.4578
std::sqrt(800.013):   28.2845
std::sqrt(900.013):   30.0002std::sqrt(-0.01314):   nan
std::sqrt(-100.013):   nan
std::sqrt(-200.013):   nan
std::sqrt(-300.013):   nan
std::sqrt(-400.013):   nan
std::sqrt(-500.013):   nan
std::sqrt(-600.013):   nan
std::sqrt(-700.013):   nan
std::sqrt(-800.013):   nan
std::sqrt(-900.013):   nantypeid(long double).name():   e
std::sqrt(0.001314):   0.0362491
std::sqrt(100.001):   10.0001
std::sqrt(200.001):   14.1422
std::sqrt(300.001):   17.3205
std::sqrt(400.001):   20
std::sqrt(500.001):   22.3607
std::sqrt(600.001):   24.4949
std::sqrt(700.001):   26.4575
std::sqrt(800.001):   28.2843
std::sqrt(900.001):   30std::sqrt(-0.001314):   nan
std::sqrt(-100.001):   nan
std::sqrt(-200.001):   nan
std::sqrt(-300.001):   nan
std::sqrt(-400.001):   nan
std::sqrt(-500.001):   nan
std::sqrt(-600.001):   nan
std::sqrt(-700.001):   nan
std::sqrt(-800.001):   nan
std::sqrt(-900.001):   nan


http://www.ppmy.cn/ops/118406.html

相关文章

mysql-锁

表锁-读写锁-偏读-共享锁 讨论mysql的读写锁&#xff0c;先讨论读锁&#xff0c;有 ab 两个线程&#xff0c;有 AB两张表&#xff0c;讨论在 a 对 A 加了读锁后&#xff0c;a 对A读写&#xff0c;a对B读写&#xff0c;b 对A读写&#xff0c;b对B读写的情况 读锁&#xff08;共…

深刻理解Redis集群(上):RDB快照和AOF日志

RDB快照 save同步阻塞 客户端 服务端 .conf配置文件 # The filename where to dump the DB dbfilename dump.rdb# rdb-del-sync-files是Redis配置文件中的一个选项&#xff0c;它的作用是在主节点上执行BGSAVE或AOF持久化操作时&#xff0c;删除同步锁文件&#xff0c;以释放磁…

【HTTPS】中间人攻击和证书的验证

中间人攻击 服务器可以创建出一堆公钥和私钥&#xff0c;黑客也可以按照同样的方式&#xff0c;创建一对公钥和私钥&#xff0c;冒充自己是服务器&#xff08;搅屎棍&#xff09; 黑客自己也能生成一对公钥和私钥。生成公钥和私钥的算法是开放的&#xff0c;服务器能生产&…

3. 轴指令(omron 机器自动化控制器)——>MC_MoveVelocity

机器自动化控制器——第三章 轴指令 6 MC_MoveVelocity变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶重启运动指令▶多重启动运动指令▶异常 动作示例▶动作示例▶梯形图▶结构文本(ST) MC_MoveVelocity 使用伺服驱动器的位置控制模式&#xff0c;进行…

如何使用ssm实现北关村基本办公管理系统的设计与实现

TOC ssm721北关村基本办公管理系统的设计与实现jsp 第一章 绪论 1.1 选题背景 目前整个社会发展的速度&#xff0c;严重依赖于互联网&#xff0c;如果没有了互联网的存在&#xff0c;市场可能会一蹶不振&#xff0c;严重影响经济的发展水平&#xff0c;影响人们的生活质量。…

PCB传输线的长短问题

对于模拟信号&#xff0c;当L<波长/10&#xff0c;则可以认为传输线2端电压差很小&#xff0c;可以不考虑传输线的问题。 对于数字信号不能用基波来简单计算&#xff0c;因为数字信号含有多种高次谐波&#xff0c;按照信号上升沿(Tr)&#xff0c;和传输时间(Tp)来计算如果传…

LeetCode 69. x 的平方根

LeetCode 69. x 的平方根 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0…

自定义Spring Boot Starter:简化短信服务集成

在现代应用程序中&#xff0c;短信服务是一个常见的需求&#xff0c;用于发送验证码、通知等。为了简化短信服务的集成和配置&#xff0c;我们可以通过自定义Spring Boot Starter来实现。Spring Boot Starter是一种特殊的依赖项&#xff0c;它包含了实现特定功能所需的库和组件…