» »

[C++]Fibonaccijevo zaporedje - težava s kodo

[C++]Fibonaccijevo zaporedje - težava s kodo

alexa-lol ::

hej na forumu slotech sem našel naslednjo kodo

#include <iostream>

using namespace std;

int main()
{
    int f1 = 0, f2 = 1, i = 0;
    
    while (i < 25)
    {
          i++;
          f1 = f1 + f2;
          f2 = f2 + f1;
          cout << f1 << endl;
          cout << f2 << endl;
}
system("PAUSE");
return 0;
}

koda pa ima težavo in sicer vrednost n je 1836311903 naslednja vrednost pa je -132375223 :)
zanima me kako bi rešil težavo :)
hvala

smoke ::

problem je v tem da mas "signed" spremenljivke. se pravi lahko zavzamejo pozitivne in negativne vrednosti. tocno to pa se zgodi v tvojem primeru. nastavi na "unsigned" pa bo vredu.

unsigned int f1 = 0, f2 = 1, i = 0;

WarpedGone ::

namesto int napiši long
Zbogom in hvala za vse ribe

incognito ::

Zgodi se točno tako kot je napisal smoke,

Tip int ima na voljo 32 bitov, ker je predznačen (+, -) ima 1 bit za predznak in preostalih 31 za samo vrednost število.

2^31 = 2147483648, kar pomeni da ta int lahko zavzame vrednosti od -2147483648 pa do 2147483648.

Prva rešitev je takšna kot je predlagal smoke, torej popravi deklaracijo spremenljivk v unsigned int (s tem dobiš še en bit) oziroma long.

Druga pa bi bila da bolj drastično spremeniš tip, morda kar v float oziroma double. Tedaj ti pa zlepa ne bo zmanjkalo števil. ;)

Zgodovina sprememb…

alexa-lol ::

saj sem sumil da je težava v tem ampak sem malo ven iz c++ programiranja pa nsiem tocno vedel kere so sploh vrste spremenljivk.

kako bi pa naredil da mi izpiše čas računanja? torej da začne pri int main() in konča pri system("PAUSE");

smoke ::

Ce si na windowsih je ena moznost da uporabis funkcijo GetTickCount(). Ta vrne stevilo preteklih sekund od takrat ko si zagnal sistem. Se pravi poklices funkcijo na zacetku in na koncu in nato odstejes to kar si dobil. Res pa je da stvar nebo nevem kako natancna glede na to kako so danasnji procesorji hitri. :)

Brane2 ::

Pri signed int imaš na voljo eno več vrednost v negativnem obsegu kot v pozitivnem, doseg je torej -2147483649 pa do 2147483648.


Kar se merjenja časa tiče, je na Linuxu na voljo več alternativ. So funkcije v glibc, lahko pa pokličeš instrukcijo v asm ( rdtsc/rdtscp ? ), ki ti da direktno stanje CLK števca v CPU core. Če imaš izklopljen CnQ in podobne mehanizme za šparanje, bi morali biti odčitki precej točni...
On the journey of life, I chose the psycho path.

Sergio ::

Druga pa bi bila da bolj drastično spremeniš tip, morda kar v float oziroma double. Tedaj ti pa zlepa ne bo zmanjkalo števil. ;)


Tole ni res. :)

Float je 32-biten, tako kot int, double pa 64-biten, tako kot long.

Deklariraj variable kot unsigned long, pa je, ampak ne misliti, da ti ne bo spet zmanjkalo števil :)
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

smoke ::

Glede longa nebo drzalo. long int je na 32bit procesorju 32biten. razen ce mislis "long long". :) Obstaja sicer tudi tip __int64, ki je povsod 64biten. :)

Brane2 ::

Pri signed int imaš na voljo eno več vrednost v negativnem obsegu kot v pozitivnem, doseg je torej -2147483649 pa do 2147483648.


Errm, majhen zajeb. Sem hotu reč od -2147483648 do 2147483647 ;o/
On the journey of life, I chose the psycho path.

BigWhale ::

Pri signed int imaš na voljo eno več vrednost v negativnem obsegu kot v pozitivnem, doseg je torej -2147483649 pa do 2147483648.


Errm, majhen zajeb. Sem hotu reč od -2147483648 do 2147483647 ;o/


Ja drugic prosim, da si bolj natancen! :>

Brane2 ::

Sliši se smešno ampak takile simpl zajebi imajo potenciale za večja s*anja...
On the journey of life, I chose the psycho path.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Sql poizvedba

Oddelek: Programiranje
111392 (896) zgubar
»

Fizika pomoč

Oddelek: Šola
181161 (838) korenje3
»

C++ array in klicanje funkcij vsakega elementa

Oddelek: Programiranje
5641 (533) smoke
»

C#, TextBox in PopUp forma

Oddelek: Programiranje
61030 (924) MarCar
»

Vaje za fiziko

Oddelek: Šola
62678 (2487) gzibret

Več podobnih tem