Есть ли способ решить эту математическую задачу без дополнительных переменных? - PullRequest
1 голос
/ 02 мая 2019

Итак, я должен реализовать этот тип алгоритма:

P(x):=\prod_{i=0}^{n}\frac{(-1)^i}{x^i}

i начинается с 0 с шагом 1 и должно быть n итераций. Ввод x и n. Выход P, который является продуктом этой формулы. Итак, есть ли способ решить это без дополнительных переменных?

int main() {

    int x, exp = 1, n, i, o;
    float p = 1;

    printf("Input value of x: \n");
    scanf_s("%d", &x);
    printf("Input value of n: \n");
    scanf_s("%d", &n);
    for (i = 1; i <= n - 1; i++) {
          if (i % 2 == 0)
              o = -1;
          else
              o = 1;
          exp = exp * x;
          p = p * ((-1*(float)o) / exp);    
    }
    printf("Requested number is: %f\n", p);
    return 0;
}

Ответы [ 3 ]

3 голосов
/ 02 мая 2019
int n = 5;

int x = 20;

float result = pow(-1.0/x, n*(n-1)/2);

результат = 9,76563e-14

результат = -3.05176e-20 для n = 6 и x = 20

Используйте арифметическую прогрессию для числителя и денумератора.

enter image description here Где Z - сумма арифметической прогрессии от 1 до n-1 с общей разностью, равной 1.

1 голос
/ 02 мая 2019

Сериал, который вы пытаетесь вычислить, кажется неверным. Скорее, это будет сумма, чем продукт, поскольку продукт может быть упрощен до (- x) - (n * (n + 1)) / 2 , который быстро сходится к 0 для x> 1, колеблется между 1 и -1 для x = 1 и расходится для x <1. </p>

Продукт может быть вычислен без каких-либо других локальных переменных:

printf("Requested number is: %f\n", pow(-x, -n * (n + 1) / 2));

Чтобы вычислить сумму вместо произведения, которое представляет собой ряд Тейлора для 1 / (1 + x) , в код необходимо внести некоторые изменения, и он может использовать меньше переменных:

#include <stdio.h>

int main() {
    int n;
    double x, term, sum;

    printf("Input value of x: ");
    if (scanf_s("%lf", &x) != 1)
        return 1;
    printf("Input value of n: ");
    if (scanf_s("%d", &n) != 1)
        return 1;
    sum = term = 1.0;
    while (n --> 0)
        sum += term /= -x;

    printf("Requested number is: %f\n", sum);
    return 0;
}
0 голосов
/ 03 мая 2019

Исходная формула

Так что это исходная формула.Речь идет о продукте, а не о сумме.Большое спасибо, ребята, за ваши усилия и ответы.Я хотел решить эту проблему без дополнительных переменных, потому что профессор всегда предупреждает нас об использовании памяти и процессора.

...