我有一个在我正在编写的代码中非常常见的问题,我希望有一个整数只能存在于范围为[start,end]的特定范围内.基本上我希望能够做类似以下的事情:
cyclic_int ci(4, 8);
ci = 4;
assert(ci == 4);
ci += 3;
assert(ci == 7);
ci += 2;
assert(ci == 5);
assert(ci == 13);
Run Code Online (Sandbox Code Playgroud)
这应该都归于真实.基本上,类自动为我应用模数(%),整数充当我初始化它的范围内的循环整数.我可以自己实现这个类,并重载所有常用运算符,使其与普通整数很好地工作,但它似乎是一个有用的类,以前有人可能已经做过.
所以我的问题是,是否有一个像这样的普通类,每个人都在使用或者我想以错误的方式做这个,并且有更好的简单方法.(我的目标是不必经常考虑应用%运算符或任何类似的函数)谢谢.
编辑:我决定写一个自己的,只是为了好玩:http://github.com/robertmassaioli/wrapping_number
源自这个问题:(Java)java如何使用负数进行模数计算?
在哪里强制PHP返回正51?
更新
寻找要修复的配置设置,而不是硬猜测
还是像bcmath这样的其他数学函数?
更新
并不完全相信java答案,因为它没有考虑负模数
-13+(-64) =?
我很长时间都在寻找这个.
我需要从SSH服务器中提取并获取模数和指数.
例如,我知道,在服务器xxx.xxx.xxx.xxx上运行ssh(我可以连接到此服务器/ ping),但我不知道用户名和密码,因此无法登录.
我需要得到该服务器的公共RSA密钥的模数和指数.
我发现,ssh-keyscan可以得到模数+指数(来自文档),但仅限于使用ssh-rsa1.如果我尝试使用ssh-keyscan获取ssh-rsa(2)公钥,我无法从输出模数和指数中检索.
可能吗 ?
我听说使用%大多数编程语言中的模数运算符可以实现这一点.真正的问题是,怎么样?我不熟悉模数是如何工作的,所以我在过去使用它时遇到了困难.鉴于目前的时间是自1970年以来的几秒钟,1307758473.484我怎样才能计算出使用模数的天数,即几小时,即几分钟?
我基本上打算像这样格式化:"5年,10天,12小时,7分钟和18.56秒".我该怎么做?我真的很有兴趣学习这背后的逻辑,对简单的插入式解决方案不感兴趣.
SonarQube引发了重大违规行为不应该在我的代码中执行傻数学.描述说
某些数学运算只是愚蠢而且不应该执行,因为它们的结果是可预测的.
特别是,
anyValue%1是愚蠢的,因为它总是返回0.
在我的情况下,anyValue是一个双倍.而这个工程按预期我.这是实际的代码:
double v = Double.parseDouble(Utils.formatDouble(Double.valueOf(value.getValue()), accuracy.intValue()));
boolean negative = v < 0;
v = Math.abs(v);
long deg = (long) Math.floor(v);
v = (v % 1) * 60;
Run Code Online (Sandbox Code Playgroud)
分析器假设我的变量是一个int(这是他们的错误)?还是我错过了别的什么?
我正在尝试实施SAFER +算法.该算法需要找到幂函数的模数,如下所示:
pow(45, x) mod 257
Run Code Online (Sandbox Code Playgroud)
变量x是一个字节,因此可以在0到255之间.因此,如果使用32位或64位整数实现,则幂函数的结果可能非常大,从而导致不正确的值.
我该如何进行此计算?
我很好奇这些语言(Java,C ...)忽略了模数运算的数学定义.
在模块操作中返回负值的重点是什么(根据定义,应该总是返回正数)?
我正在使用一些传统软件编程PLC(RSLogix 500,请不要问),它本身不支持模数运算,但我需要一个.我没有访问:模数,整数除法,局部变量,截断操作(虽然我可以通过舍入来破解它).此外,我可用的所有变量都在按数据类型排序的表中列出.最后,它应该适用于浮点小数12345.678 MOD 10000 = 2345.678.
如果我们做出等式:
dividend / divisor = integer quotient, remainder
Run Code Online (Sandbox Code Playgroud)
有两个明显的实现.
实现1:执行浮点除法:dividend / divisor = decimal quotient.然后破解一起截断操作,你找到了integer quotient.将它乘以divisor并找出它与之间的差异dividend,从而产生remainder.
我不喜欢这个,因为它涉及一堆不同类型的变量.我无法将变量"传递"到子程序,因此我只需要分配位于多个不同变量表中的一些全局变量,并且很难遵循.不幸的是,"难以遵循"非常重要,因为它需要足够简单,以便维护人员能够搞砸.
实现2:创建一个循环,同时dividend > divisor divisor = dividend - divisor.这是非常干净的,但它违反了PLC编程的一个重要规则,即永远不会使用循环,因为如果有人无意中修改了索引计数器,你可能会陷入无限循环,机器会变得疯狂或无法恢复故障.Plus循环很难进行维护以进行故障排除.另外,我甚至没有循环指令,我必须使用标签和跳转.好恶.
所以我想知道是否有人有任何聪明的数学黑客或更聪明的模数实现.我可以访问+ - */,exponents,sqrt,trig函数,log,abs值和AND/OR/NOT/XOR.
我只是想知道$ x是否可被$ y整除.例如,假设:
$x = 70;
$y = .1;
Run Code Online (Sandbox Code Playgroud)
我尝试的第一件事是:
$x % $y
Run Code Online (Sandbox Code Playgroud)
这似乎在两个数字都是整数时有效,但如果它们不是则失败,如果$y是小于1的小数返回"除以零"错误,那么我尝试:
fmod($x,$y)
Run Code Online (Sandbox Code Playgroud)
哪个返回同样令人困惑的结果,"0.099999999999996".
php.net说fmod():
返回除数(x)除以除数(y)的浮点余数
好吧根据我的计算器70 / .1 = 700.这意味着余数为0.有人可以解释一下我做错了什么吗?
刚刚在一些旧的src代码中找到以下行:
int e = (int)fmod(matrix[i], n);
Run Code Online (Sandbox Code Playgroud)
在哪里matrix是一个数组int,n是一个size_t
我想知道为什么使用fmod而不是%我们有整数参数,即为什么不:
int e = (matrix[i]) % n;
Run Code Online (Sandbox Code Playgroud)
难道有可能是选择性能的原因fmod了%或者是它的代码只是一个陌生的位?