Dan*_*n W 20 c# math optimization modulus
对于特定碱基,是否有创建比标准%运算符更快的整数模数的技巧?
对于我的程序,我会寻找大约1000-4000(例如n%2048).有没有以执行N模量2048不仅仅是一个更快的方法:n%2048
?
Jus*_*gan 35
如果分母在编译时已知为2的幂,就像2048的例子那样,你可以减去1并按位进行.
那是:
n % m == n & (m - 1)
Run Code Online (Sandbox Code Playgroud)
...... m
2的力量在哪里.
例如:
22 % 8 == 22 - 16 == 6
Dec Bin
----- -----
22 = 10110
8 = 01000
8 - 1 = 00111
22 & (8 - 1) = 10110
& 00111
-------
6 = 00110
Run Code Online (Sandbox Code Playgroud)
请记住,一个好的编译器会有自己的优化%
,甚至可能与上述技术一样快.算术运算符往往相当优化.
tsk*_*zzy 13
对于2的幂2^n
,您所要做的就是将除最后一位之外的所有位清零n
.
例如(假设32位整数):
x%2
相当于 x & 0x00000001
x%4
相当于 x & 0x00000003
一般来说x % (2^n)
等于x & (2^n-1)
.写在C中,这将是x & ((1<<n)-1)
.
这是因为2^n
你在n+1
第一位(右起)给你一个1 .所以2^n-1
会给你n
右边的那些,左边的零.
归档时间: |
|
查看次数: |
13599 次 |
最近记录: |