Julia之初体验(二)变量

 

无论使用预编译的二进制文件还是从源代码进行编译,Julia的安装都非常简单。 按照https://julialang.org/downloads/上的说明下载并安装Julia。

学习和使用Julia的最简单方法是通过双击Julia可执行文件或从命令行运行julia来启动交互式会话(也称为read-eval-print循环或“ REPL”):

要退出交互式会话,请键入CTRL-D(同时按Ctrl / ^键和d键),或键入exit()。 在交互模式下运行时,julia将显示横幅,并提示用户输入。 用户输入完整的表达式(例如1 + 2)并按回车后,交互式会话将评估该表达式并显示其值。 如果表达式以尾部分号输入到交互式会话中,则不会显示其值。 无论是否显示,变量ans都绑定到最后一个求值表达式的值。 ans变量仅在交互式会话中绑定,而在以其他方式运行Julia代码时则不绑定。

要评估写在源文件file.jl中的表达式,就输入include(“ file.jl”)。

要以非交互方式在文件中运行代码,可以将其作为julia命令的第一个参数:

$ julia script.jl arg1 arg2...

 

一、变量

在Julia中,变量是与值关联(或绑定)的名称。 当您想存储一个值(例如,在一些数学运算之后获得的值)供以后使用时,此功能很有用。 例如:

# Assign the value 10 to the variable x
julia> x = 10
10

# Doing math with x's value
julia> x + 1
11

# Reassign x's value
julia> x = 1 + 1
2

# You can assign values of other types, like strings of text
julia> x = "Hello World!"
"Hello World!"

Julia提供了一个非常灵活的变量命名系统。 变量名区分大小写,没有语义(也就是说,语言不会根据变量名区别对待变量,中文也可以作为变量名!点赞!!)。

julia> x = 1.0
1.0

julia> y = -3
-3

julia> Z = "My string"
"My string"

julia> customary_phrase = "Hello world!"
"Hello world!"

julia> UniversalDeclarationOfHumanRightsStart = "人人生而自由,在尊严和权利上一律平等。"
"人人生而自由,在尊严和权利上一律平等。"

允许使用Unicode名称(采用UTF-8编码):输入:\delta 按tab键

julia> δ = 0.00001
1.0e-5
julia> 我说 = "Hello"
"Hello"

在Julia REPL和其他几个Julia编辑环境中,您可以通过键入反斜杠LaTeX符号名称和制表符来键入许多Unicode数学符号。 例如,可以通过键入\ delta-tab输入变量名δ,或者通过\ alpha-tab- \ hat-tab-\ _ 2-tab甚至输入α̂2来输入。 (如果您在某个地方(例如在他人的代码中)发现不知道如何键入的符号,则REPL帮助将告诉您:只需键入?,然后粘贴该符号即可。)

如有需要,Julia甚至可以让您重新定义内置的常量和函数(尽管不建议这样做以避免潜在的混乱):还是别这么做吧,我们还是初学者。

julia> pi = 3
3

julia> pi
3

julia> sqrt = 4
4

但是,如果尝试重新定义已使用的内置常量或函数,Julia会给您一个错误:

julia> pi
π = 3.1415926535897...

julia> pi = 3
ERROR: cannot assign a value to variable MathConstants.pi from module Main

julia> sqrt(100)
10.0

julia> sqrt = 4
ERROR: cannot assign a value to variable Base.sqrt from module Main

 

二、整数和浮点数

整数和浮点值是算术和计算的基本构建块。这种值的内置表示形式称为数字原语,而整数和浮点数的表示形式作为代码中的立即值称为数字文字。例如,1是整数文字,而1.0是浮点文字;它们作为对象的二进制内存表示形式是数字基元。

Julia提供了多种原始数字类型,并且在它们之上定义了算术和按位运算符以及标准数学函数的完整补充。这些直接映射到现代计算机本身支持的数字类型和运算上,从而使Julia可以充分利用计算资源。此外,Julia提供了对任意精度算术的软件支持,该算法可以处理无法在本机硬件表示中有效表示的数值上的运算,但会以相对较慢的性能为代价。

以下是Julia的原始数字类型:

整数型

Type

类型

Signed?

是否有负号

Number of bits

比特数

Smallest value

最小值

Largest value

最大值

Int88-2^72^7 - 1
UInt8 802^8 - 1
Int1616-2^152^15 - 1
UInt16 1602^16 - 1
Int3232-2^312^31 - 1
UInt32 3202^32 - 1
Int6464-2^632^63 - 1
UInt64 6402^64 - 1
Int128128-2^1272^127 - 1
UInt128 12802^128 - 1
BoolN/A8false (0)true (1)

注意:Bool布尔型是整数型

 

浮点型:

TypePrecisionNumber of bits
Float16half16
Float32single32
Float64double64

 

julia> 1
1

julia> 1234
1234

整数文字的默认类型取决于目标系统是32位体系结构还是64位体系结构:

