Seite 1 von 1

Warum erscheint ein Buchstabe am Ende einer Rechnung

Verfasst: Freitag 13. November 2020, 15:13
von MiniMi12
Hallo,

ich will mit python eine Rechnung nachstellen. Allerdings kommt nicht das Ergebnis heraus was ich erwarte. Ich vermute, dass die Zahlen einfach zu groß sind.
Bei folgender Rechnung sollte eigentlich -1 heraus kommen. Stattdessen kommt dort "220L".
Jetzt frage ich mich, wieso dort 220 heraus kommt und wie das "L" Zustande kommt.

Den Code habe ich einfach lose ins Terminal von Kali-Linux geschrieben.

Code: Alles auswählen

a = pow(174, 110)
print (a)
a%221
Das Ergebnis ist bei mir 220L

Ich könnte mir vorstellen, dass ich bei solch großen Zahlen schon nicht mehr pow nutzen kann sondern eine schnelle Exponentiation machen müsste.

Vielen Dank im voraus
MiniMi12

Re: Warum erscheint ein Buchstabe am Ende einer Rechnung

Verfasst: Freitag 13. November 2020, 15:37
von MiniMi12
Warum dort nicht -1 heraus kommt kann ich mir jetzt doch erklären. Ich war einfach auf die -1 fixiert weil in der Vorlesung -1 steht. Aber 220%221 sind ja 220 weil die 221 nicht in die 220 passen. Die 221 ist um 1 zu groß um in die 220 zu passen. Und dieses um 1 zu groß kann man dann scheinbar wohl auch als -1 aufschreiben.

Trotzdem versteh ich das mit dem L noch nicht.

Re: Warum erscheint ein Buchstabe am Ende einer Rechnung

Verfasst: Freitag 13. November 2020, 15:58
von narpfel
@MiniMi12: Das `L` ist eine Eigenheit von Python 2, und das sollte man nicht mehr benutzen, weil es seit einem Jahr nicht mehr supportet wird.

Hintergrund: In Python 2 gibt es zwei verschiedene grundlegende Typen von Ganzzahlen: `int` und `long`. `int` ist auf 64 Bit begrenzt und `long` hat eine unbegrenzte Größe. Wenn jetzt eine Rechnung ein Ergebnis hat, das nicht mehr in den Wertebereich von `int` passt, wird es automatisch in ein `long` umgewandelt. Und ein `long` wird in seiner Stringrepräsentation durch ein `L` am Ende gekennzeichnet.

In Python 3 ist der Wertebereich von `int` nicht mehr begrenzt und es gibt kein `long` mehr, deswegen wird man da das `L` nicht mehr sehen.

`-1` kommt da vielleicht in anderen Sprachen raus, wo es Integer-Überlauf gibt; wo also eine zu große positive Zahl ab einem bestimmten Punkt negativ wird. Und dann gibt es noch verschiedene Definitionen von Modulo: `(-1) % 221` kann je nach Sprache `-1` oder `220` sein. In Python ist es `220`.

Edit: `220 % 221 == -1` könnte man so definieren, das wird aber soweit ich weiß nie gemacht.

Re: Warum erscheint ein Buchstabe am Ende einer Rechnung

Verfasst: Freitag 13. November 2020, 16:00
von sparrow
@MiniMi12: Welche Python Verson verwendest du?
Das wirkt wie Python 2.x und das ist tot. Wenn dem so ist, stelle auf Python 3.x um, weil es für Python 2 keinerlei Support mehr gibt.

Re: Warum erscheint ein Buchstabe am Ende einer Rechnung

Verfasst: Freitag 13. November 2020, 17:11
von MiniMi12
Alles klar danke für die Antworten das erklärt es ja.

Bei Python 3 kommt es tatsächlich nicht.

Ich habe mir bei der Version von python keine Gedanken gemacht. Ich wollte nur die Rechnung nachvollziehen und habe einfach im Terminal von meinem Linux-Laptop Python eingegeben um mal schnell einen anderen "Taschenrechner" zu haben als unter meinem Windowsrechner, da ich dachte der Windowsrechner würde vielleicht runden bei so großen Zahlen und daher die 220 kommen. Wenn ich Python3 eingebe kommt das L tatsächlich nicht mehr.

In der Vorlesung geht es im großen, um das RSA-Verfahren und im speziellen Fall, um den Miller-Rabin-Test, um Primzahlen zu detektieren.
Ich hab hier ein Yotubevideo (genau an der Stelle) zu gefunden in dem er auch sagt das die -1 der 220 bzw. in seinem Beispiel der 88 entsprechen. Das wird wohl so in dem Verfahren definiert. Verstanden habe ich es aber noch nicht ^^.

Aber vielen Dank damit ist dann alles für mich geklärt!