Seite 1 von 2
Langzahl - Arithhmetik
Verfasst: Fr 10. Dez 2021, 19:26
von Sandwich
[ LibreOffice Version: 6.4.7.2 , Build-ID: 1:6.4.7-0ubuntu0.20.04.2 ]
Hallo,
habe mir von
http://www.rendar.de/lzr.htm die Datei
http://www.rendar.de/excel/langezahlen/lr.xla runtergeladen und als .ods abgespeichert.
Es gibt dann das Makro-Modul "<diese-datei>.ods | lr | Module | Modul1", in dem eine Menge Makros (für Zahlen als Text) definiert sind.
Einige funktionieren, z.B. wenn in A1 und B1 Text-Zahlen stehen und in C1
andere hingegen nicht; z.B. kommt bei
die Fehlermeldung
BASIC-Laufzeitfehler
'91'
Objektvariabe nicht belegt.
der Makro-Editor (heißt das so?) wird geöffnet und die Zeile 94 markiert
Code: Alles auswählen
93 Private Function lz_p(ByVal xr As Variant, ByVal yr As Variant) As String
94 Dim x As String, y As String
Ich selber habe leider fast überhaupt keine Ahnung von Makros, daher habe ich zuerst einmal den Autor kontaktiert, der meinte:
Der ursprüngliche VBA Modulcode stammt aus den Jahren 2000-2002 und das Makro lr.xla funktioniert mit Excel 2019 (hab es ausprobiert) ... mit LibreOffice 7.2 kommen auch diverse Fehlermeldungen die alle irgendwie mit Vartype Definitionen zusammenhängen ... die unterscheiden sich definitiv zw. CALC und EXCEL.
Er kann und will sich aber nicht weiter damit befassen.
Daher meine Frage: hat auch wer Bedarf und/oder Interesse an Langzahl- bzw. Stringzahl-Arithmetik in LibreOffice (unter Linux - macht das was aus?) und kennt sich mit Makros aus und hat Lust, sich des Problems anzunehmen?
Oder gibt es schon andere funktionierende Lösungen dafür?
Danke!
Re: Langzahl - Arithhmetik
Verfasst: Fr 10. Dez 2021, 20:59
von karolus
Hallo
Er kann und will sich aber nicht weiter damit befassen.
Da hat er Recht … nur schade das ihm das nicht schon 2000~2002 eingefallen ist
Daher meine Frage: hat auch wer Bedarf und/oder Interesse an Langzahl- bzw. Stringzahl-Arithmetik in LibreOffice (unter Linux - macht das was aus?) und kennt sich mit Makros aus und hat Lust, sich des Problems anzunehmen?
Oder gibt es schon andere funktionierende Lösungen dafür?
Wenn ich
Bedarf daran habe, mache ich das in Python … da muss ich mich nur zweimal verrenken, beim "abholen" der
Textzahlen aus Calc und beim "zurückschicken" als Text, zwischendrin kann ich ganz normal wie bei "kleinen" Ganzzahlen mit den "grossen" rechnen, unter der Bedingung das die jeweilige Berechnung nicht den Hauptspeicher sprengt.
Re: Langzahl - Arithhmetik
Verfasst: Sa 11. Dez 2021, 13:50
von gogo
Was ist denn für Dich eine Langzahl?
de facto ist bei Berechnungen in Tabellenkalkulationen bei 8 Byte Schluss (das sind dann 1.79769313486232E+308 - für die meisten Berechnungen also ausreichend

). Egal wie sehr man sich verrenkt, was darüber hinaus geht, ist immer Flickwerk - was gleichzeitig bedeutet: Wer mit größeren Zahlen arbeitet, benutzt keine Tabellenkalkulation von der Stange.
Python ist sicher ein gutes Tool dafür. Folgende Funktion bekommt bei mir nach etwa 10 Sekunden Probleme, da hat a (nach 22 Schleifen) aber schon 1.262.613 Stellen ...
Code: Alles auswählen
#python3
a=2
b=0
while True:
a *= a
b += 1
print(b, "Runden, Länge von a =" , len(str(a)))
Re: Langzahl - Arithhmetik
Verfasst: Sa 11. Dez 2021, 14:57
von Sandwich
gogo hat geschrieben: ↑Sa 11. Dez 2021, 13:50
Was ist denn für Dich eine Langzahl?
Eine mit mehr als 15 Stellen, denn auf so viele Stellen genau rechnet Calc.
Es geht mir also nicht um die Größe der Zahlen (...E+308), sondern um die "Genauigkeit";
z.B. bei der Sache mit den Reiskörnern auf dem Schachbrett die Anzahl aufs Korn genau zu berechnen: 18.446.744.073.709.551.615 statt 18.446.744.073.709.600.000
Re: Langzahl - Arithhmetik
Verfasst: Sa 11. Dez 2021, 15:16
von karolus
Hallo
@Gogo: Calc rechnet
ausschliesslich mit 64bit Fliesskommazahlen, wovon ~52bits für die "Genauigkeit" verwendet werden.
Hier gehts aber um Integer-berechnungen, die sind in binär immer "exakt" darstellbar solange sie in den Speicher passen.
Das Reiskorn-problem in python:
Re: Langzahl - Arithhmetik
Verfasst: Sa 11. Dez 2021, 15:29
von karolus
Eine mit mehr als 15 Stellen, denn auf so viele Stellen genau rechnet Calc.
Das ist Unsinn, Calc rechnet mit kleinen Zahlen genauso genau oder ungenau, es geht hier ausschliesslich um ca. 15 signifikante Stellen (in binär die schon mal erwähnten 53bits )
Vielleicht erst mal schlau machen:
https://en.wikipedia.org/wiki/Double-pr ... int_format
Re: Langzahl - Arithhmetik
Verfasst: Sa 11. Dez 2021, 15:59
von Sandwich
karolus hat geschrieben: ↑Sa 11. Dez 2021, 15:29
Das ist Unsinn, Calc rechnet mit kleinen Zahlen genauso genau oder ungenau
Ich habe ja auch geschrieben
Sandwich hat geschrieben: ↑Sa 11. Dez 2021, 14:57
Es geht mir also nicht um die Größe der Zahlen [...], sondern um die "Genauigkeit"
Und genau deswegen gibt es ja diesen Lösungsansatz mit Text-Zahlen.
---
karolus hat geschrieben: ↑Sa 11. Dez 2021, 15:29
es geht hier ausschliesslich um ca. 15 signifikante Stellen
Genau das meinte ich mit
Sandwich hat geschrieben: ↑Sa 11. Dez 2021, 14:57
... 15 Stellen, denn auf so viele Stellen genau rechnet Calc.
---
karolus hat geschrieben: ↑Sa 11. Dez 2021, 15:16
Das Reiskorn-problem in python:
Wenn schon, dann
und: ja Python is eh super, aber da ich in einem LO-Forum poste, ersuche ich um eine Lösung in diesem Rahmen.
---
karolus hat geschrieben: ↑Sa 11. Dez 2021, 15:29
Das ist Unsinn, [...]
Vielleicht erst mal schlau machen: [...]
Vielleicht erst mal die Fragen/Erklärungen genau lesen und nicht gleich so aggressiv antworten.
Re: Langzahl - Arithhmetik
Verfasst: Sa 11. Dez 2021, 16:16
von karolus
aber da ich in einem LO-Forum poste, ersuche ich um eine Lösung in diesem Rahmen.
Wieso ist python deiner Ansicht nach "nicht in diesem Rahmen" ?
Re: Langzahl - Arithhmetik
Verfasst: Sa 11. Dez 2021, 17:07
von mikele
Hallo,
so als totaler Python-Anfänger
Code: Alles auswählen
def arith():
oDoc = XSCRIPTCONTEXT.getDocument()
oSheet = oDoc.Sheets.getByIndex(0)
oCell = oSheet.getCellRangeByName('A1')
x=2**64-1
oCell.String=str(x)
läuft

Re: Langzahl - Arithhmetik
Verfasst: Sa 11. Dez 2021, 17:47
von karolus
Hallo
@Mikele: genau…und seit etwa LO5 kennt pyuno auch noch Abkürzungen:
Code: Alles auswählen
def viele_koerner_reis():
doc = XSCRIPTCONTEXT.getDocument()
doc.Sheets[0]["A1"].String = f"{2**64-1}"