运算符

算术运算符适用于所有的基本数值类型:

表达式 名称 描述

+x 一元加法 x 本身

-x 一元减法 相反数

x + y 二元加法 做加法

x - y 二元减法 做减法

x * y 乘法 做乘法

x / y 除法 做除法

x \ y 反除 等价于 y / x

x ^ y 乘方 x 的 y 次幂

x % y 取余

(习惯上,优先级低的运算,前后多补些空格。这不是强制的。)


以及 Bool 类型的非运算:

表达式 名称 描述

!x 非 true 和 false 互换


位运算符 适用于所有整数类型:

表达式 名称

~x 按位取反

x & y 按位与

x \| y 按位或

x $ y 按位异或

x >>> y 向右 逻辑移位 (高位补 0 )

x >> y 向右 算术移位 (复制原高位)

x << y 向左逻辑/算术移位

位运算的例子:

julia> ~123

-124

julia> 123 & 234

106

julia> 123 | 234

251

julia> 123 $ 234

145

julia> ~uint32(123)

0xffffff84

julia> ~uint8(123)

0x84


复合赋值运算符

二元算术和位运算都有对应的复合赋值运算符,即运算的结果将会被赋值给左操作数。在操作符的后面直接加上 = 就组成了复合赋值运算符。例如, x += 3 相当于 x = x + 3 :

julia> x = 1

1

julia> x += 3

4

julia> x

4



复合赋值运算符有:

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



数值比较

所有的基础数值类型都可以使用比较运算符:

运算符 名称

== 等于

!= 不等于

< 小于

<= 小于等于

> 大于

>= 大于等于

一些例子:

julia> 1 == 1

true

julia> 1 == 2

false

julia> 1 != 2

true

julia> 1 == 1.0

true 

julia> 1 < 2

true

整数是按位比较的。浮点数是 IEEE 754 标准 比较的:

有限数按照正常方式做比较。

正数的零等于但不大于负数的零。

Inf 等于它本身,并且大于所有数, 除了 NaN。

-Inf 等于它本身,并且小于所有数, 除了 NaN。

NaN 不等于、不大于、不小于任何数,包括它本身。

上面最后一条是关于 NaN 的性质,值得留意:

julia> NaN == NaN

false

julia> NaN != NaN

true

julia> NaN < NaN

false

julia> NaN > NaN

false


Julia 提供了附加函数, 用以测试这些特殊值,它们使用哈希值来比较:

函数 测试

isequal(x, y) x 是否等价于 y

isfinite(x) x 是否为有限的数

isinf(x) x 是否为无限的数

isnan(x) x 是否不是数

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 支持 Python链式比较 :

julia> 1 < 2 <= 2 < 3 == 3 > 2 >= 1 == 1 < 3 != 5

true

对标量的比较,链式比较使用 && 运算符;对逐元素的比较使用 & 运算符,此运算符也可用于数组。例如, 0 .< A .< 1 的结果是一个对应的布尔数组,满足条件的元素返回 true 。

操作符 .< 是特别针对数组的; 只有当 A 和 B 有着相同的大小时, A .< B 才是合法的。比较的结果是布尔型数组, 其大小同 A 和 B 相同. 这样的操作符被称为按元素操作符; Julia 提供了一整套的按元素操作符: .*, .+, 等等。 有的按元素操作符也可以接受纯量, 例如上一段的 0 .< A .< B. 这种表示法的意思是, 相应的纯量操作符会被施加到每一 个元素上去。

运算优先级

Julia 运算优先级从高至低依次为:

类型 运算符

语法 . 跟随 ::

幂 ^ 和 .^ 等效

分数 // 和 .//

乘除 / % & \和 .* ./ .% .\

位移 << >> >>> 和 .<< .>> .>>>

加减 + - | $ 和 .+ .-

语法 : .. 跟随于 |>

比较 > < >= <= == === != !== <: 和 .> .< .>= .<= .== .!=

逻辑 && 跟随于 || 跟随于 ?

赋值 = += -= *= /= //= \= ^= %= \|= &= $= <<= >>= >>>= 及 .+= .-= .*= ./= .//= .\= .^= .%=


基本函数

Julia 提供了一系列数学函数和运算符:

舍入函数

函数 描述 返回类型

round(x) 把 x 舍入到最近的整数 FloatingPoint

iround(x) 把 x 舍入到最近的整数 Integer

floor(x) 把 x 向 -Inf 取整 FloatingPoint

ifloor(x) 把 x 向 -Inf 取整 Integer

ceil(x) 把 x 向 +Inf 取整 FloatingPoint

iceil(x) 把 x 向 +Inf 取整 Integer

trunc(x) 把 x 向 0 取整 FloatingPoint

itrunc(x) 把 x 向 0 取整 Integer

除法函数

函数 描述

div(x,y) 截断取整除法;商向 0 舍入

fld(x,y) 向下取整除法;商向 -Inf 舍入

cld(x,y) 向上取整除法; 商向 +Inf 舍入

rem(x,y) 除法余数;满足 x == div(x,y)*y + rem(x,y) ,与 x 同号

divrem(x,y) 返回 (div(x,y),rem(x,y))

mod(x,y) 取模余数;满足 x == fld(x,y)*y + mod(x,y) ,与 y 同号

mod2pi(x) 对 2pi 取模余数; 0 <= mod2pi(x) < 2pi

gcd(x,y...) x, y, ... 的最大公约数,与 x 同号

lcm(x,y...) x, y, ... 的最小公倍数,与 x 同号

符号函数和绝对值函数

函数 描述

abs(x) x 的幅值

abs2(x) x 的幅值的平方

sign(x) x 的正负号,返回值为 -1, 0, 或 +1

