c++ - 将 C 重构为 C++ 以进行伯努利数计算

标签 c++ c math refactoring

Rosettacode 有一个 article用于计算 Bernoulli numbers .不幸的是,它没有提供 C++ 示例,仅提供一个 C 示例(截至 2016 年 12 月 27 日)。

我对 C 不熟悉,但其中很多是可以识别的。该程序如何适用于 C++?

#include <stdlib.h>
#include <gmp.h>

#define mpq_for(buf, op, n)\
    do {\
        size_t i;\
        for (i = 0; i < (n); ++i)\
            mpq_##op(buf[i]);\
    } while (0)

void bernoulli(mpq_t rop, unsigned int n)
{
    unsigned int m, j;
    mpq_t *a = malloc(sizeof(mpq_t) * (n + 1));
    mpq_for(a, init, n + 1);

    for (m = 0; m <= n; ++m) {
        mpq_set_ui(a[m], 1, m + 1);
        for (j = m; j > 0; --j) {
            mpq_sub(a[j-1], a[j], a[j-1]);
            mpq_set_ui(rop, j, 1);
            mpq_mul(a[j-1], a[j-1], rop);
        }
    }

    mpq_set(rop, a[0]);
    mpq_for(a, clear, n + 1);
    free(a);
}

int main(void)
{
    mpq_t rop;
    mpz_t n, d;
    mpq_init(rop);
    mpz_inits(n, d, NULL);

    unsigned int i;
    for (i = 0; i <= 60; ++i) {
        bernoulli(rop, i);
        if (mpq_cmp_ui(rop, 0, 1)) {
            mpq_get_num(n, rop);
            mpq_get_den(d, rop);
            gmp_printf("B(%-2u) = %44Zd / %Zd\n", i, n, d);
        }
    }

    mpz_clears(n, d, NULL);
    mpq_clear(rop);
    return 0;
}

谢谢!即使是一般性建议也很有帮助!

最佳答案

它可以在 C++ 上工作而无需更改我猜的几乎所有内容,无论如何您可以更改一些内容:

  • malloc对于 new : mpg_t * a = new mpg_t[n+1];

    或:mpq_t * a = (mpq_t *) malloc(sizeof(mpq_t) * (n + 1));

  • NULL对于 nullptr

  • 大多数 C 库已重命名(并弃用)自:something.hcsomething #include <stdlib.h>现在是#include <cstdlib>

  • 你可以写(包含在 cstdint header 中):

    for (uint32_t i = 0; i <= 60; ++i) { /* ... */ }

    代替:

    unsigned int i;

    for (i = 0; i <= 60; ++i) { /* ... */ }

关于c++ - 将 C 重构为 C++ 以进行伯努利数计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444878/

相关文章:

来自 main 的 C 函数没有插入 arm 中的堆栈

java - 为什么在 Java 中存储为 float 和 double 的相同值之间存在差异?

c++ - 什么是对象切片?

c++ - 通用容器清除过程中的异常,C++

c++ - 使用 CSerial (C++) 打开虚拟 COM 端口

c - 使用 -m64 标志会降低性能

c++ - 如何从 c 文件调用 c++ 类及其方法

c - 串行通信不会在模拟端口上阻塞

javascript - 如何检查 Javascript 中的指数值

algorithm - 用mips写俄罗斯农民乘法