当前位置: 首页 > news >正文

C++11标准模板(STL)- 常用数学函数 - 计算一个数的给定次幂 (xy)(std::pow, std::powf, std::powl)

常用数学函数

计算一个数的给定次幂 (xy)

std::pow, 
std::powf, 
std::powl

定义于头文件 <math.h>

float powf( float base, float exponent );

(1)(C99 起)

double pow( double base, double exponent );

(2)

long double powl( long double base, long double exponent );

(3)(C99 起)

定义于头文件 <tgmath.h>

#define pow( base, exponent )

(4)(C99 起)

1-3) 计算 baseexponent 次幂。

4) 泛型宏:若任何参数拥有 long double 类型,则调用 powl 。否则,若任何参数拥有整数类型或 double 类型,则调用 pow 。否则调用 powf 。若至少一个参数为复数或序数,则宏调用对应的复函数( cpowf 、 cpow 、 cpowl )。

参数

base-作为底的浮点值
exponent-作为指数的浮点值

返回值

若不出现错误,则返回 baseexponent 次幂( baseexponent
)。

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

若出现极点错误或上溢所致的值域错误,则返回 ±HUGE_VAL±HUGE_VALF±HUGE_VALL

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

错误处理

报告 math_errhandling 中指定的错误。

base 有限且为负,且 exponent 有限且为非整数,则出现定义域错误,并可能出现值域错误。

base 为零且 exponent 为零,则可能出现定义域错误。

base 为零且 exponent 为负,则可能出现定义域错误或极点错误。

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

  • pow(+0, exponent) ,其中 exponent 为负奇数,返回 +∞ 并引发 FE_DIVBYZERO
  • pow(-0, exponent) ,其中 exponent 为负奇数,返回 -∞ 并引发 FE_DIVBYZERO
  • pow(±0, exponent) ,其中 exponent 为有限负数,且为偶数或非整数,则返回 +∞ 并引发 FE_DIVBYZERO
  • pow(±0, -∞) 返回 +∞ 并可能引发 FE_DIVBYZERO (C2x 前)
  • pow(+0, exponent) ,其中 exponent 为正奇数,返回 +0
  • pow(-0, exponent) ,其中 exponent 为正奇数,返回 -0
  • pow(±0, exponent) ,其中 exponent 为正非整数或正偶数,返回 +0
  • pow(-1, ±∞) returns 1
  • pow(+1, exponent) 对于任何 exponent 返回 1 ,即使 exponentNaN
  • pow(base, ±0) 对于任何 base 返回 1 ,即使 baseNaN
  • pow(base, exponent) 返回 NaN 并引发 FE_INVALID ,若 base 为有限负数且 exponent 为有限非整数。
  • pow(base, -∞) 对任何 |base|<1 返回 +∞
  • pow(base, -∞) 对任何 |base|>1 返回 +0
  • pow(base, +∞) 对任何 |base|<1 返回 +0
  • pow(base, +∞) 对任何 |base|>1 返回 +∞
  • pow(-∞, exponent) 返回 -0 ,若 exponent 为负奇整数
  • pow(-∞, exponent) 返回 +0 ,若 exponent 为负非整数或负偶数
  • pow(-∞, exponent) 返回 -∞ ,若 exponent 为正奇整数
  • pow(-∞, exponent) 返回 +∞ ,若 exponent 为正非整数或正偶数
  • pow(+∞, exponent) 对任何 exponent 返回 +0
  • pow(+∞, exponent) 对任何 exponent 返回 +∞
  • 除了指定于上处,若任何参数为 NaN ,则返回 NaN

注意

尽管 pow 不能获得负数的开方根,也为 exponent 为 1/3 的常用情况提供了 cbrt 。

调用示例

#include <iostream>
#include <cstdlib>
#include <typeinfo>
#include <cinttypes>
#include <cmath>int main()
{//1-3) 计算 base 的 exponent 次幂。const float fNumber = 0.1314;const float fExponent = 2;std::cout << "typeid(float).name():   " << typeid(float).name() << std::endl;for (int i = 0; i < 100; i += 10){std::cout << "std::pow(" << fNumber + i << "," << fExponent << "):   "<< std::pow(fNumber + i, fExponent) << std::endl;}std::cout << std::endl;for (int i = 0; i < 100; i += 10){std::cout << "std::pow(" << - fNumber + i << "," << fExponent << "):   "<< std::pow(- fNumber + i, fExponent) << std::endl;}std::cout << std::endl;const double dNumber = 0.01314;const double dExponent = 2.2;std::cout << "typeid(double).name():   " << typeid(double).name() << std::endl;for (int i = 0; i < 100; i += 10){std::cout << "std::pow(" << dNumber + i << "," << dExponent << "):   "<< std::pow(dNumber + i, dExponent) << std::endl;}std::cout << std::endl;for (int i = 0; i < 100; i += 10){std::cout << "std::pow(" << - dNumber + i << "," << dExponent << "):   "<< std::pow(- dNumber + i, dExponent) << std::endl;}std::cout << std::endl;const long double ldNumber = 0.1314;const long double ldExponent = 1.13;std::cout << "typeid(long double).name():   " << typeid(long double).name() << std::endl;for (int i = 0; i < 100; i += 10){std::cout << "std::pow(" << ldNumber + i << "," << ldExponent << "):   "<< std::pow(ldNumber + i, ldExponent) << std::endl;}std::cout << std::endl;for (int i = 0; i < 100; i += 10){std::cout << "std::pow(" << - ldNumber + i << "," << ldExponent << "):   "<< std::pow(- ldNumber + i, ldExponent) << std::endl;}std::cout << std::endl;return 0;
}

