本模块提供了处理复数的数学函数。因此这些函数接受整数、浮点数或者复数作为參数。

6.3.1 与极坐标相互转换的函数

在Python里表示一个复数z,实部使用z.real表示,虚部使用z.imag,能够使用以下的公式来表示:

z = z.real + z.imag*1j

相同,採用极坐标也能够表示一个复数,详细是这样表示复数z。採用复数z的模r和复数向量与x轴正坐标的夹角来表示。

cmath.phase(x)

返回复数在极坐标里的相位。

样例:

#python 3.4

import cmath

n = cmath.phase(complex(-1.0, 0.0))

print(n)

n = cmath.phase(complex(-1.0, -0.0))

print(n)

结果输出例如以下:

3.141592653589793

-3.141592653589793

cmath.polar(x)

返回复数x在极坐标的表示(r, phi)。

样例:

#python 3.4

import cmath

n = cmath.polar(complex(-1.0, 0.0))

print(n)

n = cmath.polar(complex(-1.0, -0.0))

print(n)

结果输出例如以下:

(1.0, 3.141592653589793)

(1.0, -3.141592653589793)

cmath.rect(r, phi)

从极坐标表示(r, phi)转换为笛卡尔坐标表示的复数。

样例:

#python 3.4

import cmath

n = cmath.rect(1.0, cmath.pi)

print(n)

结果输出例如以下:

(-1+1.2246467991473532e-16j)

6.4 decimal--十进制的固定数和浮点数运算

本模块提供了高速地进行十进制的浮点数运算,与内置类型float有以下几点差别:

l 十进制模块是基于人类来设计的,跟人们在学校里学习到的数学内容保持一致。

l 十进制模块的浮点数是能够准确地表示。比方1.1和2.2相加,用户一般觉得是等于3.3。而不是等于3.3000000000000003。

l 正确地进行算术运算。

比方0.1 + 0.1 + 0.1 - 0.3。在数学上是等于0。但在计算机的浮点数类型时,会返回5.5511151231257827e-017。

l 保留小数点后的有效位数。比方1.30 + 1.20 等于2.50。1.3*1.2等于1.56,而1.30*1.20等于1.5600。

l 跟浮点数类型不一样的地方,它能够由用户来选择合适的精度,默认是28位。

l 二进制和十进制的浮点数都是按已经公布的标准来实现。

l 十进制模块被设计来计算固定的浮点数计算。

6.4.1 简单使用介绍

要使用decimal模块。先要把此模块导入,然后使用函数getcontext()来进看精度、小数点保留多少位。以及异常处理等等。

样例:

#python 3.4

from decimal import *

print(getcontext())

结果输出例如以下:

Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

十进制的模块支持从整数、字符串、浮点数或元组构造对象:

样例:

#python 3.4

from decimal import *

print(Decimal(10))

print(Decimal('3.14'))

print(Decimal(3.14))

print(Decimal((0, (3, 1, 4), -2)))

print(Decimal(str(2.0**0.5)))

print(Decimal(2)**Decimal('0.5'))

print(Decimal('NaN'))

print(Decimal('-Infinity'))

结果输出例如以下:

10

3.14

3.140000000000000124344978758017532527446746826171875

3.14

1.4142135623730951

1.414213562373095048801688724

NaN

-Infinity

打开浮点数操作时就抛出异常:

样例:

#python 3.4

from decimal import *

c = getcontext()

c.traps[FloatOperation] = True

print(Decimal('3.14'))

print(Decimal(3.14))

结果输出例如以下:

3.14

Traceback (most recent call last):

File "F:/temp/pywin/dec1.py", line 7, in <module>

print(Decimal(3.14))

decimal.FloatOperation: [<class 'decimal.FloatOperation'>]

改变十进制模块的位数精度、有效位取舍:

样例:

#python 3.4

from decimal import *

c = getcontext()

c.prec = 6

print(Decimal('3.14'))

print(Decimal(3.14))

print(Decimal('3.1415926535') + Decimal('2.7182818285'))

c.rounding = ROUND_UP

print(Decimal('3.1415926535') + Decimal('2.7182818285'))

结果输出例如以下:

3.14

3.140000000000000124344978758017532527446746826171875

5.85987

5.85988

对于浮点数的字符串进行处理:

样例:

#python 3.4

from decimal import *

data = list(map(Decimal, '1.34 1.87 3.45 2.35 1.00 0.03 9.25'.split()))

print(max(data))

print(min(data))

print(sorted(data))

print(sum(data))

结果输出例如以下:

9.25

0.03

[Decimal('0.03'), Decimal('1.00'), Decimal('1.34'), Decimal('1.87'), Decimal('2.35'), Decimal('3.45'), Decimal('9.25')]

19.29

针对不同小数位进行取舍:

样例:

#python 3.4

from decimal import *

print(Decimal('7.325').quantize(Decimal('.01'), rounding=ROUND_DOWN))

print(Decimal('7.325').quantize(Decimal('1.'), rounding=ROUND_UP))

