julia学习笔记(二)——基本数据类型

举报
ArimaMisaki 发表于 2022/08/08 23:11:24 2022/08/08
【摘要】 文章目录 2 数据类型2.1 整数2.2 浮点数2.3 机器精度2.4 舍入模式2.5 数值字面量系数2.6 零和一的字面量 2 数据类型 2.1 整数 如果想要在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也可以表示无穷大,具体如下表:

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。