Julia-整数和浮点数
整数和浮点值是算术和计算的基础。这些数值的内置表示被称作原始数值类型(numeric primitive),且整数和浮点数在代码中作为立即数时称作数值字面量(numeric literal)。例如,
1
是个整型字面量,1.0
是个浮点型字面量,它们在内存中作为对象的二进制表示就是原始数值类型。Julia 提供了很丰富的原始数值类型,并基于它们定义了一整套算术操作,还提供按位运算符以及一些标准数学函数。这些函数能够直接映射到现代计算机原生支持的数值类型及运算上,因此 Julia 可以充分地利用运算资源。此外,Julia 还为任意精度算术提供了软件支持,对于无法使用原生硬件表示的数值类型,Julia 也能够高效地处理其数值运算。当然,这需要相对的牺牲一些性能。
整型
整型总体上包括有符号型和无符号型,其中这两大类包括8、16、32、62、128和BigInt和还有bool。分别表示二进制位数。BigInt是高精度整型,他的数字表示范围无穷大。
类型 | 带符号? | 比特数 | 最小值 | 最大值 |
---|---|---|---|---|
Int8
|
✓ | 8 | -2^7 | 2^7 - 1 |
UInt8
|
8 | 0 | 2^8 - 1 | |
Int16
|
✓ | 16 | -2^15 | 2^15 - 1 |
UInt16
|
16 | 0 | 2^16 - 1 | |
Int32
|
✓ | 32 | -2^31 | 2^31 - 1 |
UInt32
|
32 | 0 | 2^32 - 1 | |
Int64
|
✓ | 64 | -2^63 | 2^63 - 1 |
UInt64
|
64 | 0 | 2^64 - 1 | |
Int128
|
✓ | 128 | -2^127 | 2^127 - 1 |
UInt128
|
128 | 0 | 2^128 - 1 | |
Bool
|
N/A | 8 |
false (0)
|
|
浮点类型
浮点型分为半精度Float16、单精度Float32和双精度Float64。
类型 | 精度 | 比特数 |
---|---|---|
Float16
|
half | 16 |
Float32
|
single | 32 |
Float64
|
double | 64 |
整数字面量以标准形式表示:
julia> 1
1julia> 1234
1234
整型字面量的默认类型取决于目标系统是 32 位还是 64 位架构:
# 32 位系统:
julia> typeof(1)
Int32# 64 位系统:
julia> typeof(1)
Int64
- 十六进制数以0x开头
- 八进制数以0b开头
- 二进制数以0o开头
- typemax和typemin函数分别用来返回某个类型的最大最小数
超出一个类型可表示的最大值会溢出。
julia> x = typemax(Int64)
9223372036854775807julia> x + 1
-9223372036854775808julia> x + 1 == typemin(Int64)
true
除法错误
有两种情况会产生除法错误:除以零和-1除以最小的负数,都会抛出一个DividError错误。
浮点数
浮点数字面量也使用标准格式表示,必要时可使用 E-表示法:
julia> 1.0
1.0julia> 1.
1.0julia> 0.5
0.5julia> .5
0.5julia> -1.23
-1.23julia> 1e10
1.0e10julia> 2.5e-4
0.00025
上面的结果都是 Float64
值。使用 f
替代 e
可以得到 Float32
的字面量:
julia> 0.5f0
0.5f0julia> typeof(ans)
Float32julia> 2.5f-4
0.00025f0
数值容易就能转换成 Float32
:
julia> Float32(-1.5)
-1.5f0julia> typeof(ans)
Float32
也存在十六进制的浮点数字面量,但只适用于 Float64
值。一般使用 p
前缀及以 2 为底的指数来表示:
julia> 0x1p0
1.0julia> 0x1.8p3
12.0julia> 0x.4p-1
0.125julia> typeof(ans)
Float64
Julia 也支持半精度浮点数(Float16
),但它们是使用 Float32
进行模拟实现的。
julia> sizeof(Float16(4.))
2julia> 2*Float16(4.)
Float16(8.0)
下划线 _
可用作数字分隔符:
julia> 10_000, 0.000_000_005, 0xdead_beef, 0b1011_0010
(10000, 5.0e-9, 0xdeadbeef, 0xb2)
浮点数中有两个零,0.0和-0.0,这两个零相等但是有着不同的二进制表示。
特殊的浮点数
有三种特定的标准浮点值不和实数轴上任何一点对应:
Float16
|
Float32
|
Float64
|
名称 | 描述 |
---|---|---|---|---|
Inf16
|
Inf32
|
Inf
|
正无穷 | 一个大于所有有限浮点数的数 |
-Inf16
|
-Inf32
|
-Inf
|
负无穷 | 一个小于所有有限浮点数的数 |
NaN16
|
NaN32
|
NaN
|
不是数(Not a Number) |
一个不和任何浮点值(包括自己)相等( |
机器精度
大多数实数在都无法用浮点数表示,因此两个可表示的浮点数的差值叫做机器精度。
Julia 提供了 eps
函数,它可以给出 1.0
与下一个 Julia 能表示的浮点数之间的差值。
julia> eps(Float32)
1.1920929f-7julia> eps(Float64)
2.220446049250313e-16julia> eps() # 与 eps(Float64) 相同
2.220446049250313e-16
eps
函数也可以接受一个浮点值作为参数,然后给出这个值与下一个可表示的值直接的绝对差。
julia> eps(1.0)
2.220446049250313e-16julia> eps(1000.)
1.1368683772161603e-13julia> eps(1e-27)
1.793662034335766e-43julia> eps(0.0)
5.0e-324
Julia 也提供了 nextfloat
和 prevfloat
两个函数分别返回基于参数的下一个更大或更小的可表示的浮点数:
julia> x = 1.25f0
1.25f0julia> nextfloat(x)
1.2500001f0julia> prevfloat(x)
1.2499999f0julia> bitstring(prevfloat(x))
"00111111100111111111111111111111"julia> bitstring(x)
"00111111101000000000000000000000"julia> bitstring(nextfloat(x))
"00111111101000000000000000000001"
这个例子体现了一般原则,即相邻可表示的浮点数也有着相邻的二进制整数表示。
舍入模式
默认舍入到最接近的可表示的值。
任意精度算术
julia提供了BigInt、BigFloat用来表示任意精度的值,同时也可以用parse函数利用字符串构建任意精度的值。
julia> BigInt(typemax(Int64)) + 1
9223372036854775808julia> parse(BigInt, "123456789012345678901234567890") + 1
123456789012345678901234567891julia> parse(BigFloat, "1.23456789012345678901")
1.234567890123456789010000000000000000000000000000000000000000000000000000000004julia> BigFloat(2.0^66) / 3
2.459565876494606882133333333333333333333333333333333333333333333333333333333344e+19julia> factorial(BigInt(40))
815915283247897734345611269596115894272000000000
零和一的字面量(这里不是很理解)
Julia 提供了 0 和 1 的字面量函数,可以返回特定类型或所给变量的类型。
函数 | 描述 |
---|---|
zero(x)
|
x 类型或变量 x 的类型的零字面量
|
one(x)
|
x 类型或变量 x 的类型的一字面量
|
这些函数在数值比较中可以用来避免不必要的类型转换带来的开销。
例如:
julia> zero(Float32)
0.0f0julia> zero(1.0)
0.0julia> one(Int32)
1julia> one(BigFloat)
1.0
Julia-整数和浮点数相关推荐
- c语言中浮点数和整数转换_C中的数据类型-整数,浮点数和空隙说明
c语言中浮点数和整数转换 C中的数据类型 (Data Types in C) There are several different ways to store data in C, and they ...
- 【廖雪峰python入门笔记】整数和浮点数
1. 区分整数和浮点数的原因 Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数. 整数和浮点数混合运算的结果则变成了浮点数. 1 + 2.0 # ==> 浮点数 3.0 为什么要 ...
- python判断一个数是整数、浮点数还是字符串
python判断一个数是整数.浮点数还是字符串 示例代码:
- python 除法取整_Python中整数和浮点数
Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致. 基本的运算: 使用括号可以提升优先级,这和数学运算完全一致,注意只能使用小括号,但是括号可以嵌套很多层: ...
- python如何计算整数和_Python中整数和浮点数
Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致. 基本的运算: 1 + 2 + 3 # ==> 6 4 * 5 - 6 # ==> 14 7.5 ...
- 浮点数和整数的区别python_Python中整数和浮点数
Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致. 基本的运算: 1 + 2 + 3 # ==> 6 4 * 5 - 6 # ==> 14 7.5 ...
- Python基础语法:数据类型、进制转换、转义字符、字符编码、整数与浮点数运算规则、布尔型运算规则
本人使用的python版本为:Python 3.7.4 Python中的基本数据类型 整数:和数学上的表示一样,如 1, 3, 100. 有时也用十六进制表示,如 0xffaa, 0x09ad等 浮点 ...
- python学习-注释、语法、整数、浮点数初步接触
文章目录 注释 编码特点 自定义函数 题外话 注释 井号(#),规范写法是"# " 井号+空格 python的代码风格是PEP8 python能够根据赋值自己定义数据类型,不需要单 ...
- python如何计算整数和_python 整数和浮点数
Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致. 基本的运算: 1 + 2 + 3 # ==> 6 4 * 5 - 6 # ==> 14 7.5 ...
- python字符串转浮点数_Python | 打印不同的值(整数,浮点数,字符串,布尔值)...
python字符串转浮点数 In the given example, we are printing different values like integer, float, string and ...
最新文章
- BP网络Python实现代码
- C++中operator的主要用法
- mysql 把一个字段的值_mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法...
- 学习笔记--asp.net页生命周期(转自msdn,仅为自己学习存储和有意读者使用)
- win7安装python3.6_Win7 64位下python3.6.5安装配置图文教程
- Python网络爬虫经典书籍推荐
- 海康摄像头监控预览二开,萤石云对接说明
- oracle中number的用法,Oracle Number数字
- 惠普服务器查看主板型号,win10惠普主板型号查看图文教程。
- 0基础怎么画出好看的水彩画美术集水彩教程入门级教程
- 配置Spring AOP aspectj-autoproxy标签源码解析
- 百度直连+cns完美,那怎么搭建CNS配合百度直连呢
- c打包html,cmake使用教程(十一)-使用cpack打包源码并编写自动化脚本上传到仓库...
- python 批量处理图片文件(做到图片不变形)
- 屏蔽常见垃圾蜘蛛和扫描工具的两种办法
- oracle 怎么看监听文件,【学习笔记】Oracle11G关于监听文件位置与监听文件大小限制...
- 盘点 11 月火火火火的 GitHub 项目
- C#二维码条码生成存入文本加缓存
- ffmpeg利用滤镜合并两个视频,一左一右---avfilter_link实现
- pandas数据分析读书笔记(三)