Zahl mit Strings addieren
-
Hallo,
ich hab hier ein Projekt, wo ich mit sehr großen Zahlen arbeiten muss. Die normale int var würde nicht reichen und auch long und unsigned nicht. Ich würde trotzdem immer in den Speicherüberlauf kommen.
Somit hab ich mir jetzt eine Routine geschrieben, wo ich die Zahl in nen String umwandel und dann praktisch String für String addiere.
Da ich aber denke, dass meine Routine nicht ganz optimal ist, würde ich gern noch ein anderes Beispiel mal sehen.
Kennt jemand von euch eins?
Danke schonmal
-
Irgendwo hier im Board fiel das Stichwort "gmp" (eine Bibliothek zur Verarbeitung von GROSSEN Zahlen).
-
Du hast nach Lösungen gefragt, wie lange sind denn die Zahlen? Oftmals wird einfach vergessen, dass man mit long double einen 10 Byte Datentyp hat, der 19 Stellen mit Vorzeichen darstellen kann. Vielleicht reicht das ja schon.
-
also das sind Bankleitzahlen die ich addieren muss
eine BLZ ist 8 stellig und ich muss jede einzelne addieren
-
Ok, der logische Zusammenhang erschließt sich mir nicht unbedingt, aber das muss ja auch nicht sein. Also in ein unsigned long passen im Schlimmsten Fall maximal 42 addierte Bankleitzahlen (99999999 * 42 < 4.294.967.295). Sollte das nicht ausreichen, ein long double kann ein Vielfaches davon aufnehmen.
-
Meine Empfehlung:
http://www.apfloat.org/apfloat/
-
av_privat schrieb:
long double kann ein Vielfaches davon aufnehmen.
Unter Windows (MS VC) gibt es keinen (separaten) "long double"...
Siehe: Data Type Ranges
http://msdn.microsoft.com/library/en-us/vclang/html/_langref_Data_Type_Ranges.asp
-
Jochen Kalmbach schrieb:
av_privat schrieb:
long double kann ein Vielfaches davon aufnehmen.
Unter Windows (MS VC) gibt es keinen (separaten) "long double"...
Siehe: Data Type Ranges
http://msdn.microsoft.com/library/en-us/vclang/html/_langref_Data_Type_Ranges.aspMöchte das noch leicht ergänzen. Das steht dazu auch noch in der 2005er-MSDN
MSDN schrieb:
In der 32-Bit-Programmierung für Windows wird der Datentyp long double dem Datentyp double zugeordnet. Es gibt jedoch Assemblersprachunterstützung für Berechnungen mit dem Datentyp Real*10.
Allerdings weis ich jetzt nicht ob der Rückschluss, dass 64-Bit Windows das unterstützt zulässig ist^^
-
Kleiner Test unter x64 hat ergeben:
sizeof(double): 8
sizeof(long double): 8PS: Das mit der Assembler-Unterstützung stimm leider für MS-VC++ nur für x86. Hier kann man direkt die FP-Befehle ansprechen, welche auf ein echten "long double" kennen. x64/IA64 Assembler-Befehler unterstützt MS VC++ leider nicht...
-
MSS-Software schrieb:
also das sind Bankleitzahlen die ich addieren muss
Entschuldige die Zwischenfrage, aber seit wann muß man mit Bankleitzahlen rechnen?
-
Meine MSDN Library Visual Studio 6.0 weist noch long double als 10 Byte aus. Scheint nicht mehr ganz aktuell zu sein.