本文介绍了为什么模运算符(%)不同的C和Ruby之间的负整数的行为?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在这里运行在说:

由于两个正数 A (股息)和 N (中除数),一模n (简写为MOD n)是由n个 A的欧几里德除法的余。结果
  .... 当任 A N 是否定的,天真的定义分解和编程语言不同这些值是如何定义的

现在的问题是,为什么 -40%3 2 在Ruby或者换句话说什么是数学落后吗?


Now the question is why -40 % 3 is 2 in Ruby or in other words what is the mathematics behind it ?

让我们先从其中指出:

给定两个整数 A N ñ≠0 ,存在唯一的整数研究,使得 A = N * q + R 0≤为r | N | ,其中 | N | 表示的绝对值n

现在注意商数的两个定义:

Now note the two definitions of quotient:

1 的描述其中商是由地板功能定义地板师 q =楼(A / N),其余的研究是结果

1. Donald Knuth described floored division where the quotient is defined by the floor function q=floor(a/n) and the remainder r is

这里的商()总是向下(即使它已经是负)圆润,其余的(研究)具有相同的符号作为除数

Here the quotient (q) is always rounded downwards (even if it is already negative) and the remainder (r) has the same sign as the divisor.

2 一些实现定义商作为

Q = SGN(一)地板(| A | / N)。 whre SGN 是符号函数

q = sgn(a)floor(|a| / n) whre sgn is signum function.

剩余(研究)具有相同的符号股息( A

and the remainder (r) has the same sign as the dividend(a).

现在一切都取决于


      
  • 如果实现去与定义 1 并定义楼(A / N )则值 40%3 1 -40%3 2 。这似乎是在这里为Ruby的情况。

  •   
  • 如果实现去与定义 2 并定义 SGN(一)楼(| A | / N),然后价值 40%3 1 -40%3 1 。这似乎是在这里为C和Java的情况。

  •   

这篇关于为什么模运算符(%)不同的C和Ruby之间的负整数的行为?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 15:39