标签: modulus

模数运算符更改

C++ 03状态中的$ 5.6/4 - "如果两个操作数都是非负的,那么余数是非负的;如果不是,则余数的符号是​​实现定义的74).

注74是

根据正在进行的ISO C修订工作,整数除法的首选算法遵循ISO Fortran标准ISO/IEC 1539:1991中定义的规则,其中商始终向零舍入.

C++ 0x状态 -

$ 5.6/4-"对于积分操作数,/运算符产生代数商,丢弃任何小数部分; 79如果商a/b在结果类型中可表示,(a/b)*b + a%b则等于a.

注79说

这通常被称为截断为零.

所以我有两个问题:

  • 有人可以解释这个"截断为零"的概念吗?

  • 具有负操作数的模数是否在C++ 0x中定义为行为?

c++ modulus

4
推荐指数
1
解决办法
927
查看次数

为什么Java的%运算符给出的结果与我的计算器的结果不同?

怎么来计算器-1 mod 26 = 25,但是用C或Java -1 % 26 == -1.我需要一个像计算器一样解决它的程序.这两者有区别吗?

c java math modulus

4
推荐指数
2
解决办法
1677
查看次数

有没有简单的方法来做模数2 ^ 32-1的操作?

我只是听说过x mod (2^32-1),并x / (2^32-1)会很容易,但如何?

计算公式:

x n =(x n-1 + x n-1/b)mod b.

因为b = 2^32,它很容易x%(2^32) == x & (2^32-1); 和x / (2^32) == x >> 32.(这里的^不是XOR).当b = 2 ^ 32 - 1时如何做到这一点.

在页面https://en.wikipedia.org/wiki/Multiply-with-carry.他们说" arithmetic for modulus 2^32 ? 1 requires only a simple adjustment from that for 2^32".那么"简单调整"是什么?

algorithm modulus

4
推荐指数
1
解决办法
3545
查看次数

在java中更快地重新制定方程式

我正在加密,对于私钥指数d,你需要将d乘以e并取另一个数的mod,并将余数设为1.我已经具有的函数是:

private void genD() {
        d = e / 2;
        // solve for d given d*e = 1 (mod eN)
        while ((d * e) % eN != 1) {
            d++;
        }
}
Run Code Online (Sandbox Code Playgroud)

我现在所拥有的显然是一种蛮横的做事方式,经历每一个数字直到一个有效.我知道方程式完成它的工作,使用这里找到的工作示例插入数字,但是使用我正在生成的数字非常非常慢.从逻辑上讲,我觉得有一种方法可以更快地完成这项任务,但我无法想到如何做到这一点?

任何帮助表示赞赏!提前致谢 :)

java encryption math function modulus

4
推荐指数
1
解决办法
60
查看次数

从1004L到1000L(或1006L到1010L)的圆形长度

假设我有Long someLong = 1004L.我可以使用什么有效的方法将其舍入到1000L?请注意,我实际上并不知道,someLong == 1004L所以我不能简单地这样做someLong -= 4L;.我需要一个可推广的方法.我也希望能够向下舍入到每个5而不是每个10,例如一个1005L舍入到的函数(因为如果我们舍入为5s然后它将向上舍入而不是向下舍入).

更多的例子..可能是我有1926L,我想要圆润到5我需要的意思1925L.或者我需要四舍五入到10我需要的意义1930L.

java rounding modulus long-integer integer-arithmetic

4
推荐指数
1
解决办法
1963
查看次数

为什么Matlab Mod与Wolfram Alpha不同

688 ^ 79 mod 3337 = 1570.

当我在wolfram alpha尝试这个时,我得到了: 在此输入图像描述

但是当我在Matlab中输入同样的东西时,我得到364作为答案.我做错了.

在此输入图像描述

任何关于此的亮点将不胜感激.

matlab wolframalpha modulus

4
推荐指数
1
解决办法
564
查看次数

F#:整数(%)整数 - 计算方法如何?

所以在我的教科书中有一个使用f#的递归函数的例子

let rec gcd = function
| (0,n) -> n
| (m,n) -> gcd(n % m,m);;
Run Code Online (Sandbox Code Playgroud)

使用此功能,我的教科书通过执行以下内容给出了示例

gcd(36,116);;
Run Code Online (Sandbox Code Playgroud)

并且由于m = 36而不是0,那么它的第二个句子是这样的:

gcd(116 % 36,36)
gcd(8,36)
gcd(36 % 8,8)
gcd(4,8)
gcd(8 % 4,4)
gcd(0,4) 
and now hits the first clause stating this entire thing is = 4.
Run Code Online (Sandbox Code Playgroud)

我没有得到的是这个(%)百分号/操作符或此连接中调用的任何内容.对于一个实例我不知道如何

116 % 36 = 8
Run Code Online (Sandbox Code Playgroud)

我现在已经多次转过头了,我无法想象这怎么会变成8?

我知道对于那些知道这一点的人来说这可能是一个愚蠢的问题,但我非常感谢你的帮助.

math recursion f# operators modulus

4
推荐指数
1
解决办法
1362
查看次数

纠正R模数误差的最佳方法是什么?

核心R引擎有一个严重的缺陷,它表达了Modulus操作的输出:

ceiling((1.99 %% 1) * 100)

返回:99(正确)

ceiling((2.99 %% 1) * 100)

返回:100(不正确)

该行为将显示在任何整数值N + 2.99(例如3.99等)中.如果这与浮点表示相关联,则系统不会表达差异的完整细节.这尤其令人不安,因为:

两者(1.99 %% 1)并且(2.99 %% 1) 似乎返回0.99.

两者((1.99 %% 1) * 100)并且((2.99 %% 1) * 100) 似乎返回99.

但是,如果进行任何舍入或类似的数学运算,则2.99 的不可见残值会以意外的方式翻转.

虽然为我当前的应用程序解决这个问题是微不足道的:

floor((2.99 - floor(2.99)) * 100)

返回:99(正确)

sprintf("%.22f", floor((2.99 - floor(2.99)) * 100))

返回:99.0000000000000000000000(正确)

...我想知道有多少其他实例Modulus返回坏值而没有底层细节来显示浮点delta.有没有办法揭露模数似乎附加的基础残值?它是不可见的.

编辑:根据下面的andrew.punnett的慷慨示例,print(1.99, digits = 22)返回1.99(没有浮动扩展),而print(1.99 %% 1, digits = 22)返回0.98999999999999999.根据Aaron的敏锐眼光,这似乎与版本和/或系统有关.

谢谢!

r modulus

4
推荐指数
1
解决办法
164
查看次数

模数和无符号整数

我发现以下行为令人惊讶:

int a = -2;
int b = 5;
uint c = 5;
std::cout << a%b << '\n';
std::cout << a%c << '\n';

Output:
-2
4
Run Code Online (Sandbox Code Playgroud)

当涉及比较时,混合有符号和无符号是有问题的 - 运算符中是否存在隐藏的比较%,或者此处是否还有其他事情发生?

c++ unsigned modulus

4
推荐指数
1
解决办法
201
查看次数

模数运算符nim

Nim中的模数运算符是多少?

tile % 9 == 0 导致未声明的标识符:'%'

谷歌搜索或搜索SO没有提出答案.

modulus nim-lang

4
推荐指数
2
解决办法
528
查看次数