[ Príspevkov: 7 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 07.11.08
Prihlásený: 07.11.08
Príspevky: 1
Témy: 1 | 1
NapísalOffline : 07.11.2008 10:58 | Faktorial - pretečenie

Zdravim. Robím na jednom fyzikálnom programe a potrebujem v ňom vypočítať faktoriál veľkých čísiel, napr. faktorial čísla 50. Spravil som si na to takúto funkciu :

function Faktorial( N : integer ) : longInt;
begin
if N > 1 then
Faktorial := N * Faktorial( N - 1 )
else
Faktorial := 1;
end;

Môj problém je nasledovný : ak sa pokúsim vypočítať faktoriál čísla 17, funkcia vráti zápornú hodnotu, čo je nezmysel. Je mi jasné že problém je v pretečení. Avšak najväčší ordinálny typ v Pascale je longInt. Jeho rozsah však zjavne nedokáže pokryť moje potreby. Čo mám roiť ? Ešte by som mal uviesť že program píšem v pascale ( program je určený pre DOS ).


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0 | 0
NapísalOffline : 07.11.2008 19:28 | Faktorial - pretečenie

Budeš musieť použiť pole bajtov (prípadne možno nájdeš knižnicu, ktorá je určená na počítanie s veľkými číslami).


Offline

Užívateľ
Užívateľ
Faktorial - pretečenie

Registrovaný: 21.04.07
Prihlásený: 02.05.11
Príspevky: 204
Témy: 26 | 26
NapísalOffline : 07.11.2008 19:50 | Faktorial - pretečenie

pascal má aj dátový typ int64 čo je teoreticky obor čísiel 2^64 lenže najväčšie musí byť 61 viac my neprešlo


_________________
------------------------------------------------------------------------------------------------------------------------------------
FSC Esprimo Mobile M9400
CPU:T5450(2x1.66GHz) GPU:X3100 RAM:4 GiB HDD:120GB + 500GB ext. WD OS:Windows 7 Pro 64bit LCD:LG W2253TQ
Keyboard & mouse:Logitech Cordless Desktop EX 110
Offline

Užívateľ
Užívateľ
Faktorial - pretečenie

Registrovaný: 09.09.07
Prihlásený: 07.11.16
Príspevky: 3114
Témy: 233 | 233
Bydlisko: Nové Zámky
NapísalOffline : 08.11.2008 0:59 | Faktorial - pretečenie

nechcem trepnut kravinu, ale ak dobre viem, viac ako 69faktorial sa vyratat neda..


_________________
"It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď
Offline

Užívateľ
Užívateľ
Faktorial - pretečenie

Registrovaný: 19.09.06
Prihlásený: 19.02.26
Príspevky: 749
Témy: 31 | 31
Bydlisko: Ružomberok&...
NapísalOffline : 08.11.2008 11:18 | Faktorial - pretečenie

preco by sa nedal? Skus pouzit windows kalkulacku.
a k veci, myslim ze ak by si pouzil datovy typ extended, co je asi najvacsi rozsahom v pascale,tak by nemal byt problem, je sice s desatinnou ciarkou, ale pri faktoriale to nevadi.
A musis povolit numericky koprocesor {N+} a aj N musi byt extended


Offline

Užívateľ
Užívateľ
Faktorial - pretečenie

Registrovaný: 16.02.08
Prihlásený: 08.12.10
Príspevky: 235
Témy: 13 | 13
NapísalOffline : 09.11.2008 15:40 | Faktorial - pretečenie

Ako fyzik by si mal vediet, ze 50! je brutal velke cislo :)

odbocka: docent na prednaska u nas hovoril, ze jeden vulgarny kolega sa ho spytal na kurevske velke cislo. A jeho napadlo e^55 :-D

spat k teme. tie faktorialy som spravil cez stringy. Sice trabalo vlastnu aritmetniku, ale nic zlozite ani dlhe... Teda cez stringy to v pohode ide... Aj ked v Pascale ma string iba 255 znakov, co by mohol byt trochu problem, ale da sa pouzit pole znakov.

Na programovanie s velkymi cislami sa pouziva Mapple sa mi vidi...

Blackshadow: trepla si kravinu :)

odbocka2: U nas na prednaske. 1000! je sice velmi velke cislo, ale oproti nekonecnu je to stale nic :-D


Offline

Užívateľ
Užívateľ
Faktorial - pretečenie

Registrovaný: 16.02.08
Prihlásený: 08.12.10
Príspevky: 235
Témy: 13 | 13
NapísalOffline : 09.11.2008 15:45 | Faktorial - pretečenie

Hej, a som zabudol, rekurzi sa vyhybajte ak sa da. Pouzit rekurziu na faktorial je nezmysel...

Ale nie je ju zas budete zatracovat. Hanojske veze alebo backtrack bez rekurzie je samovrazda...

Ale sa jej da rozumne vyhnut, tak sa vyhnite.


_________________
Učet je neaktívny.
 [ Príspevkov: 7 ] 


Faktorial - pretečenie



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

i8080 pretečenie akumulátora - problém

v Backend

0

325

12.04.2013 2:23

AM-JP

V tomto fóre nie sú ďalšie neprečítané témy.

Pretečenie countera v C (Wiring)

v Backend

5

490

15.08.2017 8:01

BX

V tomto fóre nie sú ďalšie neprečítané témy.

Faktorial

v Benchmarky a diagnostické programy

1

1006

14.08.2007 0:21

Spirit

V tomto fóre nie sú ďalšie neprečítané témy.

Faktorial

v Backend

4

662

07.04.2015 16:35

leafycircle

V tomto fóre nie sú ďalšie neprečítané témy.

Faktorial - Pascal

v Ostatné

9

1750

28.09.2009 8:10

pizet

V tomto fóre nie sú ďalšie neprečítané témy.

Faktorial C++

v Backend

5

4865

16.01.2010 18:02

johny3212

V tomto fóre nie sú ďalšie neprečítané témy.

Faktorial v c++

v Backend

10

1903

02.06.2009 22:44

ado21

V tomto fóre nie sú ďalšie neprečítané témy.

[Pascal] Faktorial - zdrojak - surne

v Ostatné

2

6109

20.05.2008 18:02

Axwell



© 2005 - 2026 PCforum, edited by JanoF