[LUGOS-PROG] napake

Marko Bevc fonzie at kibla.org
Tue Mar 26 09:19:54 CET 2002


Zdravo!

Nevem kaki progy mas to, vendar mislim, da je ze v implementaciji napaka 
in ne v OS-u! Prilagam ti primer izracuna fakultete in fibonaccijevega
zaporedja, kjer je algoritem pravi, in deluje vsepovsod!
Program je napisan v C++, zato ga skopilaj z: g++ ff.c -o nekaj

lp,
Marko

On Tue, 26 Mar 2002, Branko F. Gračner wrote:

> pozdravljeni.
> 
> spisal sem preprost programčič v ansi c-ju, ki računa fibonaccijeva števila.
> problem je, da ne deluje na vseh platformah pravilno.
> 
> FreeBSD: 4.5-STABLE, gcc-2.95.3
> deluje popolnoma pravilno, tudi z optimizacijo -O, -O2, z -O3 ne deluje več
> samo fib_rek_e() => vrne 0 za kakršnokoli spodobno cifro
> 
> RedHat 7.2, gcc-2.96-RH
> 
> - brez optimizacije: ne deluje pravilno noben izmed rekurzivnih algoritmob
> - -O2 => ne deluje pravilno noben izmed rekurzivnih algoritmov
> - -O3 => ne deluje pravilno noben izmed rekurzivnih algoritmov
> 
> Borland C++ 5.5
> ne deluje pravilno noben izmed rekurzivnih algoritmov, fib_rek_e() celo
> povzroči napako v stacku, tako da winsi killajo program med izvajanjem
> 
> zdaj me pa zanima, kaj je narobe z mojim programom, da se na različnih
> platformah dobijo taki različni rezultati in od kod te napake?
> 
> brane
> 
-------------- next part --------------
#include <iostream.h>

long double fibb(long double n);
long double f(long double n);

int main()
{
        long double n;

        cout<<"Vpisi stevilo:\n";
        cin>>n;
	if(n>0)
	        cout<<endl<<"Fakulteta je: "<<f(n)<<"\nFibonacijev clen pa: "<<fibb(n)<<endl<<endl;
	else
		cout<<"Vpisi stevilo, ki je vecje od 0!"<<endl;

	return 0;
}

long double fibb(long double n)
{
        long double i;

        if(n==1 || n==2)
                i=1;
        else if(n>2)
                i=fibb(n-1)+fibb(n-2);

        return i;
}

long double f(long double n)
{
        long double i;

        if(n>0)
        {
                if(n==1)
                        i=1;
                else
                        i=n*f(n-1);
        }
        else
                i=0;

        return i;
}


More information about the lugos-prog mailing list