结果输出例如以下:

7.32

8

6.4.2 Decimal对象

class decimal.Decimal(value="0", context=None)

从值value构造一个Decimal对象。

value的类型能够是整数、字符串、元组、浮点数或者还有一个Decimal对象。假设输入是一个字符串,符合以下的规则的表达式:

sign           ::=  '+' | '-'

digit          ::=  '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

indicator      ::=  'e' | 'E'

digits         ::=  digit [digit]...

decimal-part   ::=  digits '.' [digits] | ['.'] digits

exponent-part  ::=  indicator [sign] digits

infinity       ::=  'Infinity' | 'Inf'

nan            ::=  'NaN' [digits] | 'sNaN' [digits]

numeric-value  ::=  decimal-part [exponent-part] | infinity

numeric-string ::=  [sign] numeric-value | [sign] nan

adjusted()

返回调整为指数形式之后。指数须要多少表示。

样例:

#python 3.4

from decimal import *

print(Decimal('7.325').adjusted())

print(Decimal('1000').adjusted())

print(Decimal('9000').adjusted())

print(Decimal('0.0009').adjusted())

输出结果例如以下:

0

3

3

-4

as_tuple()

返回命名的元组表示十进制数值。

样例:

#python 3.4

from decimal import *

print(Decimal('7.325').as_tuple())

print(Decimal('1000').as_tuple())

print(Decimal('9000').as_tuple())

print(Decimal('0.0009').as_tuple())

结果输出例如以下:

DecimalTuple(sign=0, digits=(7, 3, 2, 5), exponent=-3)

DecimalTuple(sign=0, digits=(1, 0, 0, 0), exponent=0)

DecimalTuple(sign=0, digits=(9, 0, 0, 0), exponent=0)

DecimalTuple(sign=0, digits=(9,), exponent=-4)

canonical()

返回规范的格式。

样例:

#python 3.4

from decimal import *

print(Decimal('7.325').canonical())

print(Decimal('1000').canonical())

print(Decimal('9000').canonical())

print(Decimal('0.0009').canonical())

结果输出例如以下:

7.325

1000

9000

0.0009

compare(other, context=None)

与其他other十进制数值比較。等于返回0, 大于返回1。小于返回-1,与不是数值比較返回NaN。

样例:

#python 3.4

from decimal import *

r = Decimal('100').compare(Decimal('200'))

print(r)

r = Decimal('100').compare(Decimal('50'))

print(r)

r = Decimal('100').compare(Decimal('100'))

print(r)

r = Decimal('100').compare(Decimal('-inf'))

print(r)

r = Decimal('100').compare(Decimal('NaN'))

print(r)

结果输出例如以下:

-1

1

0

1

NaN

compare_signal(other, context=None)

除了NaN操作不一样之外。其他与compare()函数是一样的。

样例:

#python 3.4

from decimal import *

r = Decimal('100').compare_signal(Decimal('200'))

print(r)

r = Decimal('100').compare_signal(Decimal('50'))

print(r)

r = Decimal('100').compare_signal(Decimal('100'))

print(r)

r = Decimal('100').compare_signal(Decimal('-inf'))

print(r)

r = Decimal('100').compare_signal(Decimal('NaN'))

print(r)

结果输出例如以下:

-1

1

0

1

Traceback (most recent call last):

File "F:\temp\pywin\dec1.py", line 12, in <module>

r = Decimal('100').compare_signal(Decimal('NaN'))

decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]

compare_total(other, context=None)

使用抽象表示方式进行比較,而不是使用值。

返回的结果跟compare()函数一样。

样例:

#python 3.4

from decimal import *

r = Decimal('100').compare_total(Decimal('100'))

print(r)

r = Decimal('100').compare_total(Decimal('100.0'))

print(r)

r = Decimal('100.0').compare_total(Decimal('100'))

print(r)

结果输出例如以下:

0

1

-1

compare_total_mag(other, context=None)

不考虑符号的比較,与上面的函数返回值一样。

样例:

#python 3.4

from decimal import *

r = Decimal('100').compare_total_mag(Decimal('-100'))

print(r)

r = Decimal('100').compare_total_mag(Decimal('-100.0'))

print(r)

r = Decimal('100.0').compare_total_mag(Decimal('-100'))

print(r)

结果输出例如以下:

0

1

-1

conjugate()

返回十进制值本身。

样例:

#python 3.4

from decimal import *

r = Decimal('100').conjugate()

print(r)

结果输出例如以下:

100

copy_abs()

返回对象的绝对值。

样例:

#python 3.4

from decimal import *

r = Decimal('100').copy_abs()

print(r)

r = Decimal('-100').copy_abs()

print(r)

结果输出例如以下:

100

100

copy_negate()

返回相反数。

样例:

#python 3.4

from decimal import *

r = Decimal('100').copy_negate()

print(r)

r = Decimal('-100').copy_negate()

print(r)

结果输出例如以下:

-100

