####################################################################### >>>NICHT<<< GANZZAHLIGE Langzahlrechnung ####################################################################### | |
(1) ADD-IN ========== | |
alle Langzahlfunktionen findest du unter http://www.rendar.de/excel/langezahlen/lr.xla (ca 74 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) lz_multi(x;y) |
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) >>alternativ<< lz_mod(x;y) |
((x/y) - (x\y))*y (Rest der ganzzahligen Division x durch y) die globale Variable x_div enthält hierbei das Ergebnis der 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 lz_DezHex) |
lz_DezBin2(x) | dezimal in binär (nutzt intern lz_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) lz_InDez(x,b) |
wandelt eine Dezimalzahl in eine Zahl zur Basis 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) |
Erweiterungen 1.5.2002 und 15.8.2009 -------------------------------------- |
|
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_zpow(x;z;n;g) | x^z wobei z positiv oder negativ ganzzahlig sein kann (Fkt. vom 15.8.2009) |
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 |
(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 |
|