signbit(x) 是否有符号位,有 () 或者 无 (false)

copysign(x,y) 返回一个数,它具有 x 的幅值, y 的符号位

flipsign(x,y) 返回一个数,它具有 x 的幅值, x*y 的符号位

乘方,对数和开方

函数 描述

sqrt(x) √x x 的平方根

cbrt(x) ?x x 的立方根

hypot(x,y) 误差较小的 sqrt(x^2 + y^2)

exp(x) 自然指数 e 的 x 次幂

expm1(x) 当 x 接近 0 时,精确计算 exp(x)-1

ldexp(x,n) |当 n 为整数时,高效计算x*2^n

log(x) x 的自然对数

log(b,x) 以 b 为底 x 的对数

log2(x) 以 2 为底 x 的对数

log10(x) 以 10 为底 x 的对数

log1p(x) 当 x 接近 0 时,精确计算 log(1+x)

exponent(x) trunc(log2(x))

significand(x) returns the binary significand (a.k.a. mantissa) of a floating-point number x

为什么要有 hypot, expm1, log1p 等函数,参见 John D. Cook 的博客: expm1, log1p, erfc 和 hypot 。

三角函数和双曲函数

Julia 内置了所有的标准三角函数和双曲函数

sin    cos    tan    cot    sec    csc

sinh  cosh  tanh  coth  sech  csch

asin  acos  atan  acot  asec  acsc

asinh  acosh  atanh  acoth  asech  acsch

sinc  cosc  atan2

除了 atan2 之外,都是单参数函数。 atan2 给出了 x 轴,与由 x 、 y 确定的点之间的弧度 。

另外,sinpi(x)和 cospi(x)各自被提供给更准确的 sin(pi*x)和 cos(pi*x)的计算。

如果想要以度,而非弧度,为单位计算三角函数,应使用带 d 后缀的函数。例如,sind(x) 计算 x 的正弦值,这里 x 的单位是度。以下的列表是全部的以度为单位的三角函数:

sind  cosd  tand  cotd  secd  cscd

asind  acosd  atand  acotd  asecd  acscd

特殊函数

函数 描述

erf(x) x 处的 误差函数

erfc(x) 补误差函数。当 x 较大时,精确计算 1-erf(x)

erfinv(x) erf 的反函数

erfcinv(x) erfc 的反函数

erfi(x) 将误差函数定义为 -im erf(x im) ,其中 im 是虚数单位

erfcx(x) 缩放的互补误差函数,即对较大的 x 值的准确的 exp(x ^ 2)* erfc(x)

dawson(x) 缩放虚误差函数,又名道森函数,即对较大的 x 值求精确的 exp(-x^2) erfi(x) sqrt(pi) / 2

gamma(x) x 处的 gamma 函数

lgamma(x) 当 x 较大时,精确计算 log(gamma(x))

lfact(x) 对较大的 x 求精确的 log(factorial(x)); 与对大于 1 的 x 值求 lgamma(x+1) 相等, 否则等于 0

digamma(x) x 处的 digamma 函数,即导数的衍生

beta(x,y) 在(x,y)处的 beta 函数

lbeta(x,y) 对较大的 x 或 y 值求准确的 log(beta(x,y))

eta(x) x 处的 Dirichlet eta 函数

zeta(x) x 处的 Riemann zeta 函数

airy(z), airyai(z), airy(0,z) z 处的 Airy Ai 函数

airyprime(z), airyaiprime(z), airy(1,z) Airy Ai 函数在 z 处的导数

airybi(z), airy(2,z) z 处的 Airy Bi 函数

airybiprime(z), airy(3,z) Airy Bi 函数在 z 处的导数

airyx(z), airyx(k,z) 缩放 Airy Ai 函数 以及 k 对 z 的导数

besselj(nu,z) 对 z 中一阶 nu 的贝塞尔函数

besselj0(z) besselj(0,z)

besselj1(z) besselj(1,z)

besseljx(nu,z) 对 z 中一阶 nu 的缩放贝塞尔函数

bessely(nu,z) 对 z 中二阶 nu 的贝塞尔函数

bessely0(z) bessely(0,z)

bessely1(z) bessely(1,z)

besselyx(nu,z) 对 z 中二阶 nu 的缩放贝塞尔函数

besselh(nu,k,z) 对 z 中三阶 nu (例如汉克尔函数)的贝塞尔函数; k 必须为 1 或 2

hankelh1(nu,z) besselh(nu, 1, z)

hankelh1x(nu,z) 缩放 besselh(nu, 1, z)

hankelh2(nu,z) besselh(nu, 2, z)

hankelh2x(nu,z) 缩放 besselh(nu, 2, z)

besseli(nu,z) 对 z 中一阶 nu 的修正贝塞尔函数

besselix(nu,z) 对 z 中一阶 nu 的缩放修正贝塞尔函数

besselk(nu,z) 对 z 中二阶 nu 的修正贝塞尔函数

besselkx(nu,z) 对二阶 o 的缩放修正贝塞尔函数

上一篇: 整数和浮点数

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    许先生__阅读 602评论 0 3
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,145评论 0 13
  • 表达式和运算符 程序中最简单的表达式就是,程序中的常量 变量名也是一种简单的表达式 复杂的表达式是由简单的表达式组...
    zhaolion阅读 1,632评论 3 12
  • 表达式 表达式是由数字、运算符、数字分组符号(如括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合...
    劼哥stone阅读 560评论 0 4
  • C++运算符重载-上篇 本章内容:1. 运算符重载的概述2. 重载算术运算符3. 重载按位运算符和二元逻辑运算符4...
    Haley_2013阅读 2,295评论 0 51