在 C 中设置自己的类型限制?

  • 本文关键字:类型 自己的 设置 c
  • 更新时间 :
  • 英文 :


我可以为C中的数据类型设置自己的限制吗?我正在解决一些涉及一些超大数字的问题,我希望进行许多加法和乘法运算,并将最终结果取某个所需数字的模,比如1537849。因此,我想知道是否有可能重置数据类型的限制,以便当任何操作的结果超过我指定的数字时,这些值会自动取模,就像处理器通常所做的那样,但有我希望的限制。如果这样的事情不可能发生,那么谈判这样一个问题最有效的方法是什么?

编辑:

假设要计算(2^1000(%1537849,并将结果放入变量monster中。以下是我试图解决的问题:

uint64_t monster = 1;
uint32_t power = 1000;
for (uint32_t i = 0; i < power; i ++ ) {
monster *= 2;
if (i%64==63) monster %= 1537849;
}
monster %= 1537849;

有没有更好的方法(不同的算法,使用库,等等(??

我可以为C中的数据类型设置自己的限制吗?

基本类型的限制是每个编译器固定的。

我希望执行许多加法和乘法运算,并将最终结果取模,取某个所需的数字,比如1537849

在加法和乘法的任何阶段,代码都可以重复执行模运算。如果原始数字是N位的,则最多需要N位的数学运算——尽管使用2N位的数学比较容易。无限宽的数学是低效的,不需要这个任务。

具有模限制的+*pow()的示例代码:
无范围限制的模幂

uintmax_t addmodmax(uintmax_t a, uintmax_t b, uintmax_t mod);
uintmax_t mulmodmax(uintmax_t a, uintmax_t b, uintmax_t mod);
uintmax_t powmodmax(uintmax_t x, uintmax_t expo, uintmax_t mod);

我可以为C中的数据类型设置自己的限制吗?

不,除了编写自己的编译器和库。

我正在解决一些问题,这些问题涉及一些超级大的数字,这些数字很容易超过类型的限制

有一些算法可以处理零件中的巨大数字。。。还有一些库已经为您完成了这项工作,例如,看看GNU多精度算术库(GMP(。

最新更新