suche Bibliothek für Sehr Große Integer Zahlen (am besten mit anleitung)
-
ok dass problem hab ich gelöst, doch nun gibt der compiler folgende fehlermeldung:
d:\eigene dateien\visual studio 2005\projects\test\test\gmp.h(1565) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(1389) : error C3861: 'mp_get_memory_functions': identifier not found
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(1690) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(1691) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(1692) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(1693) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(1694) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(1695) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(2073) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(2074) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(2075) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(2076) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(2077) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(2078) : warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)hat jemand eine ahnung, wie man das problem lösen kann?
-
das solltest du ignorieren dürfen
-
Das hier bestimmt nicht
d:\eigene dateien\visual studio 2005\projects\test\test\gmpxx.h(1389) : error C3861: 'mp_get_memory_functions': identifier not found
-
und wie kann ich nun das problem lösen?bzw. kennt jemand eine andere bibliothek?
-
Zeig bitte nochmal den aktuellen Code her. Vllt. kommen wir ja noch drauf.
MfG
GPC
-
der aktuelle code ist dieser gewesen(Visual C++ Studio 2005 express):
#include "stdafx.h" #include "math.h" #include "stdio.h" #include <gmp.h> int main(array<System::String ^> ^args) { mpz_t x,y; mpz_init (x); mpz_init (y); x=1234; y=x+1; Console::WriteLine(y); mpz_clear (x); mpz_clear (y); return 0; }dabei kam fi oben genannten compilerfehler. das Problem liegt hier aber in der <gmp.h>. dass heißt die bibliothek funktioniert nicht (dazu muss ich sagen, dass diese bibliothek aus GMP stand, einer Sammlung von algorithmen, die eigentlich nur für linux-compiler vorgesehen sind). Gibt es also eine andere bibliothek für ganz große Zahlen(am besten für zahlen ohne Längenbeschränkung)?
-
tja, was soll ich sagen, baue ich deinen C++/CLI mit C gmp Header in reines C um und kompilier's, dann funzt es. Mach ich sauberes C++ draus, funzt es auch. Ich kompilier es mit der gcc. Tut mir leid, da kann ich dir wohl nicht helfen...
#include <stdio.h> #include <gmp.h> int main(int argc, char **argv) { mpz_t x,y; mpz_init (x); mpz_init (y); x=1234; y=x+1; gmp_printf ("%Zd\n", y); mpz_clear (x); mpz_clear (y); return 0; }(dazu muss ich sagen, dass diese bibliothek aus GMP stand, einer Sammlung von algorithmen, die eigentlich nur für linux-compiler vorgesehen sind).
Die gcc ist standardkonform, also nix speziell für Linux Compiler.
MfG
GPC
-
und gcc ist nicht für linux?mvc++s2005e ist für windows!also kennt jemand noch solch eine bibliothek für mvc++s2005e?
-
Vielleicht solltest Du nach einer Bibliothek für .NET suchen, nicht dass Du mit der nächsten Bibliothek in Standard-C(++) wieder Probleme bekommst (zwei waren's ja schon)...
-
hab ich auch schon gemacht und ausprobiert, funzten aber auch nicht!!!kennt jemand also noch eine bibliothek für ganz große zahlen?
-
Hallo,
Vielleicht geht das hier ja. Habs aber noch nicht ausprobiert.
http://www.shoup.net/ntl/
Desweiteren gibt es Erläuterungen nebst einigen Links.
http://www2.toki.or.id/book/AlgDesignManual/BOOK/BOOK4/NODE144.HTM
-
Du könntest dir ja auch deine eigene schreiben. Wenn du vorerst nicht viele Operationen brauchst und mit den anderen nicht glücklich wirst - warum nicht?
-
100000000000000000000000000000000000000000x dank an euch die ntl bibliothek funktioniert. Ein kommentar noch zum selber schreiben: wie kann man so etwas schreiben und ist die eigene bibliothek dann auch wirklich schnell?
-
x_dawnbeach schrieb:
Ein kommentar noch zum selber schreiben: wie kann man so etwas schreiben
Schau dir die gmp an, die ist Open Source.
und ist die eigene bibliothek dann auch wirklich schnell?
kommt drauf an, wie gut du bist
Wenn du nicht weißt, was du tust, wird das Teil natürlich lahm^^MfG
GPC
-
könnt ihr mir mal eine beispiel bibliothek für einen integer (größer als int64) mit den operatoren +,-,/,*und% ?
-
Falls es dich interessiert, ich mach grad eine solche bibliothek, dauerd aber ncohetwas da ich in letzter Zeit nichts dran machen konnte, aber ich schätze in 1 monat istse fertig (man könnts auch an einem tag fertig schreiben aber dafür hab ich keine zeit :-))
Hier mal ein Auszug zum + Operand
void bignum::operator+(bignum &src) { //##########Deklaration########## longnumber summe; //Zwischensumme der beiden Numbers longnumber maxstellen; //Anzahl der Stellen longnumber basis = this->basis; short carry = 0; //Übertrag //Initalisation //Anzahl der größten Stellen if(this->stellen < src.stellen) maxstellen = src.stellen; else maxstellen = this->stellen; //##########Berechnung########## for (int x = 0; x < maxstellen; x++) { //Die stellen werden nacheinander addiert summe = this->objekt[x] + src.objekt[y] + carry; if (summe >= basis) { //Im falle eines Übertrags wird dieser definiert... carry = 1; summe -= basis; } else { //...Sonst kein übertrag carry = 0; } this->ergebnis[maxstellen] = (number)summe; //Das Ergebnis wird in ergebnis festgehalten } }Wie gesagt noch ists nicht fertig, aber schwer ist die ganze Sache eigentlich nicht wenn man etwas von mathematik versteht.
PS: Ich weis das in dem code ein Array-Overflow steckt kam nurnoch nciht dazu ihn rauszumachen
-
hmmm, ich habs auch mal mit der ntl lib versucht, bekomme aber bei diesem code:
#include <NTL/ZZ.h> NTL_CLIENT int main() { ZZ a, b, c; cin >> a; cin >> b; c = (a+1)*(b+1); cout << c << "\n"; return 0; }diese fehler:
c:\programme\microsoft visual studio\vc98\include\ntl\tools.h(172) : error C2039: 'floor' : Ist kein Element von 'std' c:\programme\microsoft visual studio\vc98\include\ntl\tools.h(173) : error C2039: 'floor' : Ist kein Element von 'std' c:\programme\microsoft visual studio\vc98\include\ntl\tools.h(184) : error C2039: 'floor' : Ist kein Element von 'std' c:\programme\microsoft visual studio\vc98\include\ntl\tools.h(185) : error C2039: 'floor' : Ist kein Element von 'std' c:\programme\microsoft visual studio\vc98\include\ntl\tools.h(196) : error C2039: 'floor' : Ist kein Element von 'std' c:\programme\microsoft visual studio\vc98\include\ntl\tools.h(197) : error C2039: 'floor' : Ist kein Element von 'std' c:\programme\microsoft visual studio\vc98\include\ntl\tools.h(207) : error C2039: 'floor' : Ist kein Element von 'std' c:\programme\microsoft visual studio\vc98\include\ntl\tools.h(208) : error C2039: 'floor' : Ist kein Element von 'std'hat die sonst keiner, oder hab ich wieder irgendwas falsch gemacht?
bei dir hats ja anscheinend funktioniert, x_dawnbeach, was ist das geheimnis?

thx so far, Mr. Pink
-
Was fürn Compiler, doch nicht etwa VC6 oder?
Schau mal in die ntl/tools.h ob dort math.h oder cmath includet wird (nur im zweiten Fall befindet sich floor im Namespace std, sonst befindet sich floor im globalen NS)
-
ntl verwendet normalerweise cmath.
Hier gibt es zwei Möglichkeiten
Es gibt im include/ntl eine Datei namens config.h
Da steht sowas drin#if 1 #define NTL_STD_CXXEine 1 bedeutet, dass dann die aktuellen C++Header verwendet werden. Bei einer 0 die alten. Das kann man einfach ändern (natürlich die lib neu compilieren).
Eine andere Variante wäre ein Mischmasch aus cmath und math.h (evtl. durch eigene Header). Am besten einfach mal durchschauen.