Я написал этот 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;
}