指数和对数

指数生长曲线在经济学、物理学和其他学科中经常出现。Python有一个内置的幂运算符(”**”),不过,如果需要将一个可调用函数作为另一个函数的参数,那么困难需要用到pow()。

新建math_pow.py文件。

import math

INPUTS = [

(2, 3),

(2.1, 3.2),

(1.0, 5),

(2.0, 0),

(2, float('nan')),

(9.0, 0.5),

(27.0, 1.0 / 3),

]

for x, y in INPUTS:

print('{:5.1f}**{:5.3f} = {:6.3f}'.format(x, y, math.pow(x, y)))

以上代码输出结果为:

2.0**3.000 = 8.000

2.1**3.200 = 10.742

1.0**5.000 = 1.000

2.0**0.000 = 1.000

2.0** nan = nan

9.0**0.500 = 3.000

27.0**0.333 = 3.000

以上代码,1的任意次幂总返回1.0,同样,任何值的指数为0.0时也总是返回1.0,。对于nan值(不是一个数),大多数运算都返回nan。如果指数小于1,pow()会计算一个根。

由于平方根被使用得非常频繁,所以有一个单独的函数来计算平方根。

新建math_sqrt.py文件。

import math

print(math.sqrt(9.0))

print(math.sqrt(3))

try:

print(math.sqrt(-1))

except ValueError as err:

print('Cannot compute sqrt(-1):', err)

以上代码输出结果为:

3.0

1.7320508075688772

Cannot compute sqrt(-1): math domain error

以上代码,计算负数的平方根需要用到复数,这不在math处理范围内。试图计算一个负值的平方根时,会导致一个ValueError。

对数函数查找满足条件x = b ** y 的y。默认log()计算自然对数(底数为e)。如果提供了第二个参数,则使用这个参数值作为底数。

新建math_log.py文件。

import math

print(math.log(8))

print(math.log(8, 2))

print(math.log(0.5, 2))

以上代码输出结果为:

2.0794415416798357

3.0

-1.0

以上代码,x小于1时,求对数会产生负数结果。

10g()有三个变形。在给定浮点数表示和取整误差的情况下,由10g(x,b)生成的计算值只有有限的精度(特别是对于某些底数)。10g10()完成10g(x,10)计算,但是会使用一种比1og()更精确的算法。

新建math_log10.py文件。

import math

print('{:2} {:^12} {:^10} {:^20} {:8}'.format(

'i', 'x', 'accurate', 'inaccurate', 'mismatch',

))

print('{:-^2} {:-^12} {:-^10} {:-^20} {:-^8}'.format(

'', '', '', '', '',

))

for i in range(0, 10):

x = math.pow(10, i)

accurate = math.log10(x)

inaccurate = math.log(x, 10)

match = '' if int(inaccurate) == i else ' * '

print('{:2d} {:12.1f} {:10.8f} {:20.18f} {:^5}'.format(

i, x, accurate, inaccurate, match,

))

以上代码输出结果为:

i x accurate inaccurate mismatch

-- ------------ ---------- -------------------- --------

0 1.0 0.00000000 0.000000000000000000

1 10.0 1.00000000 1.000000000000000000

2 100.0 2.00000000 2.000000000000000000

3 1000.0 3.00000000 2.999999999999999556 *

4 10000.0 4.00000000 4.000000000000000000

5 100000.0 5.00000000 5.000000000000000000

6 1000000.0 6.00000000 5.999999999999999112 *

7 10000000.0 7.00000000 7.000000000000000000

8 100000000.0 8.00000000 8.000000000000000000

9 1000000000.0 9.00000000 8.999999999999998224 *

以上代码,输出中末尾有*的行突出强调了不精确的值。

类似于log10(),log2()会完成等价于math.log(x, 2)的计算。

新建math_log2.py文件。

import math

print('{:>2} {:^5} {:^5}'.format(

'i', 'x', 'log2',

))

print('{:-^2} {:-^5} {:-^5}'.format(

'', '', '',

))

for i in range(0, 10):

x = math.pow(2, i)

result = math.log2(x)

print('{:2d} {:5.1f} {:5.1f}'.format(

i, x, result,

))

以上代码输出结果为:

i x log2

-- ----- -----

0 1.0 0.0

1 2.0 1.0

2 4.0 2.0

3 8.0 3.0

4 16.0 4.0

5 32.0 5.0

6 64.0 6.0

7 128.0 7.0

8 256.0 8.0

9 512.0 9.0

以上代码,取决于底层平台,这个内置的特殊用途函数能提供更好的性能和精度,因为它利用了针对底数2的特殊用途算法,而在更一般用途的函数中没有使用这些算法。

log1p()会计算Newton-Mercator序列(1+x的自然对数)。

新建math_log1p文件。

import math

x = 0.0000000000000000000000001

print('x :', x)

print('1 + x :', 1 + x)

print('log(1+x):', math.log(1 + x))

print('log1p(x):', math.log1p(x))

以上代码输出结果为:

x : 1e-25

1 + x : 1.0

log(1+x): 0.0

log1p(x): 1e-25

以上代码,对于非常接近0的x,log1p()会更为精确,因为它使用的算法可以补偿由初始加法带来的取整误差。

exp()会计算指数函数(e ** x)。

新建math_exp.py文件。

import math

