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定义了IntUInt类型,它们分别是系统有符号和无符号的原生整数类型的别名。

# 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也可以表示无穷大,具体如下表:

Float16Float32Float64名称描述
Inf16Inf32Inf正无穷一个大于所有有限浮点数的数
-Inf16-Inf32-Inf负无穷一个小于所有有限浮点数的数
NaN16NaN32NaN不是数(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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ArimaMisaki

如果知识有用请我喝杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值