为什么这样的操作:
std::cout << (-7 % 3) << std::endl;
std::cout << (7 % -3) << std::endl;
Run Code Online (Sandbox Code Playgroud)
给出不同的结果?
-1
1
Run Code Online (Sandbox Code Playgroud) 我一直在编写以下重现关系的程序:
An = 5An-1 - 2An-2 - An-3 + An-4
Run Code Online (Sandbox Code Playgroud)
输出应该是答案模数10 ^ 9 + 7 ..我为此写了一个蛮力方法如下......
long long int t1=5, t2=9, t3=11, t4=13, sum;
while(i--)
{
sum=((5*t4) - 2*t3 - t2 +t1)%MOD;
t1=t2;
t2=t3;
t3=t4;
t4=sum;
}
printf("%lld\n", sum);
Run Code Online (Sandbox Code Playgroud)
其中MOD= 10^9 +7
每件事似乎都是真的..但我得到了一些价值的否定答案..由于这个问题,我无法找到正确的解决方案...... Plz帮助保持正确的地方Modulus
在回答另一个问题时,提供了以下解决方案,由OpenBSD提供,为了简洁起见,
uint32_t foo( uint32_t limit ) {
uint32_t min = -limit % limit, r = 0;
for(;;) {
r = random_function();
if ( r >= min ) break;
}
return r % limit;
}
Run Code Online (Sandbox Code Playgroud)
这条线是如何uint32_t min = -limit % limit工作的?我想知道的是,是否有数学证据证明它确实为随机数计算了一些下限并充分消除了模偏差?
我找到了两个解决方案来确定两个数字是否具有相同的奇偶校验(都是奇数或都是偶数)。在 C++ 中,它们看起来像这样:
if ((a+b)%2 == 0)
Run Code Online (Sandbox Code Playgroud)
和
if (a%2 == b%2)
Run Code Online (Sandbox Code Playgroud)
问题是第一个适用于 100% 的案例,第二个仅适用于 80% 的案例(我在网站上提交的问题的测试),我不明白为什么。对我来说,这两行代码在所有情况下都应该可以正常工作。有人能解释一下为什么第一行代码在所有情况下都可以工作而第二行代码不行吗?您会推荐哪种方法(我或其他人展示的方法)?
我目前正在学习GoLang,而且我来自Python背景.
最近,我偶然发现了%(modulo)运算符的行为,它与Python中的相应运算符不同.与模运算和余数的定义完全相反,正整数的负整数模数返回负值.
例:
a, b, n = -5, 5, 3
for i in range(a, b):
print(i%n)
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
0
1
2
0
1
2
0
1
Run Code Online (Sandbox Code Playgroud)
a, b, n := -5, 5, 3
for i:=a; i<b; i++ {
fmt.Println(i%n)
}
Run Code Online (Sandbox Code Playgroud)
输出:
-2
-1
0
-2
-1
0
1
2
0
1
Run Code Online (Sandbox Code Playgroud)
阅读后模运算符和几个类似的问题问及背后这些差异的原因,据我所知,这是由于设计有关语言的目标.
Q1.我想知道为什么Go遵循C/C++协议而不是Python.任何相关讨论的链接都会有所帮助.
Q2.Go中是否有内置功能可以复制Python的模数运算?
替代:是否有内部方法来计算"模数"而不是"余数"?
在Kotlin中,我看到函数a.mod(n)if a为负数,结果为负数.这不是什么模数是要做的.我能做些什么来保持积极的模数?
例如:
(-2).mod(9)
Run Code Online (Sandbox Code Playgroud)
回来-2,应该是7.
我想显示 4 张图像,因此我使用 来unsigned short表示当前图像的索引。当我按A时,索引减1;当我按 D 时,索引增加 1。
image_index = (image_index - 1) % 4;我正在使用(以及 D 按键上的image_index = (image_index + 1) % 4;)计算 A 按键上的索引
如果我向前循环(即,按 D),一切都会按预期工作,但如果我位于索引 0 并按 A,它会下溢到无符号短整型的最大值,并且不会以 4 为模来给出索引3.
我知道对于有符号类型,上溢/下溢是 UB,但我确信对于无符号类型,它是定义良好的。有什么想法可能导致它忽略模数吗?
enum class Errors : short {
kSdlSuccess = 0,
kSdlInitFailure = -1,
kSdlWindowCreationError = -2,
kSdlRendererCreationError = -3
};
int main(int argc, char** argv) {
sdl::Context ctx;
sdl::Window window({ .w = 600, .h = 480, .flags = 0});
sdl::Renderer renderer(window, {0}); …Run Code Online (Sandbox Code Playgroud) 为什么在C ++ 中-26 % 10输出-6?
如何获得将输出的标准模数4?
注意:这个问题可能是一个重复这一个,或许多人,但我还没有找到一个在很短的方式制定,在眨眼可以理解的。正如我个人喜欢查找简短问题/简短回答(针对简单问题)一样,我认为这可能会引起其他人的兴趣。稍后我将删除此通知。
Let's say I have (-5) mod 8.
I tried it in both languages Java and C, and they gave me a -5 result when I was expecting 3.
Why is this happening? Can a modulus be negative? And what should I change to get the correct result?
Java code
public class Example {
public static void main(String[] args) {
int x;
x = -5%8;
System.out.println(x);
}
}
Run Code Online (Sandbox Code Playgroud)
C code
int main(){
int x;
x = -5%8;
printf("%d", x); …Run Code Online (Sandbox Code Playgroud)