x = 2

fmt = '{:.20f}'

print(fmt.format(math.e ** 2))

print(fmt.format(math.pow(math.e, 2)))

print(fmt.format(math.exp(2)))

以上代码输出结果为:

7.38905609893064951876

7.38905609893064951876

7.38905609893065040694

以上代码,类似于其他特殊函数,与等价的通用函数math.pow(math.e, x)相比,exp()使用的算法可以生成更精确的结果。

expm1()是log1p()的逆运算,会计算e ** x - 1 。

新建math_expm1.py文件。

import math

x = 0.0000000000000000000000001

print(x)

print(math.exp(x) - 1)

print(math.expm1(x))

以上代码输出结果为:

1e-25

0.0

1e-25

以上代码,类似于log1p(),x值很小时,如果单独完成减法,即可能会损失精度。

python指数运算_Python标准库——数学运算相关推荐

  1. python计算平均数_Python标准库——数学运算

    平均值 statistics模块实现了很多常用的统计公式,允许使用Python的各种数值类型(int.float.Decimal和Fraction)来完成高效计算. 共支持3种形式的平均值:均值(me ...

  2. python 数学计算库_Python标准库——数学运算

    SystemRandom 有些操作系统提供了一个随机数生成器,可以访问更多引入生成器的信息源.random通过Systemdom类提供了这个特性,该类与Random的API相同,不过使用os.uran ...

  3. python字符串库函数_Python标准库概览(1):string

    Python的 string 标准库保留了一些有用的函数和用于处理文本对象的类,现在我们来一起看一下Python的string标准库还有哪些我们不知道的有趣用法? 01.capwords()函数:将字 ...

  4. python文件管理包_Python标准库04 文件管理 (部分os包,shutil包)

    Python标准库04 文件管理 (部分os包,shutil包) 在操作系统下,用户可以通过操作系统的命令来管理文件,参考.Python 标准库则允许我们从 Python 内部管理文件.相同的目的,我 ...

  5. python groupby用法_Python 标准库实践之合并字典组成的列表

    作者 | 陈祥安 来源 | Python学习开发 最近做了个数据合并的需求这里记录下: 要求如下: dict_of_list1 = [{"name": "zhangsan ...

  6. print python 带回车_python标准库threading源码解读【二】

    紧接着上一篇文章继续解析源码 甘蔗:python标准库threading源码解读[一]​zhuanlan.zhihu.com 目录 Event的介绍和用法 Event源码解析 以后的内容尽量少一点并且 ...

  7. python itertools模块_Python标准库:itertools模块

    来源:j_hao104 简介 官方描述:Functional tools for creating and using iterators.即用于创建高效迭代器的函数. itertools.chain ...

  8. python configparser模块_Python标准库之ConfigParser模块

    ConfigParser模块用于生成和修改常见配置文档. 比如配置文件格式如下: [DEFAULT] ServerAliveInterval= 45Compression=yes Compressio ...

  9. python随机库函数_python标准库中的随机分布函数

    random.random() 返回一个 随机的浮点数, 值域为 [0.0, 1.0] random.uniform(a, b) 均匀分布 返回一个随机的浮点数N, N的值在a与b之间 等同于 a + ...

最新文章

  1. 【每日一算法】爬楼梯
  2. java游戏移动_java - Java游戏 - 如何让敌人移动? - SO中文参考 - www.soinside.com
  3. python【蓝桥杯vip练习题库】ADV-172身份证排序
  4. 【渝粤教育】电大中专职业健康与安全_1作业 题库
  5. 机器人中的轨迹规划(Trajectory Planning )
  6. 华景机器人怎么控制_【扫地机器人选购】支持华为hilink智能家居联动/支持华为小艺语音控制的扫地机器人...
  7. 电商扣减库存_电商系统秒杀架构设计
  8. Java并发--ConcurrentModificationException(并发修改异常)异常原因和解决方法
  9. Sqoop架构(四)
  10. iOS蓝牙连接打印机,打印小票
  11. VNX VMX and delete luns
  12. 企业微信给微信好友定时发送图文并茂的消息
  13. C语言链表的简单的尾插法
  14. 有线网与无线网(WIFI)网速的限制因素与Wifi信道选择
  15. 数据结构——邻接表Adjacency List
  16. 计算机考研和就业pk,考研PK就业:提高自身竞争力比文凭更重要
  17. h5物体拖动_网易爆款H5 的交互方法参考
  18. Luogu_P4140 奇数国
  19. 大一学生网页课程作业 南京介绍网页设计 学生家乡网页设计作品静态 HTML网页模板源码 html我的家乡网页作业
  20. ueditor统计字数中文_UEditor设置最大字数限制

热门文章

  1. 应届本科毕业生什么时候找工作比较合适
  2. 关系型数据库架构介绍及主流应用场景
  3. springboot和sping异同
  4. 全面的Swift学习资料整理
  5. Fluent基于低氧舱气体交换仿真(氮气与空气混合)
  6. linux常用基础命令——文件处理命令
  7. IntelliJ IDEA 2019 配置 PHP 开发环境及创建 PHP 项目
  8. 五子棋执黑必胜(转载)
  9. php面试的作品是看视频做吗,谈谈我在PHP面试时踩过的坑 找工作必看
  10. 使用数组解决阶梯设置问题