12 数值

12 数值

12.1 复数——<complex>

1、输入复数时,可以在括号内只写实部,也可以在括号内以逗号隔开实部和虚部。


2、复数的各种操作

(1)创建,复制和赋值


如:std::complex<double> c2(conj(c1));


(2)隐式类型转换

允许安全转换(如complex<float>转为complex<double>)可以隐式进行,而不安全的转换(如complex<long double>转为complex<double>)必须显示进行。

注意1:不能讲一个实部和虚部为整数的复数,转换为实部和虚部为float或double或long double的复数,但可以分开来当做参数。


注意2:std::complex<float> c2(std:polar(4.2, 0.75);   //OK,支持complex<double>到complex<float>的显示转换。

然而std::complex<float> c2 = std:polar(4.2, 0.75);  //error,因为polar()产生一个临时对象complex<double>,然而不存在complex<double>到complex<float>的隐式转换。

注意3:但是对于赋值操作符,可以任意转换(包括不安全的转换),这跟以上原则是冲突的。


(3)数值的存取


注意:返回值不是引用。


(4)比较:只存在==和!=,不存在大小(可以自行定义)。

(5)算术运算:支持四则运算,以及正负号,以及+=等。

注意:赋值操作符是改变既有complex的唯一途径。


(6)输入输出

input操作符可以接纳一下任何一种格式:(realpart, imagpart),(realpart),realpart。


(7)超越函数:如log(c)表示ln(c),sqrt(c)表示c的平方根。


12.2 valarray——<valarray>

1、valarray定义了下标操作符,所有的普通数值运算(加、减、乘、模数、反向、未操作、比较操作、逻辑操作、赋值操作)。

注意:不可以使用operator<来进行valarray的排序,因此valarray不能作为STL容器的元素。

注意:对于二元运算,操作数之一可以是某个单值。但是单值的型别必须和valarray的元素型别完全一致。如val = 4 * va2;va2只能是valarray<int>,而不能是valarray<double>。

 

2、valarray的子集

Slice(切割);Gerneral slice(一般化切割,多维);Masked subset(屏蔽式子集);Indirect subset(间接式子集)。

注意:将两个subset相乘,并将结果赋值给另一个subset,必须使用显示转型

va[std::slice(0, 4, 3)] = static_cast<std::valarray<double> >(va[std::slice(1, 4, 3)]) * static_cast<std::valarray<double> >(va[std::slice(2,4,3]);其中slice的三个参数分别表示为起始索引、元素数量、元素间距(步幅)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值