Toon posts:

[alg] Welke taal s geschikt om met grote getallen te werken?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben op zoek naar een manier op met hele grote getallen te werken, zonder dat deze worden afkort tot bijv: 3,3397220793312434078110999994679e+33 zoals bijvoorbeeld met de datatypen van Visual Basic het geval is.

Op wat voor een manier kun je het beste 563458982^12 uitrekenen en ervoor zorgen dat de return value een reeel getal is?

Is dit uberhaupt mogelijk met een 32bit processor of moet je voor dit soort taken een 64bits proc hebben met een daarvoor geschikte compiler?

Verwijderd

Ik weet het niet zeker, maar het eerste dat me in gedachten schiet is Matlab, een wiskundige programmeertaal.

Verwijderd

Ik weet dat er voor C (en C++), pascal (ook delphi dus) wel code te vinden is om te zorgen met zeer grote getallen.

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Kan met elke taal.

Als er ergens geen datatype voor is, betekent het nog niet dat een pc het niet kan.

Jij kunt toch ook wel een staartdeling maken van
745 /7364786542376537845678346578345\ ?

Nou.. dan kan je dat dus ook programmeren. (En zo ook met machtsverheffen natuurlijk)

Siditamentis astuentis pactum.


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Het gaat denk ik niet om de taal maar om de juiste bibliotheek die het kan. Zoals deze voor perl.

| Toen / Nu


  • Sendy
  • Registratie: September 2001
  • Niet online
In perl kan het ook, je kan dan bigint.pm gebruiken. Maar als je voor jouw favoriete programmeertaal niet zo'n library kan vinden schrijf je het zelf!

Een simpele manier om zo bijvoorbeeld 56345892^12 uit te rekenen is dan gewoon 56345892 * 56345892 * .. * 56345892 (12x) te doen. Hoe je twee getallen vermenigvuldigd heb je natuurlijk gewoon op de basisschool geleerd.

edit:

Te laat :'(

[ Voor 5% gewijzigd door Sendy op 03-12-2003 17:19 ]


Verwijderd

Topicstarter
Hoe je twee getallen vermenigvuldigd heb je natuurlijk gewoon op de basisschool geleerd.
Nee, leg eens uit, hoe dan/ ;)

Verwijderd

Getallen in strings (Misschien zelfs in bestanden op schijf als het om hele grote getallen gaat) opslaan en vervolgens functies schrijven die de strings opdelen in kleinere getallen om mee te rekenen (Ongeveer zelfde principe als je met grote getallen zonder reken machine moet rekenen).

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:36
Het lijkt me niet zinnig om voor een enigszins complex programma zelf je big numeral code te gaan schrijven (zoals sommige mensen wel suggeren). Je kunt dus het beste kijken naar bestaande libraries.

Sommige talen hebben als voordeel dat het werken met grote getallen hetzelfde gaat als met gewone getallen (Python, C++, Perl); ik kan me voorstellen dat dat een voordeel is, maar dat neemt niet weg dat er ook wel libraries voor (bijvoorbeeld) C bestaan.

Kort samengevat kun je dus beter eerst bedenken in welke talen je kunt en wilt werken en daarna kijken welke daarvan het meeste geschikt is voor het werken met grote getallen.

[ Voor 26% gewijzigd door Soultaker op 03-12-2003 19:57 ]


Verwijderd

haskell kan et standaard, maar of je daar nou vrolijk van wordt :)

  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Python kan het standaard, en daar wordt je wel vrolijk van :)
[E:]python
Python 2.3.2 (#49, Oct 2 2003, 20:02:00) [MSC v.1200 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print 563458982**12
102411251998613262277733097587046948136480571262478756483601268
5943581025434517882130356436450921883570176
>>>
edit: iets meer to the point: hoe je dit kunt uitrekenen. Niet zelf een algorithme bedenken. Kijk in de source van Python's long object (longobject.c) of gebruik de GNU MP library. Java heeft het ook: BigDecimal/BigInteger classes. Arbitrary precision integers heet dit.

[ Voor 36% gewijzigd door PommeFritz op 03-12-2003 23:38 ]

FireFox - neem het web in eigen hand

Pagina: 1