julia学习笔记(二)——基本数据类型
2 数据类型
2.1 整数
如果想要在julia中输入整数字面值。如下:
julia> 3+4
7
至于你的整数字面值默认是什么数据类型,这取决于目标系统是32位还是64位架构。查看字面值或变量的数据类型使用typeof()方法,如下:
julia> typeof(1)
Int64
julia> typeof(124.4)
Float64
如果想要查看目标系统是32位还是64位架构,可以使用内置变量Sys.WORD_SIZE
进行查看。
julia> Sys.WORD_SIZE
64
Julia定义了Int
和UInt
类型,它们分别是系统有符号和无符号的原生整数类型的别名。
# 32 位系统:
julia> Int
Int32
julia> UInt
UInt32
# 64 位系统:
julia> Int
Int64
julia> UInt
UInt64
如果你的数超过了32位表示的范围,但能用64位表示,那么无论是什么系统都可以用64位表示。
# 32 位或 64 位系统:
julia> typeof(3000000000)
Int64
那如何知道一个内置数据类型可以表示的范围呢?typemin和typemax可以查看它们能够表示的最小值和能够表示的最大值。
julia> (typemin(Int32),typemax(Int32))
(-2147483648, 2147483647)
一旦一个数超过了一个类型所能表示的最大值,则会出现环绕行为,这对于学过C++或者Java的应该都能理解。
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
2.2 浮点数
浮点数字面量以标准格式表示,必要时可以使用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
如果用e则为64位浮点数,如果用f则为32位浮点数。如:
julia> x = 0.5f0
0.5f0
julia> typeof(x)
Float32
julia> 2.5f-4
0.00025f0
如果想要将浮点64位数据转为浮点32位数据,则通过以下的方式可以解决这个问题。
julia> x = -1.5
-1.5
julia> typeof(x)
Float64
julia> x = Float32(x)
-1.5f0
julia> typeof(x)
Float32
julia支持表示正负零,但我们都知道,数学中正负零都是零,没有区别。
julia> 0.0 == -0.0
true
julia> bitstring(0.0)
"0000000000000000000000000000000000000000000000000000000000000000"
julia> bitstring(-0.0)
"1000000000000000000000000000000000000000000000000000000000000000"
julia也可以表示无穷大,具体如下表:
Float16 |
Float32 |
Float64 |
名称 | 描述 |
---|---|---|---|---|
Inf16 |
Inf32 |
Inf |
正无穷 | 一个大于所有有限浮点数的数 |
-Inf16 |
-Inf32 |
-Inf |
负无穷 | 一个小于所有有限浮点数的数 |
NaN16 |
NaN32 |
NaN |
不是数(Not a Number) | 一个不和任何浮点值(包括自己)相等(== )的值 |
由于我的电脑是64位的,故如果我想使用无穷大,只需使用Inf变量即可。如1除以正无穷应该是正无穷小:
julia> 1/Inf
0.0
2.3 机器精度
大多数实数都无法用浮点数准确表示,这是因为机器的精度有限。我们有必要知道两个相邻可表示的浮点数间的距离。他通常被叫做机器精度
。
Julia 提供了 eps
函数,它可以给出 1.0
与下一个 Julia 能表示的浮点数之间的差值。
对于eps函数来说,其传入的x就是下一个julia能表示的浮点数之间的差值。如:
julia> eps(Float32) #相当于1和2.0^23在机器中表示的差距
1.1920929f-7
julia> eps(Float64)
2.220446049250313e-16
julia> eps() # 与 eps(Float64) 相同
2.220446049250313e-16
2.4 舍入模式
一个数如果没有精确的浮点表示,那么就必须被舍入到一个合适的可表示的值。舍入方式使用的是IEEE754标准。
2.5 数值字面量系数
为了让一些多项式表达和公式表达更为明了,julia允许变量直接跟在一个数字字面量后,如1x
,这实际上为乘法关系1*x
。
julia> x = 3
3
julia> 2x^2 - 3x + 1
10
julia> 1.5x^2 - .5x + 1
13.0
需要注意的是,由于运算符有优先级,故我们建议打上括号。如:
# 2x^2实际上为2(x^2)
# 如果你想表示2x的2次方,建议写为(2x)^2
julia> x = 3
3
julia> 2x^2
18
julia> (2x)^2
36
括号表达式也可以位于变量前而不用写运算符,暗指乘法,如:
julia> x = 3
3
julia> (x-1)x
6
但是括号表达式位于括号表达式前则必须写运算符。
julia> (x-1)(x+1)
ERROR: MethodError: objects of type Int64 are not callable
Maybe you forgot to use an operator such as *, ^, %, / etc. ?
Stacktrace:
[1] top-level scope
@ REPL[12]:1
2.6 零和一的字面量
julia也提供了0和1的字面量函数,可以返回特定类型或所给变量的类型。这些函数在数值比较中可以用来避免不必要的类型转换带来的开销。
julia> zero(Float32)
0.0f0
julia> zero(1.0)
0.0
julia> one(Int32)
1
julia> one(BigFloat)
1.0
文章来源: blog.csdn.net,作者:ArimaMisaki,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/chengyuhaomei520/article/details/124681385
- 点赞
- 收藏
- 关注作者
评论(0)