输出

typeid(float).name():   f
std::pow(0.1314,2):   0.017266
std::pow(10.1314,2):   102.645
std::pow(20.1314,2):   405.273
std::pow(30.1314,2):   907.901
std::pow(40.1314,2):   1610.53
std::pow(50.1314,2):   2513.16
std::pow(60.1314,2):   3615.79
std::pow(70.1314,2):   4918.41
std::pow(80.1314,2):   6421.04
std::pow(90.1314,2):   8123.67std::pow(-0.1314,2):   0.017266
std::pow(9.8686,2):   97.3893
std::pow(19.8686,2):   394.761
std::pow(29.8686,2):   892.133
std::pow(39.8686,2):   1589.51
std::pow(49.8686,2):   2486.88
std::pow(59.8686,2):   3584.25
std::pow(69.8686,2):   4881.62
std::pow(79.8686,2):   6378.99
std::pow(89.8686,2):   8076.37typeid(double).name():   d
std::pow(0.01314,2.2):   7.25955e-005
std::pow(10.0131,2.2):   158.948
std::pow(20.0131,2.2):   729.279
std::pow(30.0131,2.2):   1778.63
std::pow(40.0131,2.2):   3348.47
std::pow(50.0131,2.2):   5469.97
std::pow(60.0131,2.2):   8168.49
std::pow(70.0131,2.2):   11465.6
std::pow(80.0131,2.2):   15379.9
std::pow(90.0131,2.2):   19928.4std::pow(-0.01314,2.2):   nan
std::pow(9.98686,2.2):   158.032
std::pow(19.9869,2.2):   727.174
std::pow(29.9869,2.2):   1775.2
std::pow(39.9869,2.2):   3343.63
std::pow(49.9869,2.2):   5463.65
std::pow(59.9869,2.2):   8160.63
std::pow(69.9869,2.2):   11456.1
std::pow(79.9869,2.2):   15368.8
std::pow(89.9869,2.2):   19915.6typeid(long double).name():   e
std::pow(0.1314,1.13):   0.100928
std::pow(10.1314,1.13):   13.6901
std::pow(20.1314,1.13):   29.7425
std::pow(30.1314,1.13):   46.9129
std::pow(40.1314,1.13):   64.8541
std::pow(50.1314,1.13):   83.3919
std::pow(60.1314,1.13):   102.42
std::pow(70.1314,1.13):   121.866
std::pow(80.1314,1.13):   141.676
std::pow(90.1314,1.13):   161.812std::pow(-0.1314,1.13):   nan
std::pow(9.8686,1.13):   13.2895
std::pow(19.8686,1.13):   29.3041
std::pow(29.8686,1.13):   46.4508
std::pow(39.8686,1.13):   64.3744
std::pow(49.8686,1.13):   82.8981
std::pow(59.8686,1.13):   101.914
std::pow(69.8686,1.13):   121.35
std::pow(79.8686,1.13):   141.151
std::pow(89.8686,1.13):   161.279


http://www.mrgr.cn/news/38296.html

相关文章:

  • k8s搭建一主三从的mysql8集群---无坑
  • C++ 数据结构算法细节相关
  • 前端测试最强教程 - 实现 fake http 和 fake db
  • 如果你不愿意冒一切风险,就不要成为创业者:如何建立一个年收入 1800 万美元的支付业务
  • Jmeter压测数据库
  • EDA设计:原理、应用与代码实践
  • 2. PH47代码框架二次开发功能特性
  • YOLOv8最新改进2023 CVPR 结合BiFormer
  • 2024淘宝双11活动,收下这份必买好物推荐清单
  • Spring Boot 基础入门指南
  • vector的模拟实现以及oj题(2)
  • SAP员工士气因重组受到打击
  • Android SQLite的基本使用、生成Excel文件保存到本地
  • 面试加分必看,11道接口安全测试面试题!
  • AI跟踪报道第58期-新加坡内哥谈技术-本周AI新闻: OpenAI动荡时刻和Meta从未如此动人
  • 二分查找(2)
  • 耳机检测系统源码分享
  • 手把手教你用PyTorch从零训练自己的大模型(非常详细)零基础入门到精通,收藏这一篇就够了
  • OIDC6-OIDC 授权流程类型
  • 数据特征工程:如何计算块熵?| 基于SQL实现