我正在寻找适用于R语言的%%运算符的方法.
10 %% 10 # 0
20 %% 10 # 0
Run Code Online (Sandbox Code Playgroud)
怀疑这两个结果:
10 %% 20 # 10
2 %% 8 # 2
Run Code Online (Sandbox Code Playgroud)
你能帮助我更好地理解最后两个结果吗?我有点困惑.
李哲源*_*李哲源 11
没有错:
10 = 1 * 10 + 0
20 = 2 * 10 + 0
10 = 0 * 20 + 10
2 = 0 * 8 + 2
Run Code Online (Sandbox Code Playgroud)
模数是之后的数字+.
一般来说,两个数字a和b,有
a = floor(a / b) * b + (a %% b)
Run Code Online (Sandbox Code Playgroud)
我们来写一个玩具功能:
foo <- function(a,b) c(quotient = floor(a / b), modulo = a %% b)
foo(10, 10)
#quotient modulo
# 1 0
foo(20, 10)
#quotient modulo
# 2 0
foo(10, 20)
#quotient modulo
# 0 10
foo(2, 8)
#quotient modulo
# 0 2
Run Code Online (Sandbox Code Playgroud)
更新:floor(a / b)我们也可以使用,而不是使用获取商a %/% b.
我将提供另一种解释。拿这个问题来说:
20 %% 10 = 0
Run Code Online (Sandbox Code Playgroud)
不要计算模数,而是从简单的除法开始:
20 / 10 = 2
Run Code Online (Sandbox Code Playgroud)
如您所知,答案“2”意味着需要两组 10 才能得到 20。请注意,我们也可以用小数 2.0 这样写答案。
小数点很重要。当小数为 .0 时,我们没有余数。我们有全套。如果除法产生小数 0,则模计算为零。
现在考虑一下:
11/3 = 3.667
Run Code Online (Sandbox Code Playgroud)
尾部部分,即 0.667,是在我们尽可能形成所有完整的 3 组后剩下的 3 组的一部分。在小数点左边,我们显示:
#Splitting the answer into its components - 3 full sets, 0.667 partial sets
3.0 + 0.667 = 3.667
Run Code Online (Sandbox Code Playgroud)
因此,如果我们想知道实际剩余数量,可以将 0.667 乘以除数 3:
0.667 * 3 = 2
Run Code Online (Sandbox Code Playgroud)
这是剩下的部分。是全部 3 组全部组成后剩余的数量。这与我们使用模得到的结果相同:
11 %% 3 = 2
Run Code Online (Sandbox Code Playgroud)
这同样适用于这里。鉴于这个问题,
10 %% 20 = 10
Run Code Online (Sandbox Code Playgroud)
我们可以正常除法并得到:
10 / 20 = 0.5
Run Code Online (Sandbox Code Playgroud)
读出来,我们有 0 个完整的组,每组 20 个(左侧);我们只有半套,即 20 套中的 0.5 套。
0.5 * 20 = 10
Run Code Online (Sandbox Code Playgroud)
这相当于:
10 %% 20 = 10
Run Code Online (Sandbox Code Playgroud)
因此 10 就是余数。这是我们现有的 10 个与达到 20 个所需的 10 个之间的差距。
| 归档时间: |
|
| 查看次数: |
25791 次 |
| 最近记录: |