Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Eigener Datentyp

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.08.2003, 13:11 Uhr
niels_ole_salscheider



Hallo,
wie kann man in C/C++ einen eigenen Datentyp erstellen?
Ist es möglich, diesen dynamisch anzulegen, also, dass die Größe einer Zahl nur auf die größe des RAMs begrenzt ist?

Danke

Ole

Dieser Post wurde am 28.08.2003 um 13:13 Uhr von niels_ole_salscheider editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.08.2003, 13:23 Uhr
0xdeadbeef
Gott
(Operator)


Wenn du eine Zahl größer als long long meinst, das ist nicht so einfach. Das liegt aber nicht an C, sondern daran, dass der Prozessor das nicht mehr verarbeiten kann. Wenn man richtig große Zahlen braucht, rechnet man in der Regel mit Strings, was allerdings deutlich langsamer ist. Wenn du das willst, schau dir mal die GMP library an: www.gnu.org/software/gmp
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.08.2003, 13:23 Uhr
Pablo
Supertux
(Operator)


In C kann man mit


C++:
typdef struct
{
    xxx memebr1;
    yyy memebr2;
    ...
} DATENTYP;



In C++ würde ich eine Klasse nehmen.

Ich verstehe nicht ganz, was du mit der Größer einer Zahl meinst, aber ich bin sicher, dass man diesen Datentyp schon dynamisch anlegen kann.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.08.2003, 13:35 Uhr
niels_ole_salscheider




Zitat:
Ich verstehe nicht ganz, was du mit der Größer einer Zahl meinst, aber ich bin sicher, dass man diesen Datentyp schon dynamisch anlegen kann.


Das Problem besteht darin, dass ich ein Programm schreiben will, das eine Zahl berechnet, die theoretisch unendlich groß sein kann. Und dabei möchte ich halt möglichst viel Speicher verwenden, das Programm soll aber, wenn möglich, auch auf Computern mit weniger Speicher laufen, weshalb ich ja nicht sagen kann, dass die Zahl höchstens xy MB belegen darf...

Auf die Idee mit der Struktur bin ich auch schon gekommen, aber irgendwie hat das nicht ganz geklappt...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.08.2003, 15:12 Uhr
~RHBaum
Gast


Worauf sich dann bei mir die Frage stellt, wozu braucht man das ?

wenn du Zahlen hast im Bereich von 10E99, brauchst du dann wirklich auf die Stelle genau ?

Bisher haben INT64 und UINT64 fuer intergers und double fuer float immer ausgereicht.

Kann man dein problem nicht in mehrere Probleme mit kleineren Zahlen zerlegen ?

generische klassen fuer unendliche Anwendungsmoeglichkeiten sind sicher toll, aber wer wuerde die nutzen, wenn der rechenaufwand auch fuer triviale Sachen ins unermessliche steigt ... ?


CIao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.08.2003, 16:04 Uhr
niels_ole_salscheider



Für viele normale Sachen reichen die normalen Datentypen sicherlich aus, aber es kann nicht schaden, wenn man den Usern die Auswahl zwischen den normalen Datentypen und zwischen den genaueren anbietet, so dass jeder das nutzen kann, was für seine Zwecke am besten geeignet ist...

Ole
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
29.08.2003, 12:12 Uhr
~RHBaum
Gast


Ne generische Loesung ist aber meistens zu Aufwendig ... und funktioniert nie 100%

Fuer die meisten Faelle aus der Praxis sind Spezialfaelle die bessere Wahl .
Wenn ich 128 Bit Zahlen brauch, schreib ich mir ne Klasse fuer 128 bit Integers, und keine fuer 0 - unendlich bit ... . Das bringt mir definitiv vorteile in der Ausfuehrungsgeschwindigkeit, und bei der implementierung der grundlegenden mathematischen Operationen.

Deswegen frag ich ja nach dem Anwendungsfall.

