Julia-数学运算和初等函数

算术运算符

以下算术运算符支持所有的原始数值类型:

表达式名称描述
+x一元加法运算符全等操作
-x一元减法运算符将值变为其相反数
x + y二元加法运算符执行加法
x - y二元减法运算符执行减法
x * y乘法运算符执行乘法
x / y除法运算符执行除法
x ÷ y整除取 x / y 的整数部分
x \ y反向除法等价于 y / x
x ^ y幂操作符xy 次幂
x % y取余等价于 rem(x,y)

以及对 Bool 类型的否定:

表达式名称描述
!x否定

truefalse 互换

 算术运算符的部分和python基本一致,只有几个地方要注意一下。

x ÷ y整除取 x / y 的整数部分
x \ y反向除法等价于 y / x
x ^ y幂操作符xy 次幂

 这三个部分是和python不一致的,但julia中的运算符表示似乎更符合常识,也挺好记的。

位运算符

所有原始整数类型都支持以下位运算符

表达式名称
~x按位取反
x & y按位与
x | y按位或
x ⊻ y按位异或(逻辑异或)
x >>> y逻辑右移
x >> y算术右移
x << y逻辑/算术左移

位运算符和C语言中基本一致,除了按位异或(逻辑异或)符看上去有些诡异。这个符号是"\xor"加Tab键打出来的,这样记好像也不难理解。

复合赋值运算符

每一个二元运算符和位运算符都可以给左操作数复合赋值:方法是把 = 直接放在二元运算符后面。比如,x += 3 等价于 x = x + 3

julia> x = 1
1

julia> x += 3
4

julia> x
4

二元运算和位运算的复合赋值操作符有下面几种:

+=  -=  *=  /=  \=  ÷=  %=  ^=  &=  |=  ⊻=  >>>=  >>=  <<=

这里就不赘述了,和C 语言完全一样。

有一点需要注意一下,这些是双目运算符,最后会把值赋值到左操作数上,因此可能会改变变量类型

julia> x=2
2

julia> typeof(ans)
Int64

julia> x *= 0.01
2

julia> typeof(ans)
Float64

向量化dot运算符

julia中,每个二元运算符都有一个dot运算符和它对应,表示的含义是逐元素的和后面的操作数进行运算。

julia> [1,2,3] .^ 3
3-element Array{Int64,1}:
  1
  8
 27

需要注意的一点是:

将点运算符用于数值字面量可能会导致歧义。例如,1.+x 到底是表示 1. + x 还是 1 .+ x?这会令人疑惑。因此不允许使用这种语法,遇到这种情况时,必须明确地用空格消除歧义。

数值比较

标准的比较操作对所有原始数值类型有定义:

操作符名称
==相等
!=, 不等
<小于
<=, 小于等于
>大于
>=, 大于等于

和现在主流的热门语言的都一样,我就不赘述了。

注意:

整数的比较方式是标准的按位比较,而浮点数的比较方式则遵循 IEEE 754 标准

  • 有限数的大小顺序,和我们所熟知的相同。
  • +0 等于但不大于 -0.
  • Inf 等于自身,并且大于除了 NaN 外的所有数。
  • -Inf 等于自身,并且小于除了 NaN 外的所有数。
  • NaN 不等于、不小于且不大于任何数值,包括它自己。

NaN 不等于它自己这一点可能会令人感到惊奇,所以需要注意:

julia> NaN == NaN
false

julia> NaN != NaN
true

julia> NaN < NaN
false

julia> NaN > NaN
false

由于 NaN 的存在,在做数组比较时会特别头疼:

julia> [1 NaN] == [1 NaN]
false

为此,Julia 给这些特别的数提供了下面几个额外的测试函数。这些函数在某些情况下很有用处,比如在做 hash 比较时。

函数测试是否满足如下性质
isequal(x, y)xy 是完全相同的
isfinite(x)x 是有限大的数字
isinf(x)x 是(正/负)无穷大
isnan(x)xNaN

isequal 认为 NaN 之间是相等的:

julia> isequal(NaN, NaN)
true

julia> isequal([1 NaN], [1 NaN])
true

julia> isequal(NaN, NaN32)
true

isequal 也能用来区分带符号的零:

julia> -0.0 == 0.0
true

julia> isequal(-0.0, 0.0)
false

有符号整数、无符号整数以及浮点数之间的混合类型比较是很棘手的。开发者费了很大精力来确保 Julia 在这个问题上做的是正确的。

对于其它类型,isequal 会默认调用 ==,所以如果你想给自己的类型定义相等,那么就只需要为 == 增加一个方法。如果你想定义一个你自己的相等函数,你可能需要定义一个对应的 hash 方法,用于确保 isequal(x,y) 隐含着 hash(x) == hash(y)

另外julia支持链式比较,连等,连大于,连小于,连大于等于,连。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值