有理數

有理數

中等

說明

有理數定義為兩個整數a和b的商,分別稱為分子與分母,其中b != 0。

Note

請注意,在數學上,分母不能為零。 不過在許多有理數的實作中,你會發現分母可以為零,其行為類似於浮點數中的正無限大或負無限大。 在這些情況下,分子與分母通常仍然不能同時為零。

有理數r = a/b的絕對值|r|等於|a|/|b|。

兩個有理數r₁ = a₁/b₁與r₂ = a₂/b₂的和是r₁ + r₂ = a₁/b₁ + a₂/b₂ = (a₁ * b₂ + a₂ * b₁) / (b₁ * b₂)。

兩個有理數r₁ = a₁/b₁與r₂ = a₂/b₂的差是r₁ - r₂ = a₁/b₁ - a₂/b₂ = (a₁ * b₂ - a₂ * b₁) / (b₁ * b₂)。

兩個有理數r₁ = a₁/b₁與r₂ = a₂/b₂的積(相乘)是r₁ * r₂ = (a₁ * a₂) / (b₁ * b₂)。

將有理數r₁ = a₁/b₁除以另一個有理數r₂ = a₂/b₂,在a₂不為零時,結果是r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁)。

有理數r = a/b取非負整數n次方是r^n = (a^n)/(b^n)。

有理數r = a/b取負整數n次方是r^n = (b^m)/(a^m),其中m = |n|。

有理數r = a/b取實數(浮點數)x次方,其結果為商(a^x)/(b^x),這是一個實數。

實數x取有理數r = a/b次方是x^(a/b) = root(x^a, b),其中root(p, q)是p的q次方根。

實作以下運算:

  • 兩個有理數的加、減、乘、除,
  • 絕對值、將給定的有理數取整數次方、將給定的有理數取實數(浮點數)次方,以及將實數取有理數次方。

你的有理數實作應該一律約分成最簡形式。 例如,4/4應該約分成1/1,30/60應該約分成1/2,12/8應該約分成3/2,依此類推。 要約分有理數r = a/b,就將a和b同除以a和b的最大公因數(gcd)。 因此,舉例來說,gcd(12, 8) = 4,所以r = 12/8可以約分成(12/4)/(8/4) = 3/2。 有理數約分後的形式應該符合「標準形式」(分母一律為正整數)。 如果分母是負整數,就將分子與分母同乘以-1,以確保符合標準形式。 例如,3/-4應該約分成-3/4

假設你使用的程式語言沒有有理數的實作。

字詞

定義一個rat tuple,裡面有numerator和denominator兩個欄位。 <rat>應該把引數約分成最簡分數,並把正負號放在分子上(所以分母永遠是正的)。

  • <rat> ( numerator denominator -- rat ),建立一個約分後的有理數。
  • >rat ( pair -- rat ),從{ numerator denominator }建立一個rat。
  • rat>pair ( rat -- pair ),回傳{ numerator denominator }。
  • r+ ( a b -- c )、r- ( a b -- c )、r* ( a b -- c )、r/ ( a b -- c ),兩個有理數之間的算術運算。
  • r-abs ( a -- |a| ),取絕對值。
  • r^ ( a n -- a^n ),將有理數取整數次方(允許負指數)。
  • real^r ( x a -- y ),將實數取有理數次方,並回傳浮點數。

Factor 的MATH:泛型詞(+、-、*、/)只會依內建的數學階層分派,所以這個練習採用專屬的字詞名稱,而不是在這些泛型詞上定義方法。


出處

Wikipedia連結會在新視窗或分頁中開啟
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Factor Exercism

準備好開始 有理數 了嗎?

註冊 Exercism,透過 47 個概念163 個練習 和真人引導來學習並精通 Factor,全部免費。