####################################################################### >>>NICHT<<< GANZZAHLIGE Langzahlrechnung ####################################################################### (1) ADD-IN ========== alle Langzahlfunktionen findest du unter http://www.rendar.de/excel/langezahlen/lr.xla (ca 77 kB) (2) enthaltene BENUTZERDEFINIERTE FUNKTIONEN (UDF's) ==================================================== (a) GANZZAHLIG --------------- x und y seien ganzzahlig und positiv oder negativ Funktion ------> berechnet lz_add(x;y) x+y lz_sub(x;y) x-y lz_mult(x;y) x*y lz_multi(x;y) x*y (nur bei großen y ein wenig schneller als lz_mult) lz_div(x;y) x\y lz_div(x;y;1) ((x/y) - (x\y))*y (Rest der ganzzahligen Division x durch y) >>alternativ<< die globale Variable x_div enthält hierbei das Ergebnis der lz_mod(x;y) ganzzahligen Division x\y lz_abs(x) Abx(x) den Absolutwert von x lz_sum(PA) identisch zur Sum() Function in Excel (aber nur für ganzzahlige Werte) PA ist ein ParamArray (fast) beliebiger Länge lz_DezHex(x) berechnet für eine beliebig lange Dezimalzahl x die zugehörige Hexadezimalzahl lz_DezBin(x) dezimal in binär (nutzt intern large_DezHex) lz_DezBin2(x) dezimal in binär (nutzt intern large_DezOct) lz_DezOct(x) dezimal in oktal lz_BinDez(x) binär in dezimal lz_OctDez(x) oktal in dezimal lz_HexDez(x) hexal in dezimal lz_DezIn(x,b) wandelt eine Dezimalzahl in eine Zahl zur Basis b lz_InDez(x,b) wandelt eine Zahl zur Basis b zurück in eine Dezimalzahl die letzten beiden Funktionen benötigen einen GENÜGEND LANGEN String mit den gewünschten Umwandlungszeichen in der gültigen Reihenfolge z.B. Basis b<=16 benötigt z.B. normalerweise den uw_string (globale Variable) "0123456789ABCDEF". Einzige Bedingung für diesen String ist, daß len(uw_string)>= b ist. uw_string ist vorbelegt mit "0123456789ABCDEFghijklmnopqrstuvwxyz" x und y seien Binärzahlen (Strings der Form 101011..., bzw Ergebnisse der Funktion lz_DezBin() lz_BinAND(x,y) x AND y lz_BinOr(x,y) x OR y lz_BinXOR(x,y) x XOR y der Optionale Parameter m = min_bits dient hier nur als minimale Bezugsgröße für die Stringlänge wenn x und/oder y weniger als min_bits Stellen haben, dann werden die "höherwertigen bits" mit "0" aufgefüllt ist x oder y "länger" als min_bits, dann wird max(len(x),len(y)) als Bezugsgröße verwendet ist min_bits NICHT angegeben, dann wird default =16 (Stellen) Verwendet! d.h. m(default)=16 bedeutet "0000000000000000" lz_BinNOR(x,y,m) NOT( (x OR y) OR m ) lz_Bin NOT(x,m) NOT( x OR m) optionale Parameter a,n und b a = Anzahl Bits die berücksichtigt werden sollen ist a=0, dann wird a = Länge der Binärdarstellung der Zahl x gesetzt der Defaultwert für a = 16 n = Anzahl der verschobenen/rotierten Bits der Defaultwert für n = 1 b = Basis der Übergabezahl x der Defaultwert für b = 10 das Ergebnis der Operation wird ebenfalls in der Basis b ausgegeben lz_shl(x,a,n,b) bitweises ShiftLeft lz_shr(x,a,n,b) bitweises ShiftRight lz_rol(x,a,n,b) bitweises RotateLeft lz_ror(x,a,n,b) bitweises RotateRight (b) RATIONALE ZAHLEN -------------------- x und y seien positiv oder negativ mit oder ohne Nachkommaanteil und die Optionalen Parameter: n = angezeigte Nachkommastellen, wenn n NICHT angegeben wird, dann werden nur 2 (=default) Nachkommastellen des Ergebnisses angezeigt! g = die Division rechnet bis auf g Stellen nach dem Komma (ist nicht vom Parameter n abhängig!) Wird g nicht angegeben, dann werden 25 (=default) Nachkommastellen berechnet. Funktion ------> berechnet lr_add(x;y;n) x+y lr_sub(x;y;n) x-y lr_mult(x;y;n) x*y lr_div(x;y;n;g) x/y lr_abs(x) Abx(x) den Absolutwert von x lr_sum(PA) identisch zur Sum() Function in Excel PA ist ein ParamArray (fast) beliebiger Länge lr_zpow(x;y;n;g) x^y für GANZZAHLIGES y (3) KONTAKT =========== Code-/Programmfehler/Verbesserungsvorschläge bitte per email an: mailto:Wolf.W.Radzinski@gmx.de subject/Betreff: Langzahlrechnung in Excel Bitte keine XLS Dateien (zu groß!), sondern lieber Code etc. per TXT-File! (4) ERWEITERUNGEN ================= wissenschaftliche Darstellung: ----------------------------- Wer Lust hat, kann versuchen die Funktionen auf E^x Format zu trimmen. Sollte sich einer daran wagen, möchte ich bitten, mir den Code per TXT-File zukommen zu lassen. TIA! Info: ----- i) wie wird in den obigen Funktionen gerechnet? lz_add ... einfache stellenweise Addition mit Übertrag lz_sub ... Subtraktion durch "Addition des 9er Komplements" z.B. 25-813 = 025+[186] = [211] = -788 813-25 = 813+[974] = 1[787]= 787+1 = 788 lz_mult ... benutzt die Additionsfunktion lz_add zur Berechnung lz_div ... benutzt die Subtraktionsfunktion lz_sub d.h. eigentlich werden alle 4 Grundrechenarten mit der einfachen Additionfunktion lz_add berechnet. ii) "VORSICHT" die Umwandlung SEHR LANGER Zahlen kann ziemlich viel ZEIT kosten! Theoretisch bricht die Umwandlung erst ab der maximal zulässingen Stringlänge in Excel 97 ab, dies hab ich allerdings "aus verständlichen Gründen" nicht getestet iii) Beispiel ... UNTERSCHIEDE zwischen Excel(rot) und dem Add-In(grün) http://www.rendar.de/lzr_u.htm iv) letzter Update 5.2.2003