[c] sommatoria di un particolare prob

di il
5 risposte

[c] sommatoria di un particolare prob

Salve devo implementare il seguente algoritmo:
Scrivere una function C per calcolare una somma di addendi dello stesso ordine di grandezza.Usare a scelta una vers. iterativa o ricorsiva. Applicare l'algoritmo al particolare problema test :
SOMMATORIA ? da k=1 a 10^8, di 10^-6

quello che non mi è chiaro è quale tipo di variabile usare.Visto che 10^8 è uguale a 100 milioni.

double addendo=pow(10, -6);
?tipo? N= pow (10 , 8) ;

5 Risposte

  • Re: [c] sommatoria di un particolare prob

    Centomilioni stanno tranquillamente in 4 byte... qual'è il problema?
  • Re: [c] sommatoria di un particolare prob

    ixamit ha scritto:


    centomilioni stanno tranquillamente in 4 byte... qual'è il problema?
    Quindi uso una long...

    ho fatto in questo modo ... il compilatore non da errori ma va in errore al momento dell'esecuzione :
    
    #include <stdlib.h>
    #include <float.h>
    #include <math.h>
    
    
    #include "function16.h"
    void main ()
    {
    long N= pow(10, 8);
    double addendo= pow (10 , -6);
    double somma,a[N];
    int i;
    somma=0;
    for(i=0;i<N;i++)
    	{	
    	a[i]=addendo;
    	}
    //faccio la somma tramite la function che somma le componenti diametralmente opposte dell'array
    
    somma=somma_blocchi(N, a);
    printf("La somma e' %e\n",somma);
    system("PAUSE");
    }
    float somma_blocchi (long N, double a[])
    {
          unsigned int k;
          long Nmez;
          while (N>1)
          {Nmez=N/2;
          for (k=0; k<Nmez; k++)
          a[k]=a[k]+a[N-1-k];
          if (N%2==0)
          N=Nmez;
          else 
          N=Nmez+1;
          }
          return a[0];
          }
          
  • Re: [c] sommatoria di un particolare prob

    Sinceramente non ho capito cosa deve fare il programma.
    Ma cmq a cosa ti serve quell'array di 10^8 double?
    Fossi in te... penserei a un'altra soluzione di implementazione.
  • Re: [c] sommatoria di un particolare prob

    Draxent ha scritto:


    Sinceramente non ho capito cosa deve fare il programma.
    Ma cmq a cosa ti serve quell'array di 10^8 double?
    Fossi in te... penserei a un'altra soluzione di implementazione.
    Ti spiego perchè è un problema particolare:
    Se devo sommare 100 volte un numero , con il numero=3 (esempio del tutto casuale)
    Faccio semplicemente cosi:
    for (i=0;i<100;i++)
    somma=somma+numero;
    
    Questo è un particolare caso (fine didattico) perchè sommando 100 milioni di volte il numero=10^-6 , deve dare come risultato 100.
    Se lo svolgo come sopra il risultato si ferma a 36. Allora viene proposto, per evitare che la somma non incrementi piu', l'algoritmo di somma a gruppi
    float somma_blocchi (long N, double a[])
    , che ho scritto nel post precedente e in tale algoritmo (scritto dalla prof) vedo un array. Spero di essere stato chiaro almeno a farvi capire cosa dovevo fare...
  • Re: [c] sommatoria di un particolare prob

    
    long N= pow(10, 8);
    .....
    double a[N];
    
    A parte che questo pezzo di codice non si compilerebbe su tutti i compilatori (specie quelli non conformi a C99 - vedi Visual Studio), stai esaurendo lo spazio stack con a[100 milioni] per quello che il compilatore va in tilt.
Devi accedere o registrarti per scrivere nel forum
5 risposte