当前位置: 首页 > 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

相关文章:

  • Autosar EcuM学习笔记-上电初始化执行函数及下电前执行函数
  • 逆变器控制技术
  • 数据结构与算法——Java实现 24.中缀表达式转后缀
  • Python | 第八章 | 数据容器
  • 爬虫入门 Selenium使用
  • 906. 超级回文数
  • 算法复杂度-空间
  • JAVA红娘婚恋相亲交友系统源码全面解析
  • Java语法-类和对象之抽象类和接口
  • 【软件测试】详解软件测试中的测试级别
  • Stable Diffusion 优秀博客转载
  • Spark 中 任务集 TaskSet 详解
  • 青动CRM V3.2.1
  • 第十四届蓝桥杯真题Python c组F.棋盘(持续更新)
  • Linux 配置与管理 SWAP(虚拟内存)
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [Vue CLI 3] 配置解析之 css.extract
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Fabric架构演变之路
  • HTTP--网络协议分层,http历史(二)
  • IOS评论框不贴底(ios12新bug)
  • Laravel 菜鸟晋级之路
  • Octave 入门
  • vue学习系列(二)vue-cli
  • 分布式熔断降级平台aegis
  • 关于使用markdown的方法(引自CSDN教程)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 你不可错过的前端面试题(一)
  • 手写双向链表LinkedList的几个常用功能
  • 通过npm或yarn自动生成vue组件
  • 异常机制详解
  • Mac 上flink的安装与启动
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • #Z2294. 打印树的直径
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (003)SlickEdit Unity的补全
  • (1)虚拟机的安装与使用,linux系统安装
  • (160)时序收敛--->(10)时序收敛十
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET C# 使用 iText 生成PDF
  • .net core 6 redis操作类
  • .NET Core中如何集成RabbitMQ
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net MySql
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)