數(shù)值的分類(初高中知識)
數(shù)值的分類| 用Sketch畫的
數(shù)值可以分為“實數(shù)(Real Number)”和“虛數(shù)(Imaginary Number)”卿嘲,實數(shù)又分為“有理數(shù)(Rational Number)”和“無理數(shù)(Irrational Number)”扳抽,有理數(shù)又可以分為“整數(shù)(Integer)”和“小數(shù)(Decimal)”叹括,整數(shù)又可以分為“正數(shù)(Positive Integer)”叁执,“負(fù)數(shù)(Negative Integer)”和0粤策。
綠色的是 role(角色), 橘黃色的是 class(類)
就是這么簡單明了
Perl 6 中的數(shù)值類型
Perl6 提供的數(shù)字類型概全了整個數(shù)字的各個分類耿戚,
- 角色:
Numeric
,Real
,Rational
- 類:
Complex
,Num
,Rat
,FatRat
,Int
- 類:
ComplexStr
,NumStr
,RatStr
,IntStr
數(shù)值純種:Complex/Num/Rat/FatRat/Int
-
Complex
是“虛數(shù)”恼蓬,或者稱為“復(fù)數(shù)” -
Num
是“實數(shù)” -
Rat
是“有理數(shù)” -
Int
是“整數(shù)”
這些基礎(chǔ)類型都 immutable(不可更改的)
Complex
# 虛數(shù)
a+bi #用 i 來表示虛位
COMPLEX.re #返回實部
COMPLEX.im #返回虛部
COMPLEX.reals #返回實部虛部 List
COMPLEX.polar #返回極坐標(biāo)系的實部虛部 List
####
.floor
.ceiling
.round
.truncate #truncate 去掉小數(shù)部分,只保留整數(shù)
####
COMPLEX.abs # sqrt(($z.re)2 + ($z.im)2)
COMPLEX.conj # 例如 1-4i 返回 1+4i
####
.gist .perl
Num
- is Cool does Real(Cool的方法以及Real方法都可以用)
- 雙精度的數(shù)值
Int
整數(shù)類型是我們?nèi)粘V凶畛S玫模?/p>
- 和Perl5一樣堕澄,數(shù)字之間的下劃線都會被忽略的邀跃,例如
2_0_00
和2000
和2_000
一樣:不論進(jìn)制霉咨,都可以用下劃線分
# 十六進(jìn)制
:16<BEFF>
0xBEFF # Perl 5/Python中的表示方式
# 八進(jìn)制
:8<377>
0o377 # Perl 5/Python中的表示方式
# 二進(jìn)制
:2<11111111>
0b121111111 # Perl 5/Python中的表示方式
#不論進(jìn)制,都可以用下劃線分
###########
INT.chr
INT.unival
# 指數(shù)之后取余數(shù) (INT ^ POWER) % MODULUS
INT.expmod(POWER,MODULUS)
# 分別遞次取余數(shù)坞嘀,
# LIST 中的第一個取余之后的商躯护,作為第二次的被除數(shù),依次...
# 可以方便地把秒 轉(zhuǎn)換成 年月天時分秒
INT.polymod(LIST)
#不止可以是 Int丽涩,Rat棺滞,Real也可以這個方法
# 是不是質(zhì)數(shù)
INT.is-prime
#返回數(shù)字的二進(jìn)制形式最右端(lower)為1的index
INT.lsb
#返回數(shù)字的二進(jìn)制形式最左端(higher)為1的index
INT.msb
###### 從Real角色繼承的方法
# from role Real
.Rat #轉(zhuǎn)成有理數(shù)類型
.rand
.sign
# 近似化取值
.round
.floor
.ceiling
.truncate
#轉(zhuǎn)換進(jìn)制:$n進(jìn)制,$digit小數(shù)位
# $n 必須在2到36, 返回字符串
#因為數(shù)字加字母總共就10+26=36位矢渊,不然無法表示了
INT.base($n继准,$digit)
Rat
- is Cool does Rational(Cool的方法以及Rational的方法都可以用)
- 默認(rèn)的小數(shù)都是Rat類型
- 寫出來的有小數(shù)點的數(shù)都是有理數(shù),因為你不可能寫出帶點的無理數(shù)來矮男。默認(rèn)都是 Rat 類型
FatRat
相比Rat
類移必,F(xiàn)atRat肥在精度保留
# 構(gòu)造器
FatRat.new($numerator,$denominator)
# 整型得到FatRat類型
INT.FatRat
# Rat型得到FatRat類型
RAT.FatRat
# 分子
$z.numeritor
# 分母
$z.denominator
# 分子、分母 List
$z.nude
# 約分到最小
$z.norm
#公約數(shù)只有1的兩個整數(shù)/自然數(shù),叫做互質(zhì) coprime
# 分式轉(zhuǎn)換成小數(shù)
$z.base-repeating($base)
#返回一個 list of 2 Str類型的毡鉴,分別是小數(shù)的`整數(shù)部分`崔泵,和`小數(shù)部分`。如果除不盡猪瞬,保留 $base 位
數(shù)值雜種: 數(shù)字字符串雜合體
就是某個類型的數(shù)字和 Str 的雜合體憎瘸,都是*Str (ComplexStr, NumStr, RatStr, IntStr)這樣的表示方式。
- 用作數(shù)字的時候是數(shù)值陈瘦,用作字符串的時候是
Str
幌甘。 - 都必須
*Str.new($i, $s)
這樣定義。第一個參數(shù)是對應(yīng)的數(shù)值痊项,第二個是字符串锅风。-
$i
是對應(yīng)的數(shù)字類型 -
$s
*是一個字符串類型的 -
$i
,$s
都是必須指定的
-
- 對應(yīng)的*Str 類型的是字符串和對應(yīng)數(shù)值類型 bless 到一起的,由兩部分組成鞍泉,可以分別提取這兩部分皱埠。
ComplexStr
- is Complex is Str()
- 把它當(dāng) Complex 用時,它會調(diào)用.Numeric方法返回數(shù)字部分咖驮,把它當(dāng)字符串用時漱逸,它就返回字符串的部分。所有的*Str 類型的數(shù)字字符串雜種都一樣游沿。
$z = ComplexStr.new($i, $s)
$z.Numeric #當(dāng)你把 ComplexStr 類型的時候,調(diào)用
$z.Complex #返回數(shù)字部分
$z.Str #返回字符串部分
$z1 cmp $z2 #True 如果$i,$s 的順序和值都一樣
NumStr
$n = NumStr.new($i,$s)
$n.Num
$n.Str
$n.Numeric #默認(rèn)在數(shù)字環(huán)境下調(diào)用
$n1 cmp $n2 #先比對$i.再$s
RatStr
$r = RatStr.new($i,$s)
$r.Rat
$r.Str
$r.Numeric
$r1 cmp $r2
IntStr
$i = Int.new($i,$s)
$i.Int
$i.Str
$i.Numeric
$i1 cmp $i2
數(shù)值角色 role
Numeric角色
# 轉(zhuǎn)換成兼容的其他數(shù)值類型
.Real
.Int
.Rat
.Num
#自動把數(shù)字轉(zhuǎn)換成最小的能容納的類型
.narrow
# Log方法
.log
.log10
# 指數(shù)方法
#默認(rèn)base是e肮砾,如果不指定的話
NUM.exp($base)
# 取根號
NUM.roots($n)
# 絕對值诀黍,開平方,
.abs
.sqrt
.conj
# 強(qiáng)大的自加自減仗处,可以自加自減數(shù)字娜汁、字母等
.succ
.pred
# Str類也有這個方法趴拧,自加自減赌结,但不局限與數(shù)字
#對于命名太方便了
Real角色
# 把 Real 類型轉(zhuǎn)成 Rat 類型, $epsilon 定義精度
.Rat($epsilon)
# 近似化數(shù)值
.rand
.sign
.round
.floor
.ceiling
.truncate
# 進(jìn)制轉(zhuǎn)換
.base($base, $digits) #各種進(jìn)制的轉(zhuǎn)換
Rational角色
Rational.new($n,$d)
.numerator
.denominator
.nude
.norm
.bash-repeating($base)
#FatRat扮演Rational角色也颤,繼承所有方法