100

copy_sign(other, context=None)

从另外十进制对象获取符号。本对象取绝对值。

样例:

#python 3.4

from decimal import *

r = Decimal('100').copy_sign(Decimal('-1.0'))

print(r)

r = Decimal('-100').copy_sign(Decimal('-1.0'))

print(r)

结果输出例如以下:

-100

-100

exp(context=None)

返回这个值的自然指数值,

6.3 cmath--数学函数的更多相关文章

  1. cmath模块——复数域数学函数模块

    cmath——复数域数学函数模块 转自:https://blog.csdn.net/zhtysw/article/category/7511293 该模块属于内置模块,随时可以调用.它提供了数学函数在 ...

  2. Python数学函数

    1.Python数学函数 1.abs(x):取绝对值,内建函数 2.math.ceil(x):向上取整,在math模块中 3.cmp(x,y):如果 x < y ,返回-1:如果 x == y ...

  3. C/C++常用数学函数

    math.h/cmath(C++)数学函数库 1 三角函数    double sin (double);    double cos (double);    double tan (double) ...

  4. C++中常用的数学函数总结

    我们在C++程序设计的过程中往往会使用到一些数学函数,那么不同的数学运算要用到什么函数哪?大家可以参考我的总结如下: 首先引用到数学函数时一定要记得加函数头文件 #include<cmath&g ...

  5. Sql Server函数全解<二>数学函数

    阅读目录 1.绝对值函数ABS(x)和返回圆周率的函数PI() 2.平方根函数SQRT(x) 3.获取随机函数的函数RAND()和RAND(x) 4.四舍五入函数ROUND(x,y) 5.符号函数SI ...

  6. Sql Server函数全解(二)数学函数

      数学函数主要用来处理数值数据,主要的数学函数有:绝对值函数,三角函数(包括正弦函数,余弦函数,正切函数,余切函数).对数函数,随机函数等.在错误产生时,数学函数将返回空值null.本次介绍各种数学 ...

  7. Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

    第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service m ...

  8. javascript函数一共可分为五类: ·常规函数 ·数组函数 ·日期函数 ·数学函数 ·字符串函数

    javascript函数一共可分为五类:    ·常规函数    ·数组函数    ·日期函数    ·数学函数    ·字符串函数    1.常规函数    javascript常规函数包括以下9个 ...

  9. cocos2d-x:懒人数学函数

    做游戏开发,要用到比较多的数学计算,对于程序员来说,还是用一种懒一点的方法,cocos2d-x方便开发者投机取巧...提供了很多方便的的数学函数,方便我们的数学计算.以下是在网上收集到的一些常用的数学 ...

  10. Myth – 支持变量和数学函数的 CSS 预处理器

    Myth 是一个预处理器,有点类似于 CSS polyfill .Myth 让你写纯粹的 CSS,同时还让你可以使用类似 LESS 和 Sass 的工具.您仍然可以使用变量和数学函数,就像你在其它预处 ...

随机推荐

  1. IE11下javascript报堆栈溢出问题的解决

    在IE11浏览器下,使用日期函数里面的toLocaleDateString()会报堆栈溢出 不知道是不是跟我的其他相关代码有关,还是就是这个toLocaleDateString()在IE11确实不太一 ...

  2. Linux下串口操作之数据拼接

    串口操作中,特别以非阻塞的方式读取和发送数据,做好进程之间的同步很重要.有时我们会发现这样一个问题,在进行read操作时,一次read不能获得一个完整的数据帧,这就好比你买了一个电脑,送货的先把显示器 ...

  3. cp 命令(转)

    原文:http://www.cnblogs.com/peida/archive/2012/10/29/2744185.html cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情 ...

  4. [Oracle] decode 函数及其用法

    http://blog.csdn.net/oscar999/article/details/18399177 前言 DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值 ...

  5. java基础50道编程题

    50道JAVA基础编程练习题 [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析 ...

  6. taro 不支持render中,使用函数多条件渲染

    不支持render中,使用函数多条件渲染 h5不报错,但是编译成小程序时 会报错 错误写法: onRenderContent = () => { const { verified, recogn ...

  7. ios8.1.3Cydia重装

    1.下载deb包 2.把包放到/var/mobile/Media/下 3.终端输入:dpkg -i /var/mobile/Media/*.deb 然后输入:su -c uicache mobile ...

  8. myeclipse debug不显示变量值解决的方法

    依次点击打开mycelipse菜单选项:"Window" - "Preferences" - "Java" - "Editor&q ...

  9. java装箱拆箱

    基本数据类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能. 一般我们要创建一个类的对象的时候,我们会这样: Class a = new Class(p ...

  10. 普通spring jsp+mybatis项目修改为springboot + jsp +mybatis项目

    概述 由于公司决定使用spring cloud,但是公司积累了大量的普通的jsp项目,老的项目直接全部修改为springboot成本过高,周期比较长,而且公司业务正在快速拓展,所以需要把之前的老项目修 ...