在Perl中,%运算符似乎采用整数.例如:
sub foo {
my $n1 = shift;
my $n2 = shift;
print "perl's mod=" . $n1 % $n2, "\n";
my $res = $n1 / $n2;
my $t = int($res);
print "my div=$t", "\n";
$res = $res - $t;
$res = $res * $n2;
print "my mod=" . $res . "\n\n";
}
foo( 3044.952963, 7.1 );
foo( 3044.952963, -7.1 );
foo( -3044.952963, 7.1 );
foo( -3044.952963, -7.1 );
Run Code Online (Sandbox Code Playgroud)
给
perl's mod=6
my div=428
my mod=6.15296300000033
perl's mod=-1
my …Run Code Online (Sandbox Code Playgroud) 我有一个代码,我在其中计算x%25.x总是取正值但其动态范围很大.
我发现这个计算轴%25的特殊代码片段需要大周期.我需要优化它.
由于表可能存在大的内存大小,因此排除了预先计算的查找表.
作为第二种方法,我在下面编码了一个片段(C代码) -
mod(a, b)
{
int r = a;
while(r >= b)
{
r = r - b;
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
1.)如何针对周期进一步优化此代码(将其压缩到最大值)?
2.)是否有任何完全不同的优化方式来实现x%25(我知道它不是一个常见的操作,但仍然,寻找人们可能在他们的经验中使用的聪明输入,这可能会让我感到麻烦.).
谢谢.
-广告
编辑:
我认为在C中使用本机模运算符%,内部使用除法运算(/),这在我正在使用的处理器上是昂贵的.(没有div指令).因此,尝试查看自定义实现是否可以使用%运算符击败固有计算.
-广告
我试图在Python中计算数百个数字模P的立方根,并且失败了.
我找到了Tonelli-Shanks算法的代码,据说这个算法从平方根到立方根都很容易修改,但这让我望而却步.我搜索过网络和数学图书馆以及一些书都无济于事.代码会很精彩,算法也会用简单的英语解释.
这是用于查找平方根的Python(2.6?)代码:
def modular_sqrt(a, p):
""" Find a quadratic residue (mod p) of 'a'. p
must be an odd prime.
Solve the congruence of the form:
x^2 = a (mod p)
And returns x. Note that p - x is also a root.
0 is returned is no square root exists for
these a and p.
The Tonelli-Shanks algorithm is used (except
for some simple cases in which the solution
is known from an identity). This algorithm
runs in …Run Code Online (Sandbox Code Playgroud) 假设我有一个向量v,其中包含m个元素,以及一个名为i的向量的随机访问索引.
当我增加索引时,如果它超出范围,我想索引第一个(第零个)元素.类似地,当我递减索引时,如果索引<0,我想索引到最后一个元素.目前我只是在容器中移动一个元素,所以想出了这个函数:
unsigned int GetIndexModM(int index,unsigned int m) {return (index + m) % m;}
Run Code Online (Sandbox Code Playgroud)
呼叫站点可能如下所示:
std::vector<Whatever> v = ... // initialise with 5 elements
unsigned int i = 0;
unsigned int j = GetIndexModM(static_cast<int>(i) - 1,v.size()); // get preceeding index
Run Code Online (Sandbox Code Playgroud)
如果从索引中减去> m的值,则此函数将失败:
unsigned int j = GetIndexModM(static_cast<int>(i) - 17,v.size()); // oops: returns -2
Run Code Online (Sandbox Code Playgroud)
我的问题:什么是一个函数最优雅的实现,它接受任何整数并将其作为索引返回?
当我读到java版本1.7.0_09的源代码时,我发现Integer类的toString方法的实现使用了负int来计算mod操作,有什么意义吗?代码如下:
public static String toString(int i, int radix) {
if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
radix = 10;
/* Use the faster version */
if (radix == 10) {
return toString(i);
}
char buf[] = new char[33];
boolean negative = (i < 0);
int charPos = 32;
if (!negative) {
i = -i; //***** change i to negative
}
while (i <= -radix) {
buf[charPos--] = digits[-(i % radix)]; //***** change back to positive after
//***** mod operation …Run Code Online (Sandbox Code Playgroud) 我怎么能用十进制值进行模运算,因为PHP只能用整数模数?
示例案例:
echo 1.92 % 1000; // (int) 1, expected result should be 1.92
Run Code Online (Sandbox Code Playgroud)
有没有正确的库?
有关此模数算术问题的更多信息:https://bugs.php.net/bug.php?id = 34399
我正在尝试制作一个简单的物镜-C高度转换器.输入是一个脚的(浮点)变量,我想转换为(int)feet和(float)inches:
float totalHeight = 5.122222;
float myFeet = (int) totalHeight; //returns 5 feet
float myInches = (totalHeight % 12)*12; //should return 0.1222ft, which becomes 1.46in
Run Code Online (Sandbox Code Playgroud)
但是,我不断从xcode获得错误,我意识到模运算符只适用于(int)和(long).有人可以推荐一种替代方法吗?谢谢!
假设我有一个x包含n元素的向量。我想使用任何矢量化函数,比如说cumprod,在 的每个备用数上x,即每 1、3、5 等等,以及 2、4、6 等等。我正在添加一个 reprex 并尝试了代码。该代码有效,但似乎我不必要地走了很长的路,并且可以缩短代码。是真的吗?
x <- 5:14
cumprod((x * (seq_along(x) %% 2)) + (seq_along(x)-1) %% 2) * seq_along(x) %% 2 +
cumprod((x * ((seq_along(x)-1) %% 2)) + seq_along(x) %% 2) * (seq_along(x)-1) %% 2
#> [1] 5 6 35 48 315 480 3465 5760 45045 80640
Run Code Online (Sandbox Code Playgroud)
这里cumprod只是一个示例函数。我可能还必须以交替顺序使用其他功能。
当我在Objective-C中进行模运算时,我得到的结果让我有点吓坏了.-1%3现在是-1,这不是正确的答案:根据我的理解,它应该是2. -2%3出现-2,这也是不对的:它应该是1.
除了%运算符之外,我还应该使用另一种方法来获得正确的结果吗?
为什么:
int test() {
return 00101 % 10;
}
Run Code Online (Sandbox Code Playgroud)
返回5,同时:
int test() {
return 101 % 10;
}
Run Code Online (Sandbox Code Playgroud)
回来了1?我想不出一个解释.