以下是c语言代码示例:
int i;
for (i=0; i < 100; i++)
{
if (i % 2 == 0)
{
// do something
}
}
但是 i 变量是标准整数。我需要使用 mpfr_t 类型和正确函数的模 2 代码。 MPFR 图书馆。
我可以使用 while 循环并在循环中递增 i 变量:
mpfr_t i;
mpfr_init2(i, 100);
mpfr_set_si (i, 0, MPFR_RNDD);
while(mpfr_cmpabs(i,100)<0)
{
mpfr_add_si(i, i, 1, MPFR_RNDD);
// how to write modulo 2 ?
}
任何帮助表示赞赏。
如果您只需要使用
i
的值(模 2 为零)执行某些操作,则可以通过将 i
初始化为零(或其他所需的起始值)并在每次迭代中向其添加 2 来轻松完成。
如果您需要迭代
i
遍历所有整数,但当 i
为偶数或奇数时有选择地只执行一些代码,那么实现此目的的一种方法是保留 mpfr
计数器和单独的普通变量:
mpfr_t i;
mpfr_init2(i, 100);
// Define r to hold the residue of i modulo 2.
int r;
for (
// Start loop with i = 0 and r = 0.
mpfr_set_si(i, 0, MPFR_RNDD), r = 0;
// Iterate until i reaches endpoint.
mpfr_cmpabs(i, 100) < 0;
// Increment both i and residue r.
mpfr_add_si(i, i, 1, MPFR_RNDD), r = (r+1) % 2)
{
// Put code for each iteration here.
// Test whether the residue modulo 2 is 0, equivalent to i is even.
{
// Put code for when i is even here.
}
}
另一种解决方案是展开循环,以便写出两次迭代,同时将每次迭代的代码放入函数中:
mpfr_t i;
mpfr_init2(i, 100);
mpfr_set_si(i, 0, MPFR_RNDD);
while (mpfr_cmpabs(i, 100) < 0)
{
// Do things for a first value of i per loop.
DoStuff(i);
// Put code for when i is even here.
// Increment i to odd value.
mpfr_add_si(i, i, 1, MPFR_RNDD);
// Do things for a second value of i per loop..
DoStuff(i);
// Increment i to even value.
mpfr_add_si(i, i, 1, MPFR_RNDD);
}