Python 和 Ruby 數學/Ruby 中的分數
外觀

分數只不過是一個整數與另一個整數的精確商。由於結果不一定是十進位制數,因此分數在十進位制數之前就已經被使用了:它們至少在埃及和巴比倫人那裡就已經為人所知。而且它們至今仍然有許多用途,即使它們或多或少地被隱藏起來,就像在這些例子中一樣
- 如果說一個男人身高 5 英尺 7 英寸,這意味著他以英尺為單位的身高是 .
- 聽說現在是下午 8 點 13 分,可以推斷出,過了中午, 小時過去了。
- 如果宣佈價格為“四分之三”,則意味著它以美元為單位是 :又一次,分數!
- 機率通常用分數表示(主要是 埃及 型別)。就像在“一顆流星落在我頭上的機率是千萬分之一”或“種馬以五比一的賠率是最受歡迎的”中一樣。
- 統計學也喜歡分數:“七個人中有五個人認為調查太多”。
等式0.2+0.5=0.7可以寫成 ,但相反, 不能寫成十進位制等式,因為這樣的等式將不準確。
要輸入分數,使用Rational 物件
a=Rational(24,10)
puts(a)
簡化是自動的。另一種方法是使用mathn,它會改變斜槓運算子的行為
require 'mathn'
a=24/10
puts(a)
還可以使用to_r 方法從實數中獲取分數。但是,只有當分母是 2 的冪時,才能確保分數是正確的[1]
a=1.2
b=a.to_r
puts(b)
在這種情況下,來自字串的to_r 更加準確
puts "1.2".to_r #=> (6/5)
puts "12/10".to_r #=> (6/5)
要獲取分數f 的分子,輸入f.numerator
a=Rational(24,10)
puts(a.numerator)
請注意,結果不是 24,因為分數將簡化為 12/5。
要獲取分數f 的分母,輸入f.denominator
a=Rational(24,10)
puts(a.denominator)
分數的近似值透過轉換為float 獲得
a=Rational(24,10)
puts(a.to_f)
與任何數字一樣,分數的否定是在其名稱前面加上減號“ - ”而獲得的
a=Rational(2,-3)
puts(-a)
要反轉分數,用 1 除以該分數
a=Rational(5,4)
puts(1/a)
要新增兩個分數,使用“+”符號,結果將是一個分數。
a=Rational(34,21)
b=Rational(21,13)
puts(a+b)
如果將非分數新增到分數,則結果型別將有所不同。新增分數和整數將得到分數。但是,將分數和浮點數相加會得到浮點數。
同樣,要減去兩個分數,在它們之間寫上減號
a=Rational(34,21)
b=Rational(21,13)
puts(a-b)
兩個分數的乘積始終是一個分數
a=Rational(34,21)
b=Rational(21,13)
puts(a*b)
分數的整數商和餘數仍然定義
a=Rational(34,21)
b=Rational(21,13)
puts(a/b)
puts(a%b)
如果指數是整數,則分數的冪仍然是分數
a=Rational(3,2)
puts(a**12)
puts(a**(-2))
但如果指數是浮點數,即使冪實際上是分數,Ruby也會將其作為浮點數給出
a=Rational(9,4)
b=a**0.5
puts(b)
puts(b.to_r)
Ruby 沒有計算兩個分數的Farey 中介數的方法,但用定義很容易建立它
def Farey(a,b)
n=a.numerator+b.numerator
d=a.denominator+b.denominator
return Rational(n,d)
end
a=Rational(3,4)
b=Rational(1,13)
puts(Farey(a,b))

def egypt(f)
e=f.to_i
f-=e
list=[e]
begin
e=Rational(1,(1/f).to_i+1)
f-=e
list.push(e)
end while f.numerator>1
list.push(f)
return list
end
require 'mathn'
a=21/13
puts(egypt(a))
該演算法可以總結如下
- 從分數中提取整數部分(使用to_i)並將其儲存在列表中;
- 從f(剩餘分數)中減去可能的最大整數倒數;
- 依此類推,直到f的分子大於 1。
- 最後,將最後一個分數新增到列表中。
- ↑ 好吧,確實但無論如何...