Julia系列2nd -数据类型

Julia主要用于科学计算,所以对于数据类型的支持是相当完备的…
有过编程开发经验的人,都知道编程语言都离不开整数浮点数… 下面我们就从这两方面入手。

  • typemin()可以查看数据类型的最小值
  • typemax()可以查看数据类型的最大值
  • bitstring()可以查看数的二进制表示
  • typeof()可以查看任意对象的类型

1. 整数(和布尔)类型

Julia是支持无符号整数有符号整数的…,在Julia中,布尔类型是可以和整型相互转化的。(Pythoner 哭晕在厕所里…)

类型符号比特位最小值最大值
Int88-2^72^7-1
UInt8802^8-1
Int1616-2^152^15-1
UInt161602^16-1
Int3232-2^312^31-1
UInt323202^32-1
Int6464-2^632^63-1
UInt646402^64-1
Int128128-2^1272^127-1
UInt12812802^128-1
Bool8false(0)true(1)

1.1 整数类型的特点

对于Julia的整数类型,我们需要考虑两个方面:

  1. 有无符号
  2. 位数

Julia在确定字面值的过程中:

符号上:十进制数自动确定为有符号整型,其他进制的数处理为无符号整数。
位数上:十进制数会默认选择与OS的位数保持一致,若数字过大,则会选择更大的位数;而对于其他进制的数,则依据值的大小选择恰当的位数。

根据需要,我们可以使用:

  1. unsigned() ----- 将有符号数转为无符号数,忽略负值检查;
  2. signed() -------- 将无符号数转为有符号数,忽略范围越界;

这两个函数在转换时会讲原值变成位数相同的无符号或有符号数。慎用!!!


1.2 进制问题
  1. 0x ---- 表示十六进制数
  2. 0b ---- 表示二进制数
  3. 0o ---- 表示八进制数

需要强调的是:这里的x,b,o只能是小写字母。

无符号整数会以十六进制的方式展示

1.3 布尔类型(bool)

不能将整型当作bool使用

在这里插入图片描述
在这里插入图片描述

2. 浮点类型

类型精度比特位最小值最大值
Float16half(半精度)16-Inf16Inf16
Float32single(单精度)32-Inf32Inf32
Float64double(双精度)64-InfInf

浮点类型是按照所能表示的精度来划分的。

Float16基本上用不到,根据官方文档的说明,Float16是使用Float32进行模拟实现的。如何理解这句话呢?即就算我们遇到Float16的数值,其在内部运算时依然按照Float32进行。

2.1 精度及eps函数

我们知道计算机内部都是二进制的,逻辑判断非常简单(非0则1),但是在表达力方面还是有所欠缺的。浮点数在计算机中基本无法准确的表示。

机器精度:计算机中两个相邻可表示的浮点数之间的误差。
Julia 提供了eps()函数 帮助我们去查看1.0和下一个Julia能正确表示的浮点数之间的差值。更加详细的内容可以去REPL中的帮助模式中查看。

2.2 零及zero(),one()函数

在Julia中,浮点数中有两个零:正零(0.0)负零(-0.0)

julia> 0.0 == -0.0
true

julia> bitstring(0.0)
"0000000000000000000000000000000000000000000000000000000000000000"

julia> bitstring(-0.0)
"1000000000000000000000000000000000000000000000000000000000000000"

虽然两者相等,但是我们发现其在内存中的表示却不一样。这自己挖坑自己跳的节奏啊…
为了避免出现问题,Julia专门为我们提供了两个有趣的函数:

  1. zero(x): 生成x的0;
  2. one(x): 生成x的1;

2.3 特殊的浮点数
Float16Float32Float64解释描述
Inf16Inf32Inf正无穷大于该类型所能表达的所有有限浮点值
-Inf16-Inf32-Inf负无穷小于该类型所能表达的所有有限浮点值
NaN16NaN32NaNNot a Number不和任何浮点数(包括自己)相等

需要我们注意以下几点:

  1. 有了无穷的存在,Julia中的「浮点运算」就可以正常的除零操作(不推荐使用);
  2. 通过**isfinite(x)isinf(x)**来判断是否是无穷;
  3. 通过**isnan(x)**来判断是否是NaN;

你会不会有Inf16 > Inf 的疑问呢?

julia> typemax(Float16) < typemax(Float64)
false

  1. 大数运算使用BigInt,BigFloat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值