首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加模128位数

加模128位数
EN

Stack Overflow用户
提问于 2017-11-04 20:39:33
回答 1查看 221关注 0票数 1

我有两个128位的数字。让它成为相同的数字:

代码语言:javascript
复制
A=282434364544378924672110924168367615433
B=282434364544378924672110924168367615433

有必要将它们相加模数

代码语言:javascript
复制
340282366920938463460374607431768211337

为了表示128位数字,我使用了两个64位数组

代码语言:javascript
复制
low_A = A.aa[0];
low_B = B.aa[0];
low_M = M.aa[0];
high_A = A.aa[1];
high_B = B.aa[1];
high_M = M.aa[1];

因此,选择较低和较高的部分(我们可以粗略地说,通过这种方式,数字将呈现给第64个数字系统)。问题是,当将数字A和B相加时,物理上会发生溢出。尽管二进制表示保持为真,但是向不存在的比特执行传输。如果有转移,我们肯定已经知道给定的数字大于模数。那么我们如何向机器解释结果应该是什么呢

代码语言:javascript
复制
A+B-M

if (high_A <= ULLONG_MAX - high_B) flag_h = 0; else flag_h = 1;
if (flag_h) {
    int car = 0;
    high_A = high_A - high_M;
    high_B = high_B - high_M;
    high_C = high_A + high_B + high_M;
    if (low_C <= low_M)
    {
        low_C = low_M - low_C;
        low_C = ULLONG_MAX - low_C + 1;
        car = 1;
    }
    else { low_C = low_C - low_M; }
    high_C -= car;
}

我试着用上面的方式来做这件事,但是程序仍然发现它是错误的。我解释了我想做的事情。我试着做一个数学公式(A-M) + (B-M) + M = (A + B-M)。我试着从高年级和低年级中减去。让我们用数字来表示

代码语言:javascript
复制
_ 51
  38
 1) 8-1 = 7, 7 more will have to be subtracted
 2) We simulate a loan at the senior level
 3) 10-7 = 9 + 1 - 7 = 3
 4) Set loan flag in the unit
 5) 5 - 3 - flag = 1
 6) 13
EN

回答 1

Stack Overflow用户

发布于 2017-11-11 17:58:10

我找到了问题的解决方案,开始从高阶减法,这是代码

代码语言:javascript
复制
if (flag_h) 
{
    int car = 0;
    unsigned __int64 temp1,temp2;
    if (high_C < high_M)
    {
        temp1 = high_M - high_C;
        high_C = ULLONG_MAX - temp1 + 1;
    }
    else { high_C = high_C - high_M; }
    if (low_C < low_M) {
        temp2 = low_M - low_C;
        low_C = ULLONG_MAX - temp2 + 1;
        high_C--;
    }
    else { low_C = low_C - low_M; }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47110832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档