# 32-bit system:
julia> typeof(1)
Int32

# 64-bit system:
julia> typeof(1)
Int64

查类型用 typeof(),这相当于python的type()

# 32-bit system:
julia> Int
Int32
julia> UInt
UInt32

# 64-bit system:
julia> Int
Int64
julia> UInt
UInt64
# 32-bit or 64-bit system:
julia> typeof(3000000000)
Int64

使用0x前缀和十六进制(以16为基)数字0-9a-f输入和输出无符号整数(大写数字A-F也适用于输入)。 无符号值的大小取决于所使用的十六进制数字的数量:

julia> 0x1
0x01

julia> typeof(ans)
UInt8

julia> 0x123
0x0123

julia> typeof(ans)
UInt16

julia> 0x1234567
0x01234567

julia> typeof(ans)
UInt32

julia> 0x123456789abcdef
0x0123456789abcdef

julia> typeof(ans)
UInt64

julia> 0x11112222333344445555666677778888
0x11112222333344445555666677778888

julia> typeof(ans)
UInt128

此行为基于以下观察结果:当人们使用无符号十六进制文字作为整数值时,通常是使用它们来表示固定的数字字节序列,而不仅仅是整数。

注意:变量ans是指在交互式会话中评估的最后一个表达式的值。有点像Mathematica中的%。 当以其他方式运行Julia代码时,不会发生这种情况。

还支持二进制和八进制文字:

julia> 0b10
0x02

julia> typeof(ans)
UInt8

julia> 0o010
0x08

julia> typeof(ans)
UInt8

julia> 0x00000000000000001111222233334444
0x00000000000000001111222233334444

julia> typeof(ans)
UInt128

 

浮点数字

文字浮点数以标准格式表示,必要时使用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
julia> 0.5f0
0.5f0

julia> typeof(ans)
Float32

julia> 2.5f-4
0.00025f0

 

julia> Float32(-1.5)
-1.5f0

julia> typeof(ans)
Float32
julia> 0x1p0
1.0

julia> 0x1.8p3
12.0

julia> 0x.4p-1
0.125

julia> typeof(ans)
Float64
julia> 0.0 == -0.0
true

julia> bitstring(0.0)
"0000000000000000000000000000000000000000000000000000000000000000"

julia> bitstring(-0.0)
"1000000000000000000000000000000000000000000000000000000000000000"

 

特殊浮点值

有三个指定的标准浮点值,它们与实数线上的任何点都不对应:

Float16Float32Float64NameDescription
Inf16Inf32Infpositive infinity无穷大a value greater than all finite floating-point values大于所有有限浮点值的值
-Inf16-Inf32-Infnegative infinity负无穷大a value less than all finite floating-point values小于所有有限浮点值的值
NaN16NaN32NaNnot a number 非数a value not == to any floating-point value (including itself)不等于任何浮点值(包括其自身)的值
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> (typemin(Float16),typemax(Float16))
(-Inf16, Inf16)

julia> (typemin(Float32),typemax(Float32))
(-Inf32, Inf32)

julia> (typemin(Float64),typemax(Float64))
(-Inf, Inf)

机器精度

大多数实数不能用浮点数精确表示,因此,出于许多目的,重要的是要知道两个相邻的可表示浮点数之间的距离,这通常称为机器ε。

Julia提供了eps,它给出了1.0与下一个更大的可表示浮点值之间的距离:

julia> eps(Float32)
1.1920929f-7

julia> eps(Float64)
2.220446049250313e-16

julia> eps() # same as eps(Float64)
2.220446049250313e-16

任意精度算法

julia> BigInt(typemax(Int64)) + 1
9223372036854775808

julia> big"123456789012345678901234567890" + 1
123456789012345678901234567891

julia> parse(BigInt, "123456789012345678901234567890") + 1
123456789012345678901234567891

julia> big"1.23456789012345678901"
1.234567890123456789010000000000000000000000000000000000000000000000000000000004

julia> parse(BigFloat, "1.23456789012345678901")
1.234567890123456789010000000000000000000000000000000000000000000000000000000004

julia> BigFloat(2.0^66) / 3
2.459565876494606882133333333333333333333333333333333333333333333333333333333344e+19

julia> factorial(BigInt(40))
815915283247897734345611269596115894272000000000
julia> x = typemin(Int64)
-9223372036854775808

julia> x = x - 1
9223372036854775807

julia> typeof(x)
Int64

julia> y = BigInt(typemin(Int64))
-9223372036854775808

julia> y = y - 1
-9223372036854775809

julia> typeof(y)
BigInt

赋值运算

julia> x = 3
3

julia> 2x^2 - 3x + 1
10

julia> 1.5x^2 - .5x + 1
13.0
julia> 2^2x
64

还有两个函数:与python相似。

FunctionDescription
zero(x)Literal zero of type x or type of variable x
one(x)Literal one of type x or type of variable x

 

 

2020.5.21

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bowen2006

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值