matlab - 如何对 64 次幂进行模 2 加法
问题描述
我想在 MATLAB 之间p1
和p2
使用 MATLAB 之间对 64 次幂执行加法模 2。p1
和都是p2
类型uint64
。下面的代码正确吗?
c1 = p1 + p2;
if (c1> 2^64)
c1 = c1 - 2^64;
end
解决方案
类型变量的最大值uint64
是2^64-1
(在 Matlab 中intmax('uint64')
),当您执行超过此值(溢出)的加法运算时,结果为2^64-1
,因此您的代码将无法工作。
例如:
p1 = uint64(2^64-1) - 5;
p2 = uint64(10);
c1 = p1 + p2;
结果c1
是:
>> c1 =
uint64
18446744073709551615
这是2^64-1
(而不是 2^64-1 + 5
)
结果c1-p1
是:
>> c1-p1
ans =
uint64
5
但应该是10
解决方法:
您可以在加法之前检查是否会有溢出,如果有,请计算余数:
intmaxDif = intmax('uint64') - p1;
if(p2 > intmaxDif)
c1 = p2 - intmaxDif - 1;
else
c1 = p1 + p2;
end
p1
此代码将在和之间执行 64 次幂的模 2p2
感谢Cris Luengo的更正。
推荐阅读
- python - Django Wagtail:我们可以选择编辑任何 Page 模型的 list_display 吗?
- csv - 在 DataWeave 2.0 中读取不带标题的 CSV
- windows - 如何以编程方式为应用程序设置默认输入和输出音频设备?
- javascript - InnerHTML 中的代码在 onclick 上不显示
- android - ListView 已从 react native 中移除
- php - 格式化 date() 问题
- html - 将 Google 可视化导出为图片
- r - 如何使用多行将 x 轴标签的一部分(一个或两个单词)斜体
- firebase - 错误 Dart/Flutter: 'context != null': 不正确
- mongodb - MongoDB Go 驱动程序在不应该查看本地主机时