Co liczy kod+czas wykonania funkcji

0

Siema mam 2 problemy: Pierwszy

  1. ktora funkcja wykona sie najszybciej a ktora najwolniej i dlaczego
    -y=a*a+a
    -y=pow(a,2)
    -y=exp(a)
    y=log(a)
    y=sin(a)

Druga sprawa to problem ze zrozumieniem kodu nizej i znalezieniem w nim ewentualnego bledu ktory ponoc jest. Za co ten kod w ogole odpowiada

#include<stdio.h>
#include<math.h>
#define LDANYCH 1200
float sigma(double *dyspersje, int liczba, float tabl[][LDANYCH])
{
    unsigned int i=0,k;
    double suma,suma_kw,dysp,sr_dysp=0,wartosc;
    while(i<liczba)
    {
        suma_kw=0;
        for(suma=0.,k=0;k<liczba;k++)
        {
            suma=suma+tabl[i][k];
            suma_kw=suma_kw+(tabl[i][k]*tabl[i][k]);
        }
        dysp=suma_kw/((double)k-(suma/liczba)*(suma/liczba));
        if(dysp!=0.) dyspersje[i]=sqrt(dysp);
        else {dyspersje[i]=0;}
        wartosc=pow(dysp,1/2);
        sr_dysp=sr_dysp+dysp;
    }
    sr_dysp/=liczba;
    return sr_dysp;
    }
0

jezeli chodzi o pierwsze pytanie zalezy od implemetancji

a na dodatek to nie ma znaczenia dopoki nie robisz cos bardzo ciezkiego z matematyka

a odnosnie kodu to bierz debugger i jedziesz

0
  1. Zrób sobie benczmarki -- puść każdą funkcję w pętli milion razy i zmierz czas.
  2. Jak masz znaleźć błąd, skoro nie wiadaomo co kod ma robić?
0

Błędy:

  1. Warunek pętli while dla liczba > 0 w pętli nie zmieniasz wartości zmiennych "i, liczba"(Czyli jest zawsze spełniony)!
  2. Jeśli dzielisz przez jakąś zmienną/wyrażenie warto przynajmniej mieć pewność że jest ona większa o zera!

1 użytkowników online, w tym zalogowanych: 0, gości: 1