Как реализовать GNUMP в этом алгоритме чисел Бернулли, который я написал в C? - PullRequest
1 голос
/ 04 мая 2020

Я написал этот C алгоритм для вычисления чисел Бернулли, когда ввод N-й, но он работает только до 136-го из-за ограничений с плавающей запятой C. Я не программист, а скорее математик. Мой друг расскажет о реализации этого GNUMP, но я понятия не имею, что это такое и как это сделать. Мой алгоритм маленький и быстрый. Кто-то здесь может мне помочь? Извините за ошибки, английский sh не мой родной язык

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double over(int n, int k) {
    double result = 1.;

    for (int i = 1; i <= k; i++) 
        result *= (double) (n - i + 1) / (double) i;

    return result;
}

int main(int argc, char **argv) {
    int m;
    double b = 0;

    if (argc != 2) {
        fprintf(stderr, "Usage: %s <index>\n", *argv);
        return -1;
    }

    m = atoi(*++argv);
    if (m % 2) {
        fprintf(stderr, "Index must be even!\n");
        return -2;
    }

    for (int k = 0; k <= m; k++) {
        double sign = 1.;
        for (int v = 0; v <= k; v++) {
            b += sign * over(k, v) * pow((double) v, (double) m) / ((double) (k + 1));
            sign = -sign;
        }
    }

    printf("B_%d = %f\n", m, b);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...