Und sind es in der Praxis nicht genau eben diese Dingem die den Programmierieren "das Genick brechen" ?
Wie oft verlangen "User" Funktionalitaet von den Programmen, die Sie eigentlich niemals brauchen (koennen) ? Einfach nur weils cool waer, wenn mans haette. Uns aber stunden um Stunden an arbeit kosten ?

Ich sag mal, der User soll sich darueber zuerst gedanken machen, ob er es wirklich braucht, genau so hier ... Ich glaub einfach nicht, das der Fragesteller wirklich so ne flexible Loesung jemals brauchen wird, geschweige denn auch wirklich mehr als einmal verwenden wuerde ...

Ciao ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
29.08.2003, 15:24 Uhr
niels_ole_salscheider



Stimmt...
Aber ein bisschen größere Zahlen wären nicht schlecht. Hast du einen Link, wo steht, wie so was in etwa geht?

Ich hab nämlich nur das geschaft (und weiß nicht, was jetzt):


Code:
typedef struct
{
    int z1;
    int z2;
} DATENTYP;


int main()
{

DATENTYP a;

a.z1 = 0;
a.z2 = 4;

}



Ole

PS: Die Popups kommen nur dank meinem Domainanbieter (Freecity); dafür ist die Domain aber kostenlos...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
29.08.2003, 15:50 Uhr
~RHBaum
Gast



Zitat:
niels_ole_salscheider postete
Aber ein bisschen größere Zahlen wären nicht schlecht. Hast du einen Link, wo steht, wie so was in etwa geht?

Noe, aber habs mal rudimentaer sowas aehnliches fuer 128 bit machen durfen ...

Also fuer 2 mal int (also 64bit interger) kannst du locker UINT64 oder INT64 nehmen, das bringen viele compiler schon mit (oder such mal nach ULONGLONG etc. )

der weg mit den structs ist schon mal richtig ...

Fuer groessere Ints ... gehts ohne umwege unter C nicht, oder du aenderst deinen compiler ... mit umwegen = du schreibst fuer alle Standard-Operatoren eine spezielle ersatz-funktion ... so nach dem Motto int AddLargeInteger(MyLargeIntStruct * pTarget, MyLargeIntStruct Summand);

In C++ kannst das ein bisser komfortabler machen, in dem dir ne Class fuer die Integers schreibst, die dann nen festes Feld von ints oder bytes hat, und alle Operanden ueberlaedst ... ist am anfang ne Menge arbeit, dafuer kannst mit der class genau so arbeiten wie mit nem eingebauten Datentyp ...

Zuweisung und vergleiche solten recht easy sein ...
Addition und Subtraction ... dazu solltest dir mal binaeroperationen , also shiftleft shiftright etc anschauen ...

bei multiplication und division wirds dan schon etwas schwieriger ... viel spass beim stoebern in der literatur ... ich habs damals ned gebraucht

Und wenn du gern als Martyrer sterben willst, kannst dass auch mit einem dynamischen array of bytes oder ints machen ... vergleiche und zuweisungen sind da noch ok, addition und subtraktion vielleicht am rande der verzweiflung machbar ... aber wenn du nen 128Bit Int mit nem 64 bit int multiplizierst, und es soll dann nen 256 bit Int als ergebniss rauskommen, ... naja, viel spass dir und der CPU :-)

Oder Du machst es ueber string-mathematik ... da hat wer schon mal nen link gepostet, habs mir aber ned so angeschaut .... weiss also ned wo da die grenzen sind. Wenn man weiss, wie cpu aufwendig string operationen sind, wird man sowas wirklich nur im absoluten notfall nehmen ...

Ciao ...

--edit: quote verschönert.

Dieser Post wurde am 29.08.2003 um 15:54 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.08.2003, 15:58 Uhr
0xdeadbeef
Gott
(Operator)


Das, was ihr vorhabt, dürfte so viel schneller als String-Rechnerei auch nicht sein. Abgesehen davon sehe ich nicht, wie ihr die errechneten Daten jemals ausgeben wollt. Und ihr seid abhängig von der Architektur (big/little endian).
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: