Tag: 乘法

带行和列的乘法表

如何使乘法表看起来像这样: http : //i.imgur.com/rR6JSua.png ? 使用我的代码,它只有一列。 #include int main() { int i, j; for(i = 1;i <= 9;i++) { for(j = 1;j <= 9;j++) { printf("%d * %d = %d\n",i , j,i*j); } printf("%d * %d = %d\n",i , 10,i*10); printf("\n"); } return 0; }

如何在c中乘以32位整数

执行: #define HIGH32(V64) ((uint32_t)((V64 >> 32)&0xffFFffFF)) #define LOW32(V64) ((uint32_t)(V64&0xffFFffFF)) uint32_t a = 0xffFFffFF; uint32_t b = 0xffFFffFF; uint64_t res = a * b; printf(“res = %08X %08X\n”, HIGH32(res), LOW32(res)); 得到: “res = 00000000 00000001” 但我期待:fffffffe00000001。 我做错了什么? 单一作业: res = 0x0123456789ABCDEF; printf(“res = %08X %08X\n”, HIGH32(res), LOW32(res)); 给 res = 01234567 89ABCDEF 环境: $gcc –version gcc […]

C / C ++:乘以或比特移位然后除?

在有可能这样做的地方,我想知道用比特移位替换单个乘法后跟整数除法是否更快。 假设我有一个int k,我想将它乘以2.25。 什么更快? int k = 5; k *= 2.25; std::cout << k << std::endl; 要么 int k = 5; k = (k<<1) + (k/4); std::cout << k << std::endl; 产量 11 11 两者都给出了相同的结果,你可以查看这个完整的例子 。

这种情况是否足以在乘法中进行溢出检查

int isOverflow(uint a, uint b) { // a and b are unsigned non-zero integers. uint c = a * b; if (c b ? a : b)) return 1; else return 0; } 我错过了什么吗? 我认为上面的代码片段会起作用。 编辑 :我已经看到其他解决方案,如大数字的乘法,如何捕获溢出 ,使用一些奇特的方法来检查它。 但对我来说,简单的解决方案也看起来正确。 这就是我问这个问题的原因。

我在哪里可以找到软乘法和除法算法?

我正在研究一种没有硬件乘法和除法的微控制器。 我需要为这些基本操作制作软件算法,这是紧凑尺寸和效率的良好平衡。 我的C编译器端口将使用这些算法,而不是C开发人员自己。 我的google-fu到目前为止主要是关于这个主题的噪音。 谁能指点我的信息? 我可以使用add / sub和shift指令。 基于表查找的算法也可能对我有用,但我有点担心编译器的后端这么多……嗯,可以这么说。

如何用最少的指令乘以两个四元数?

经过一番思考后,我想出了以下代码,用于使用SSE乘以两个四元数: #include /* SSE3 intrinsics */ /* multiplication of two quaternions (x, y, z, w) x (a, b, c, d) */ __m128 _mm_cross4_ps(__m128 xyzw, __m128 abcd) { /* The product of two quaternions is: */ /* (X,Y,Z,W) = (xd+yc-zb+wa, -xc+yd+za+wb, xb-ya+zd+wc, -xa-yb-zc+wd) */ __m128 wzyx = _mm_shuffle_ps(xyzw, xyzw, _MM_SHUFFLE(0,1,2,3)); __m128 baba = _mm_shuffle_ps(abcd, abcd, _MM_SHUFFLE(0,1,0,1)); […]

俄罗斯农民增殖

这是我对俄罗斯农民增殖的简短实施。 怎么改进? 限制 :仅在> 0,b> 0时有效 for(p=0;p+=(a&1)*b,a!=1;a>>=1,b<<=1);

用C测量时间

我正在尝试用C(矩阵乘法)测量一些活动,并注意到我应该做这样的事情: clock_t start = clock(); sleep(3); clock_t end = clock(); double elapsed_time = (end – start)/(double)CLOCKS_PER_SEC; printf(“Elapsed time: %.2f.\n”, elapsed_time); 输出是: Elapsed time: 0.00. 为什么会这样?

如何计算(a次b)除以c仅使用32位整数类型,即使b次不适合这种类型

请考虑以下内容作为参考实现: /* calculates (a * b) / c */ uint32_t muldiv(uint32_t a, uint32_t b, uint32_t c) { uint64_t x = a; x = x * b; x = x / c; return x; } 我感兴趣的是一个不需要64位整数类型的实现(在C或伪代码中)。 我开始草拟一个如下概述的实现: /* calculates (a * b) / c */ uint32_t muldiv(uint32_t a, uint32_t b, uint32_t c) { uint32_t d1, d2, […]

乘以int64_t数组的最快方法?

我想矢量化两个内存对齐数组的乘法。 我没有找到任何方法在AVX / AVX2中乘以64 * 64位,所以我只是循环展开和AVX2加载/存储。 有更快的方法吗? 注意:我不想保存每次乘法的高半结果。 void multiply_vex(long *Gi_vec, long q, long *Gj_vec){ int i; __m256i data_j, data_i; __uint64_t *ptr_J = (__uint64_t*)&data_j; __uint64_t *ptr_I = (__uint64_t*)&data_i; for (i=0; i<BASE_VEX_STOP; i+=4) { data_i = _mm256_load_si256((__m256i*)&Gi_vec[i]); data_j = _mm256_load_si256((__m256i*)&Gj_vec[i]); ptr_I[0] -= ptr_J[0] * q; ptr_I[1] -= ptr_J[1] * q; ptr_I[2] -= ptr_J[2] * q; ptr_I[3] […]