BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Langzahl - Arithhmetik

Alles zur Programmierung im LibreOffice.
Sandwich
Beiträge: 10
Registriert: Sa 3. Okt 2020, 16:12

Langzahl - Arithhmetik

Beitrag von Sandwich » Fr 10. Dez 2021, 19:26

[ 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

Code: Alles auswählen

= LZ_ADD( A1 ; B1 )
andere hingegen nicht; z.B. kommt bei

Code: Alles auswählen

 = LZ_MULT( A1 ; B1 )
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!

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Langzahl - Arithhmetik

Beitrag von karolus » Fr 10. Dez 2021, 20:59

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.
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: Langzahl - Arithhmetik

Beitrag von gogo » Sa 11. Dez 2021, 13:50

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)))
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Sandwich
Beiträge: 10
Registriert: Sa 3. Okt 2020, 16:12

Re: Langzahl - Arithhmetik

Beitrag von Sandwich » Sa 11. Dez 2021, 14:57

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

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Langzahl - Arithhmetik

Beitrag von karolus » Sa 11. Dez 2021, 15:16

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:

Code: Alles auswählen

print(2**64)
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Langzahl - Arithhmetik

Beitrag von karolus » Sa 11. Dez 2021, 15:29

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
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

Sandwich
Beiträge: 10
Registriert: Sa 3. Okt 2020, 16:12

Re: Langzahl - Arithhmetik

Beitrag von Sandwich » Sa 11. Dez 2021, 15:59

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:

Code: Alles auswählen

print(2**64)
Wenn schon, dann

Code: Alles auswählen

print(2**64-1)
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.

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Langzahl - Arithhmetik

Beitrag von karolus » Sa 11. Dez 2021, 16:16

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" ?
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Langzahl - Arithhmetik

Beitrag von mikele » Sa 11. Dez 2021, 17:07

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 8-)
Gruß,
mikele

Benutzeravatar
karolus
Beiträge: 2170
Registriert: Fr 10. Dez 2010, 10:01

Re: Langzahl - Arithhmetik

Beitrag von karolus » Sa 11. Dez 2021, 17:47

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}"
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.3.2 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten