Suma ciągu danego wzorem w C++

Witam,

mam takie zadanie: Obliczyć sumę ciągu danego wzorem f(x)= -2/(3x-28), f(789)+f(785)+f(781)+…

Rozwiązałem to ale nie mam pojęcia jak to sprawdzić (ręcznie wydaje się być trochę roboty) :confused:

/*

    f(x)=-2/(3x-28)

    f(789)+f(785)+f(781)+...

*/


#include 

using namespace std;


main(){

    float f,s=0; //deklaracja zmiennej f (f=f(x)) i sumy

    int x=789; //deklaracja zmiennej calkowitej x


    for(int i=x;i>=1;i=i-4){ //petla od i=789 do i=1, krok i=i-4

        f=-2/(3*i-28);

        s=s+f;

    }

    cout<


    system("PAUSE");

}

[/code]

Jak sprawdzić czy program działa dobrze? Ewentualnie gdzie zrobiłem błąd? Dzięki i pozdrawiam

Żeby sprawdzić trzeba mieć prawidłowy wynik. Napisałem też program i mi wyliczył tyle: 1.2341

Najprościej sprawdzić w excelu.

Program nie działa dobrze, ponieważ -2/(3*i-28) zawsze da wynik całkowitoliczbowy dzielenie z resztą.

Aby podzieliło tak jak chcesz jeden z operandów ma być zmiennoprzecinkowy np: -2.0/(3*i-28) lub -2/(3*i-28.0) lub -2/(double)(3*i-28) itp.

#include using namespace std;

? Jak to nie istnieje jak istnieje(aż się upewniłem na: VS 2010 x86 i x64, GCC 4.4.0, MinGW 4.4.0)?

Znowu nie dokładnie się wyraziłem… Zauważ że w gcc i mingw i borlandzie trzeba zaznaczyć specjalną opcje aby nie traktował fłoat jako double. Nie mówiąc już o fakcie że na double program działa zdecydowanie szybciej niż na float (na komputerach od 486 i wyżej).

A co takiego robi cin.get() w tym programie?

edit: przypomniało mi się, że miałem o coś zapytać. W którymś kompilatorze (chyba VS) w funkcji main na starcie w okrągłych nawiasach miałem taki siąg znaków: int argc, char *argv[]. Do czego one służą?

Dzięki i pozdrawiam

Do przyjmowania parametrów.

int main(int ilosc,char *parametry[])

Sorry za offtop, ale piszesz bzdury

#include 


int main()

{

  std::cout << sizeof(float) << " - Rozmiar floata\n";

  std::cout << sizeof(double) << " - Rozmiar double'a\n";

  std::cout << sizeof(long double) << " - Rozmiar long double'a\n";

  return 0;

}

Skompiluj to jakim chcesz kompilatorem i sprawdź. gcc 4.4.1 uruchomiony poleceniem:

g++ -Wall prec.cpp -o prec

dał program, który wypisał:

4 - Rozmiar floata

8 - Rozmiar double'a

12 - Rozmiar long double'a

A sprawdzałeś czasy wykonania operacji na float i double?

Pewnie w nowszych procesorach będą takie same, ale to już sprawa _architektury_ - nie kompilatora.

No to jak nie masz pewności to sprawdź, a jak nie chcesz nawet sprawdzić to poco w tej sprawie głos zabierać?

Nie sprawdzę, bo nie mam nic z półki Core 2 Duo Turion Extreme :stuck_out_tongue:

Mistrzowsko potrafisz zmieniać temat [-X . Nigdzie wcześniej nie ustosunkowywałem się w sprawie wydajności floatów i double’i, więc nie odwracaj kota ogonem. Wskaż w gcc tę

(bo to Ci wytknąłem), to się przyznam do błędu :lol:

W g++ opcja: -fshort-double

Z poziomu DevCpp: Opcje projektu, Kompilator, Wytwarzanie kodu, druga opcja od góry - “Używaj tego samego rozmiaru double co dla float”.

4 - Rozmiar floata

4 - Rozmiar double'a

8 - Rozmiar long double'a

Miał nie traktować float jako double, a traktuje double jako float… to chyba nie to samo :stuck_out_tongue:

----EDIT:

Mała podpowiedź: trochę wcześniej użyłem opcji -Wall, po czym kompilator nie sprowadził floata do double’a… może coś w tym jest? :?