你会如何除以3为数字,没有使用*,/,+,-,%,运营商?
号码可以是签名或未签名.
是否有可能通过使用纯位加法,减法除以10的无符号整数,也许繁衍?使用资源非常有限且速度慢的处理器.
当我__int128在Visual Studio中键入C++项目时,编辑器将颜色更改__int128为蓝色(如关键字).
但是当我编译源代码时,会出现以下错误:
error C4235:
nonstandard extension used : '__int128' keyword not supported on this architecture
Run Code Online (Sandbox Code Playgroud)
如何__int128在Visual Studio上启用?
如果操作数是2的幂,则可以在没有模数运算符或除法的情况下容易地获得数字的模数.在这种情况下,下面的公式成立:x % y = (x & (y ? 1)).在许多架构中,这通常很有效.可以这样做mod 31吗?
int mod31(int a){ return a % 31; };
Run Code Online (Sandbox Code Playgroud) 我只是听说过x mod (2^32-1),并x / (2^32-1)会很容易,但如何?
计算公式:
x n =(x n-1 + x n-1/b)mod b.
因为b = 2^32,它很容易x%(2^32) == x & (2^32-1); 和x / (2^32) == x >> 32.(这里的^不是XOR).当b = 2 ^ 32 - 1时如何做到这一点.
在页面https://en.wikipedia.org/wiki/Multiply-with-carry.他们说" arithmetic for modulus 2^32 ? 1 requires only a simple adjustment from that for 2^32".那么"简单调整"是什么?
我知道可以使用按位运算符计算2的幂的模数
x % 2^n == x & (2^n - 1).
Run Code Online (Sandbox Code Playgroud)
但我想知道是否存在任何广义的按位算法,以找出任何数的模数不是2的幂.例如,
7%5
Run Code Online (Sandbox Code Playgroud)
先感谢您.
像 GMP 这样的任意精度库如何存储内存中表示的极大浮点数?
我会想象,例如,如果您想计算 Pi 或欧拉常数,例如 2,000,000 位数字,您将为小数点右侧的数字分配大量字节。每个字节将存储 2 个小数位值,并且该数组将是一个数据结构的成员,具有用于存储该值的位数和字节数。
这是它的工作原理吗?