轨道
/
Factor
Factor
/
练习
/
有理数
有理数

有理数

中等

说明

有理数定义为两个整数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₂,结果为r₁ / r₂ = (a₁ * b₂) / (a₂ * b₁),前提是a₂不为零。

有理数r = a/b的n次幂(n为非负整数)等于r^n = (a^n)/(b^n)。

有理数r = a/b的n次幂(n为负整数)等于r^n = (b^m)/(a^m),其中m = |n|。

有理数r = a/b的x次幂(x为实数,即浮点数)等于商(a^x)/(b^x),结果是一个实数。

以有理数r = a/b为指数求实数x的幂,等于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元组,带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,全部免费。