Julia 笔记之变量-整数-浮点数

没关注?伸出手指点这里—


1引言
本文内容摘抄自 Julia 中文文档, 分享一些基础知识,我会选择性的摘取部分知识,不会分享太复杂的,免得降低入门者的兴趣。
网址:
https://docs.juliacn.com/latest/

2变量
变量和其它变成语言基本上是一样的,使用 = 号赋值:
# 将 10 赋值给变量 x
julia> x = 10
10
# 使用 x 的值做计算
julia> x + 1
11
# 重新给 x 赋值
julia> x = 1 + 1
2
# 也可以给 x 赋其它类型的值, 比如字符串文本
julia> x = "Hello World!"
"Hello World!"
还可以使用 UTF-8 编码的 Unicode 字符作为变量名:
julia> δ = 0.00001
1.0e-5
julia> 안녕하세요 = "Hello"
"Hello"
很多 Unicode 数学符号可以使用 反斜杠 加 LaTeX 符号接 tab 健打出。例如:变量名 δ 可以通过delta-tab
来输入,甚至可以用 alpha-tab-hat-tab-^(2)-tab
来输入 α̂⁽²⁾ 这种复杂的变量名。
合法的变量名:
变量名字必须以英文字母(A-Z 或 a-z)、下划线或编码大于 00A0 的 Unicode 字符的一个子集开头。
一类特定的变量名是只包含下划线的变量名。这些标识符只能赋值,不能用于给其他变量赋值。严格来说,它们只能用作 左值 而不能作 右值:
julia> x, ___ = size([2 2; 1 1])
(2, 2)
julia> y = ___
ERROR: syntax: all-underscore identifier used as rvalue
唯一明确禁止的变量名称是内置关键字的名称:
julia> else = false
ERROR: syntax: unexpected "else"
julia> try = "No"
ERROR: syntax: unexpected "="
命名规范:
变量的名字采用小写。 使用下划线(’_’)来分隔名字中的单词,但是不鼓励使用下划线 除非在不使用下划线时名字会非常难读。 类型 (Type) 和模块(Module)的名字使用大写字母开头,并且用大写字母 而不是用下划线分隔单词。 函数(function)和宏(macro)的名字使用小写,不使用下划线。 会对输入参数进行更改的函数要使用 ! 结尾。这些函数有时叫做 “mutating” 或 “in-place” 函数,因为它们在被调用后会修改他们的输入参数的内容 而不仅仅只是返回一个值。
3整数
Julia 提供了很丰富的原始数值类型,并基于它们定义了一整套算术操作,还提供按位运算符以及一些标准数学函数。以下是 Julia 的原始数值类型:


整数
julia> 1
1
julia> 1234
1234
整型字面量的默认类型取决于目标系统是 32 位还是 64 位架构:
# 32 位系统:
julia> typeof(1)
Int32
# 64 位系统:
julia> typeof(1)
Int64
整型等原始数值类型的最小和最大可表示的值可用 typemin
和 typemax
函数得到:
julia> (typemin(Int32), typemax(Int32))
(-2147483648, 2147483647)
julia> for T in [Int8,Int16,Int32,Int64,Int128,UInt8,UInt16,UInt32,UInt64,UInt128]
println("$(lpad(T,7)): [$(typemin(T)),$(typemax(T))]")
end
Int8: [-128,127]
Int16: [-32768,32767]
Int32: [-2147483648,2147483647]
Int64: [-9223372036854775808,9223372036854775807]
Int128: [-170141183460469231731687303715884105728,170141183460469231731687303715884105727]
UInt8: [0,255]
UInt16: [0,65535]
UInt32: [0,4294967295]
UInt64: [0,18446744073709551615]
UInt128: [0,340282366920938463463374607431768211455]
溢出行为:
在 Julia 里,超出一个类型可表示的最大值会导致环绕 (wraparound) 行为:
julia> x = typemax(Int64)
9223372036854775807
julia> x + 1
-9223372036854775808
julia> x + 1 == typemin(Int64)
true
推荐使用任意精度算术中的 BigInt
类型作为替代。下面是溢出行为的一个例子以及如何解决溢出:
julia> 10^19
-8446744073709551616
julia> big(10)^19
10000000000000000000
浮点数
浮点数字面量以标准格式表示,必要时可使用E
-表示法:
julia> 1.0
1.0
julia> 1.
1.0
julia> 0.5
0.5
julia> .5
0.5
julia> -1.23
-1.23
julia> 1e10
1.0e10
julia> 2.5e-4
0.00025
上面的结果都是 Float64 类型的值。使用 f 替代 e 可以得到 Float32 类型的字面量:
julia> x = 0.5f0
0.5f0
julia> typeof(x)
Float32
julia> 2.5f-4
0.00025f0
数值可以很容易地转换为 Float32 类型:
julia> x = Float32(-1.5)
-1.5f0
julia> typeof(x)
Float32
Julia 也支持半精度浮点数(Float16),但它们是使用 Float32 进行软件模拟实现的:
julia> sizeof(Float16(4.))
2
julia> 2*Float16(4.)
Float16(8.0)
下划线 _ 可用作数字分隔符:
julia> 10_000, 0.000_000_005, 0xdead_beef, 0b1011_0010
(10000, 5.0e-9, 0xdeadbeef, 0xb2)
浮点数中的零:
浮点数有两种零,正零和负零。它们相互相等但有着不同的二进制表示,可以使用 bitstring
函数来查看:
julia> 0.0 == -0.0
true
julia> bitstring(0.0)
"0000000000000000000000000000000000000000000000000000000000000000"
julia> bitstring(-0.0)
"1000000000000000000000000000000000000000000000000000000000000000"
特殊的浮点值:
有三种特定的标准浮点值不和实数轴上任何一点对应:

