bigfloat
-
Skym0sh0 schrieb:
es geht ein ganzes stück besser das ist mir klar
echt? kommt ganz drauf an, was man will. eigentlich ist nur die basis 10 bedenklich. alles andere finde ich klasse.
ich denke, die basis 10 ist an sich eine gute idee, weil du dir die konvertierung beim einlesen und ausgeben sparst. aber hätst du von 10000 als basis? einlesen und ausgeben sind fast genauso unproblematisch wie zuvor. und die multiplikation (in der schrecklichen annahme, daß du die karatsuba-multiplikation noch nicht drin hast) ist 16-mal so schnell.
-
Skym0sh0 schrieb:
bigint erbt von bigunsigned
nee. wirklich nicht. ganz und gar nicht.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-75672-and-highlight-is-bebel.html
-
volkard schrieb:
das ist ein sehr kleines problem:
http://www.ellrich-net.de/Pispigot.htmAutsch, die Implementierung

-
volkard schrieb:
Skym0sh0 schrieb:
bigint erbt von bigunsigned
nee. wirklich nicht. ganz und gar nicht.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-75672-and-highlight-is-bebel.htmlich hab das bigunsigned und bigint zeugs nicht geschrieben

das hab ich wo runter geladen
und der herr hat das so gemacht dass big int von bigUINT erbt...naja ist ja auch egal
-
Skym0sh0 schrieb:
und der herr hat das so gemacht dass big int von bigUINT erbt...
Wäre dann ein ähnliches Problem wie ein
iterator, der von einemconst_iteratorerbt (hatte ich gerade erst). Die Funktionalität der Basisklasse wird zwar durch die Vererbung erweitert, aber die IST-EIN-Beziehung ist nicht mehr gegeben.volkard, hast du gerade dein nettes Geschichtlein zur Hand?

-
Nexus schrieb:
volkard, hast du gerade dein nettes Geschichtlein zur Hand?

3 Posts über deinem.

Auf einen noch silbrigeren Tablett wirst du es nicht bekommen.

-
drakon schrieb:
3 Posts über deinem.

Auf einen noch silbrigeren Tablett wirst du es nicht bekommen.

Argh, ich hab den Link gar nicht beachtet. Ich dachte, das wäre ein sonstiger Exkurs zum Thema...

-
ich hab hier folgenden code
string s = "001.00"; string::iterator i = s.begin(); while ( *i == '0' && *(i+1) != '.' ) { s.erase(i); } i = s.end()-1; while ( *i == '0' && *(i-1) != '.' ) { s.erase(i); }am ende soll eigendlich nur noch 1.0 im string stehen
aber der löscht mit der zweiten schleife nur die letzte null und beim zweiten durchlauf bricht die schleife mit einer fehlermeldung ab, von wegen string iterator nicht dereferenzierbar...im ersten durchlauf ist der iterator *i noch "0" aber im zweiten sollte er theoretisch immer noch "0" sein oder?
wo liegt mein denkfehler?
edit:
// ... while ( *i == '0' && *(i-1) != '.' ) { s.erase(i); --i; }mh der iterator wird ja s.end(), und end zeigt ja hinter den string...
hatte das erst, aber auch oben, und weils in der erstens chleife falsch war hab ichs auch direkt in der zweiten mit weggemacht
-
Sehr richtig erkannt, der Exponent ist sicher kein Problem, nur die Mantisse. Welche Basis (2,10,16) man nimmt, ist schon des Nachdenkes wert. Also, wenn Du das schon selbst machen willst, dann doch gleich mit einem Datentyp "hugefloat" für vielleicht 200 gültige Stellen für die Zahl pi. Damit kann man möglicherweise eine Eintragung bei "Guiness World Records" erreichen? Oder man merkt, dass so etwas niemand ermsthaft braucht. Bedenke auch, dass auch noch die Operatoren << und >> der Streamklassen von C++ überladen werden sollten. Ich wünsche Dir viel Spass bei Deinem Vorhaben. Ich hätte dafür keine Verwendung - mir reicht der Standard.
-
off-topic:
mit 200 Nachkommastellen von pi kommt man heute leider nicht mehr ins Guiness Buch - selbst als Kopfrechner muß man dazu heute schon über 100.000 Stellen memorieren können

Der derzeitige Rekord mit Computer-Hilfe liegt bei über 1.200.000.000.000 Stellen
