当前位置:K88软件开发文章中心编程语言非主流编程语言Julia → 文章内容

Julia 整数和浮点数

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-15 16:28:03

由 陈 创建,youj 最后一次修改 2016-08-12 整数和浮点数 整数和浮点数是算术和计算的基础。它们都是数字文本。例如 1 是整数文本, 1.0 是浮点数文本。 Julia 提供了丰富的基础数值类型,全部的算数运算符和位运算符,以及标准数学函数。这些数据和操作直接对应于现代计算机支持的操作。因此, Julia 能充分利用硬件的计算资源。另外, Julia 还从软件层面支持任意精度的算术 ,可以用于表示硬件不能原生支持的数值,当然,这牺牲了部分运算效率。 Julia 提供的基础数值类型有: 整数类型: Char 原生支持 Unicode 字符 ;详见字符串 。 浮点数类型: 类型 精度 位数 Float16 半精度 16 Float32 单精度 32 Float64 双精度 64 另外, 对复数和分数的支持建立在这些基础数据类型之上。所有的基础数据类型通过灵活用户可扩展的类型提升系统不需显式类型转换,就可以互相运算。 整数 使用标准方式来表示文本化的整数:julia> 11julia> 12341234 整数文本的默认类型,取决于目标系统是 32 位架构还是 64 位架构:# 32-bit system:julia> typeof(1)Int32# 64-bit system:julia> typeof(1)Int64Julia 内部变量 `WORD_SIZE` 用以指示目标系统是 32 位还是 64 位.# 32-bit system:julia> WORD_SIZE32# 64-bit system:julia> WORD_SIZE64 另外,Julia 定义了 Int 和 Uint 类型,它们分别是系统原生的有符号和无符号整数类型的别名:# 32-bit system:julia> IntInt32julia> UintUint32# 64-bit system:julia> IntInt64julia> UintUint64 对于不能用 32 位而只能用 64 位来表示的大整数文本,不管系统类型是什么,始终被认为是 64 位整数:# 32-bit or 64-bit system:julia> typeof(3000000000)Int64 无符号整数的输入和输出使用前缀 0x 和十六进制数字 0-9a-f (也可以使用 A-F )。无符号数的位数大小,由十六进制数的位数决定:julia> 0x10x01julia> typeof(ans)Uint8julia> 0x1230x0123julia> typeof(ans)Uint16julia> 0x12345670x01234567julia> typeof(ans)Uint32julia> 0x123456789abcdef0x0123456789abcdefjulia> typeof(ans)Uint64 二进制和八进制文本:julia> 0b100x02julia> typeof(ans)Uint8julia> 0o100x08julia> typeof(ans)Uint8 基础数值类型的最小值和最大值,可由 typemin 和 typemax 函数查询:julia> (typemin(Int32), typemax(Int32))(-2147483648,2147483647)julia> for T = {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] typemin 和 typemax 的返回值,与所给的参数类型是同一类的。(上述例子用到了一些将要介绍到的特性,包括 for 循环 ,字符串 ,及内插 。) 溢出 在 Julia 中,如果计算结果超出数据类型所能代表的最大值,将会发生溢出:julia> x = typemax(Int64)9223372036854775807julia> x + 1-9223372036854775808julia> x + 1 == typemin(Int64)true 可见, Julia 中的算数运算其实是一种同余算术 。它反映了现代计算机底层整数算术运算特性。如果有可能发生溢出,一定要显式的检查是否溢出;或者使用 BigInt 类型(详见任意精度的算术 )。 为了减小溢出所带来的影响,整数加减法、乘法、指数运算都会把原先范围较小的整数类型提升到 Int 或 Uint 类型。(除法、求余、位运算则不提升类型)。 除法错误 整数除法(div 功能)有两个额外的样例:被 0 除,和被最低的负数(typemin)-1 除。两个例子都抛出了一个 DivideError。余数和模运算(rem 和 mod)当它们的第二个参数为 0 时,抛出了一个 DivideError。 浮点数 使用标准格式来表示文本化的浮点数:julia> 1.01.0julia> 1.1.0julia> 0.50.5julia> .50.5julia> -1.23-1.23julia> 1e101.0e10julia> 2.5e-40.00025 上述结果均为 Float64 值。文本化的 Float32 值也可以直接输入,这时使用 f 来替代 e :julia> 0.5f00.5f0julia> typeof(ans)Float32julia> 2.5f-40.00025f0 浮点数也可以很容易地转换为 Float32 :julia> float32(-1.5)-1.5f0julia> typeof(ans)Float32 十六进制浮点数的类型,只能为 Float64 :julia> 0x1p01.0julia> 0x1.8p312.0julia> 0x.4p-10.125julia> typeof(ans)Float64 Julia 也支持半精度浮点数(Float16) ,但只用来存储。计算时,它们被转换为 Float32 :julia> sizeof(float16(4.))2julia> 2*float16(4.)8.0f0 浮点数类型的零 浮点数类型中存在两个零 ,正数的零和负数的零。它们相等,但有着不同的二进制表示,可以使用 bits 函数看出:julia> 0.0 == -0.0truejulia> bits(0.0)"0000000000000000000000000000000000000000000000000000000000000000"julia> bits(-0.0)"1000000000000000000000000000000000000000000000000000000000000000" 特殊的浮点数 有三个特殊的标准浮点数: 特殊值 名称 描述 Float16 Float32 Float64 Inf16 Inft32 Inf

[1] [2] [3]  下一页


Julia 整数和浮点数