Julia程序设计2 数值类型
Julia程序設計2 數值類型
- 實數
- 整數
- 浮點數
- 數值類型的轉換
- 有理數與無理數
- 復數
Julia的數值類型與其他語言一般無二,這里有張總結的圖:
Julia數值類型分為實數和復數兩大類,下面分別介紹。
實數
整數
Julia中整型數據分為四大類,BigInt,Bool和Signed,Unsigned。
UInt是Unsigned Integer的縮寫,后面的數字表示精度,比如UInt32表示32-bit的Unsigned整型數據,UInt128表示128-bit的整型數據。Unsigned的含義是第一個bit不表示符號,所以精度為xxx的UInt變量可以表示0~2x?10 \sim 2^x-10~2x?1的整數,比如UInt8可以表示0~255的整數。
Int表示Signed整型數據,后面的數字同樣表示精度,但第一個bit表示整數的符號,第一位是1表示負號,第一位是0表示正號,因此精度為xxx的Int變量可以表示?2x?1~+2x?1-2^{x-1} \sim +2^{x-1}?2x?1~+2x?1的整數。Bool就是邏輯值,BigInt表示任意精度的整型數據。
Julia中typeof()函數返回整數的類型,整型數據默認精度與操作系統位數一致,64位的Windows系統默認整數類型是Int64
julia> typeof(1) Int64用typemin()和typemax()函數可以返回某個類型能夠表示的數值范圍:
julia> for T = {Int8,Int16,Int32,Int64,Int128,Uint8,Uint16,Uint32,Uint64,Uint128}println("$(lpad(T,7)): [$(typemin(T)),$(typemax(T))]")endInt8: [-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]浮點數
浮點數有四種類型:半精度浮點數(Float16)、單精度浮點數(Float32)、雙精度浮點數(Float64)、任意精度浮點數(BigFloat),用函數typeof()也可以返回浮點數的精度
julia> typeof(1.0) Float64另外precision()函數可以返回浮點數的有效數字位數
julia> precision(Float16) 11julia> precision(Float32) 24julia> precision(Float64) 53julia> precision(BigFloat) 256julia> precision(1.0) 53半精度、單精度、雙精度浮點數用來表示指數部分的bits數分別為5、8、11,假設表示指數部分的位數為yyy,精度為xxx,則表示的浮點數范圍為?2x?y×2y~+2x?y×2y-2^{x-y}\times 2^y \sim +2^{x-y}\times 2^y?2x?y×2y~+2x?y×2y,比如Float32,第0-22個bit表示小數部分,23-30個bit表示指數部分,第31個bit表示符號,例如
0.15625的符號為+,因此第31個bit填0,用乘2取整法確定0.15625的二進制表示為:0.00101,用科學計數法可以表示為1.01×2?31.01 \times 2^{-3}1.01×2?3,小數部分是1.01,IEEE默認格式是1.xxxxx,因此實際存小數點后的部分即可,因此第22、21位填入0、1,其余部分是0;指數部分是-3,因為指數部分是UInt8,為了表示負整數,IEEE規定指數需要加127(有符號時Int8表示的范圍是-128到+128),具體計算可以用-3加127換成二進制1111100,然后填入第29-23個bit,也可以用-3(10000011)取移碼(補碼取相反數)01111101再減1得到(01111100)。如果數值超出了某個類型能表示的最大/最小值就會溢出,因此某個類型能表示的最小值被稱為某個數值類型的機器誤差,用eps()可以返回某個類型的機器誤差的值
數值類型的轉換
整型轉換為浮點型有兩種方法,并且由整型轉換為浮點型的數還可以轉換回來:
julia> a = 1 1julia> typeof(a) Int64julia> a1 = Float32(a) 1.0f0julia> typeof(a1) Float32julia> a2 = convert(Float32,a) 1.0f0julia> typeof(a2) Float32julia> a3 = Int64(a1) 1julia> typeof(a3) Int64浮點數轉換類似,但本來就是浮點數的變量不能直接用類型轉換變成整型,需要用取整函數,否則會報錯:
有理數與無理數
有理數ab\frac{a}{b}ba?的分號在Julia中用符號\表示,它的數值類型由整數a,ba,ba,b的類型決定,如果輸入的分式不是最簡的Julia會自動約分
julia> typeof(2//3) Rational{Int64}有理數轉換成浮點數之后和它本身的值還是相等的
julia> a = 1//3 1//3julia> a - float(a) 0.0復數
虛數單位是im,real()與imag()分別返回復數的實部與虛部
julia> a = 2 + 2im 2 + 2imjulia> real(a) 2julia> imag(a) 2定義復數還可以用complex()函數,比如
julia> complex(2,2) 2 + 2imjulia> a = 2 2julia> b = 2 2julia> complex(a,b) 2 + 2im復數的類型是由實部和虛部的類型決定的
julia> typeof(complex(a,b)) Complex{Int64}復數的模、輻角、共軛、模的平方分別可以用abs(), angle(), conj(), abs2()計算
julia> z = 2+im 2 + 1imjulia> abs(z) 2.23606797749979julia> conj(z) 2 - 1imjulia> angle(z) 0.4636476090008061julia> abs2(z) 5上一講的數學符號也可以用來做復數的計算。
總結
以上是生活随笔為你收集整理的Julia程序设计2 数值类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Julia程序设计1 介绍和基础数学运算
- 下一篇: UA MATH564 概率论VI 数理统