运算结果:
julia> 1/Inf
0.0
julia> 1/0
Inf
julia> -5/0
-Inf
julia> 0.000001/0
Inf
julia> 0/0
NaN
julia> 500 + Inf
Inf
julia> 500 - Inf
-Inf
julia> Inf + Inf
Inf
julia> Inf - Inf
NaN
julia> Inf * Inf
Inf
julia> Inf / Inf
NaN
julia> 0 * Inf
NaN
julia> NaN == NaN
false
julia> NaN != NaN
true
julia> NaN < NaN
false
julia> NaN > NaN
false
typemin 和 typemax 函数同样适用于浮点类型:
julia> (typemin(Float16),typemax(Float16))
(-Inf16, Inf16)
julia> (typemin(Float32),typemax(Float32))
(-Inf32, Inf32)
julia> (typemin(Float64),typemax(Float64))
(-Inf, Inf)
舍入模式:
一个数如果没有精确的浮点表示,就必须被舍入到一个合适的可表示的值。然而,如果想的话,可以根据舍入模式改变舍入的方式。
Julia 所使用的默认模式总是 RoundNearest
,指舍入到最接近的可表示的值,这个被舍入的值会使用尽量少的有效位数。
数值字面量系数:
为了让常见的数值公式和表达式更清楚,Julia 允许变量直接跟在一个数值字面量后,暗指乘法。这可以让写多项式变得很清楚:
julia> x = 3
3
julia> 2x^2 - 3x + 1
10
julia> 1.5x^2 - .5x + 1
13.0
julia> 2^2x
64
数值字面量也能作为被括号表达式的系数:
julia> 2(x-1)^2 - 3(x-1) + 1
3
用于隐式乘法的数值字面量系数的优先级高于其它的二元运算符,例如乘法(*)和除法(/、 以及 //)。这意味着,比如说,1 / 2im 等于 -0.5im 以及 6 // 2(2+1) 等于 1 // 1。
此外,括号表达式可以被用作变量的系数,暗指表达式与变量相乘:
julia> (x-1)x
6
但是,无论是把两个括号表达式并列,还是把变量放在括号表达式之前,都不会被用作暗指乘法:
julia> (x-1)(x+1)
ERROR: MethodError: objects of type Int64 are not callable
julia> x(x+1)
ERROR: MethodError: objects of type Int64 are not callable
这两种表达式都会被 解释成函数调用:所有不是数值字面量的表达式,后面紧跟一个括号,就会被 解释成使用括号内的值来调用函数。因此,在这两种情况中,都会因为左边的值并不是函数而产生错误。
零和一的字面量:
Julia 提供了 0 和 1 的字面量函数,可以返回特定类型或所给变量的类型:

这些函数在数值比较中可以用来避免不必要的类型转换带来的开销。
例如:
julia> zero(Float32)
0.0f0
julia> zero(1.0)
0.0
julia> one(Int32)
1
julia> one(BigFloat)
1.0
4结尾
想要仔细了解可以看看中文文档。

欢迎加入生信交流群。加我微信我也拉你进 微信群聊 老俊俊生信交流群
哦,数据代码已上传至QQ群,欢迎加入下载。
群二维码:
老俊俊微信:
知识星球:
所以今天你学习了吗?
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
往期回顾
◀跟着 Cell 学 Ribo–seq 分析 三 (Metagene Plot)
◀...
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!