2014-01-14 2 views
0

Как говорится в названии, как я могу рассчитать сумму номеров n: 1+(1/2!)+...+(1/n!)? Я уже получил код для гармонического ряда:Расчет суммы 1+ (1/2!) + ... + (1/n!)

#include <stdio.h> 

int main(void) 
{ 
    int v=0,i,ch; 
    double x=0.; 

    printf("Introduce un número paracalcular la suma: "); 

    while(scanf("%d",&v)==0 || v<=0) 
    { 
     printf("Favor de introducir numeros reales positivos: "); 

     while((ch=getchar())!='\n') 
      if(ch==EOF) 
       return 1; 
    } 

    for (i=v; i>=1; i--) 
     x+=1./i; 

    printf("EL valor de la serie es %f\n", x); 
    getch(); 
    return 0; 

} 

вопрос здесь: я уже получил сумму в качестве фракции, но как я могу вычислить переменную «я» Факториал?

Примечание: программирование Я нахожусь в языке C, с DEV -C++ 4.9.9.2

ответ

0

AC = 1; для (i = n; i> 0; i--) ac = ac/i + 1;

сохраняет вычисления факториалов и избегает ошибок округления.

1

Обычно с помощью рекурсивного метода можно создать факториальную функцию. Обратите внимание: $$ n! = \ left \ { \ begin {array} {lr} : n = 1 \\ n (n-1)! &: n \ end {array} \ right. $$

Я думаю, это будет означать что-то вроде

public int Factorial(int n)  
{ 
     return (n == 1 ? 1 : n * Factorial(n - 1)); 
} 
+0

При больших значениях $ N $, то это должно быть сделано с помощью логарифмов, поскольку биты, сохраненные с помощью целых чисел не является достаточным, а также более восприимчивы к ошибкам. Кроме того, чтобы сделать код намного быстрее, для больших значений $ n $ можно использовать приближение Стирлинга с очень высокой точностью. –

2

за $ N $ больше, чем около $ 20, $ просто использовать математическую константу $ е. $ Ниже $ 20, $ это действительно Безразлично» что бы вы ни делали.

0

Рекурсия и факториалы отсутствуют.

double fraction=1, sum=0; 
long i,n; 
for(i=1;i<=n;i++) 
    sum+=(fraction/=i); 

Выход:

n=1 
sum=1 

n=2 
sum=1.5 

n=3 
sum=1.666666666 

n=1073741824 
sum=1.71828182845904553488480814849026501178741455078125 
Смежные вопросы