Tag: modulo

C#中“%”操作对数字类型double的含义

最近我发现C#的运算符%适用于double。 尝试了一些事情,毕竟想出了这个测试: class Program { static void test(double a, double b) { if (a % b != a – b * Math.Truncate(a / b)) { Console.WriteLine(a + “, ” + b); } } static void Main(string[] args) { test(2.5, 7); test(-6.7, -3); test(8.7, 4); //… } } 这个测试中的一切都有效。 a % b总是等于a – b*Math.Round(a/b) ? 如果没有,请向我解释这个运营商是如何运作的。 […]

C#:使用模数学递减时钟

试图用手模拟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 -1) hourIncrement = -1; Console.WriteLine(“Hour increment is {0}: “, hourIncrement); } 我发现的问题是当倒退时,如果模数在数字之间,它将不会正确递减。 例如:它是12:00并且你减去61分钟,我们知道时间将是10:59,因为从12:00到11:59,小时应该回滚1小时,然后从11:00再回来到10:59 不幸的是我计算它的方式:在这种情况下newMin%60,只抓取第一个小时回滚,但由于第二次回滚在技术上是-1.0166作为余数,并且因为mod只返回一个整数,所以它四舍五入。 我确定我在这里缺少一些基本的数学,但有人可以帮助我吗? 编辑:我已经写了很多种方式。 有些比其他人更接近,但我知道这比看起来更简单。 我知道这个看起来有点“他正在做什么”,但你应该能够看到我想要做的事情。 增加时钟并使其从23:59到0:00翻转很容易。 向后看已经certificate并不那么容易。 好的,这是带翻转的incrementMinute。 简单。 但试着倒退。 不起作用。 static void […]

c#中的数学模数

在c#中是否有一个库函数用于数字的数学模数 – 由此我特别指的是以正整数为模的负整数应该产生正结果。 编辑提供一个例子: -5模3应该返回1

C#ModInverse函数

是否有内置函数可以让我计算(mod n)的模逆? 例如19 ^ -1 = 11(mod 30),在这种情况下19 ^ -1 == -11 == 19;