试图用手模拟24小时时间的翻转(使用数学与使用时间跨度类).递增部分很容易弄清楚如何从23:00到0:00滚动,但从另一个方向走向结果却变得非常混乱.这是我到目前为止所拥有的:
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin / 60;
//increment or decrement the hour
if((double)newMin % 60 < 0 && (double)newMin % 60 > -1)
hourIncrement = -1;
Console.WriteLine("Hour increment is {0}: ", hourIncrement);
}
Run Code Online (Sandbox Code Playgroud)
我发现的问题是当倒退时,如果模数在数字之间,它将不会正确递减.示例:它是12:00并且您减去61分钟,我们知道时间将是10:59,因为小时应该从12:00返回到11:59,然后从11:00返回到10:59 不幸的是我计算它的方式:在这种情况下newMin%60,只抓取第一个小时回滚,但由于第二次回滚在技术上是-1.0166作为余数,并且因为mod只返回一个整数,所以它四舍五入.我确定我在这里缺少一些基本的数学,但有人可以帮助我吗?
编辑:我已经写了很多长短的方法.有些比其他人更接近,但我知道这比看起来更简单.我知道这个似乎有点"他正在做什么",但你应该能够基本看到我想做的事情.增加时钟并使其从23:59到0:00翻转很容易.向后看已经证明并不那么容易.
好的,这是带翻转的incrementMinute.简单.但试着倒退.不行.
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin / 60;
min = newMin % 60;
Console.WriteLine("The new minute is {0} and the hour …Run Code Online (Sandbox Code Playgroud) 我知道这似乎是一个非常愚蠢的问题,但我不明白为什么这不起作用.这个:
System.out.println(5 % .10);
Run Code Online (Sandbox Code Playgroud)
它正在回归:
0.09999999999999973
Run Code Online (Sandbox Code Playgroud)
我真的不知道.我只是在学习Java,而且我对C#非常好,所以我尝试用C#来.C#似乎也回归了同样的事情.
当我在Java程序中使用运算符%时,我不断得到否定答案.示例:-1%100给出-1.虽然这在数学上是正确的,但我想得到正常的数学解,或99.换句话说,我想得到最小的正整数解.在Java中是否有任何简单的解决方案(也许我在数学中忽略了什么? - 我找不到它)?
我还想澄清一下,如果API中有一些东西可以做到这一点,那么链接就会很棒.
我正在进行加密练习,我正在尝试计算(2 n -1)mod p,其中p是素数
这样做的最佳方法是什么?我正在使用C,因此当n很大时,2 n -1变得太大而无法保持
我遇到了等式(a*b)modp =(a(bmodp))modp,但我不确定这适用于这种情况,因为2 n -1可能是素数(或者我不知道如何分解这个)
非常感谢.
我试图找出浮点数据类型的简单模数运算.
float a=3.14f;
float b=10f;
result=a%b;
Run Code Online (Sandbox Code Playgroud)
我得到结果= 3.14
使用十进制数据类型的另一示例
decimal p=10;
decimal q=40;
result=p%q;
Run Code Online (Sandbox Code Playgroud)
得到答案= 20.
我不明白模数是如何工作的?
我有三个N位号,A,B,和C.我不能轻易计算,(A + B) % C但我可以轻松计算A % C和B % C.如果模运算是无符号的,并且我提前知道A + B没有包围N位,那么我可以改为计算((A % C) + (B % C)) % C.但是,是否可以对模数操作签名或添加A并B可能导致环绕的情况执行任何操作.
看起来可能存在一些混淆,为什么((A % C) + (B % C)) % C不能依赖它始终工作.这是一个未签名的示例:
unsigned A = 0x1U;
unsigned B = 0xFFFFFFFFU;
unsigned C = 0x3U;
((A % C) + (B % C)) % C == 0x1U but (A + …Run Code Online (Sandbox Code Playgroud) 我有一个角度,我需要返回[-180:180]范围内的代表角度.
我写了一个函数来做这个,但它似乎是一个简单的过程,我想知道是否有一个运算符或函数已经这样做:
int func(int angle){
angle %= 360;
if(angle > 180){
angle -=360;
}else if(angle < -180){
angle += 360;
}
return angle;
}
Run Code Online (Sandbox Code Playgroud)
我已经为测试预期的功能做了一个实例.
在case语句中运行模数函数时,很多时候会返回超出预期范围的值.
SELECT CASE WHEN ABS(CheckSUM(NewId())) % 5 IN (0,1,2,3,4) then NULL
ELSE 'What Happened?' END
Run Code Online (Sandbox Code Playgroud)
如果您运行此脚本几次,您将看到有时候结果似乎超出了0,1,2,3,4的范围.我的想法是,在case语句中,这会以某种方式返回非整数值,从而导致modulo成为一种无效的按案例排序的方法.
有人可以解释这些案件中发生的事情,以便我将来可以解决这个问题吗?
注意:如果我自己运行代码模数函数(在case语句之外)并返回结果,则所有值都在预期的0,1,2,3,4范围内.
有没有算法来解决在不同模空间中表达的方程组?例如,考虑这个方程组:
(x1 + x2 ) % 2 = 0
( x2 + x3) % 2 = 0
(x1 + x2 + x3) % 3 = 2
Run Code Online (Sandbox Code Playgroud)
该系统的解决方案之一是:
x1 = 0
x2 = 2
x3 = 0
Run Code Online (Sandbox Code Playgroud)
我怎么能算术地找到这个解决方案(不使用暴力算法)?
谢谢
在回答另一个问题时,提供了以下解决方案,由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工作的?我想知道的是,是否有数学证据证明它确实为随机数计算了一些下限并充分消除了模偏差?