如何使用mpfr函数编写c语言模2?

问题描述 投票:0回答:1

以下是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 ?

}

任何帮助表示赞赏。

c modulo mpfr
1个回答
0
投票

如果您只需要使用

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.