[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