Wie berechnet ein Computer 1/2 = 0,5?

4 Antworten

Es wird nicht "unendlich" gerechnet, sondern immer üblicherweise nur - einfach gesagt - mit einer festen Nachkommastellenanzahl. Wenn dahinter etwa wie im Beispiel etwas nicht mehr Null ist, wird das auch ignoriert. So gesehen können sich Rechenfehler ergeben, ja.


gfntom  09.01.2023, 15:01
sondern immer üblicherweise nur - einfach gesagt - mit einer festen Nachkommastellenanzahl

Nein, so wird - üblicherweise - nicht gerechnet.

So würde bei Festkommaoperationen gerechnet, die sind aber sie Ausnahme. Die Regel sind Gleitkommaoperationen.

CatsEyes  09.01.2023, 16:02
@gfntom

Stimmt schon, klar, ich wollt's einfach ausdrücken, habe ja auch "einfach gesagt" hinzugefügt. Aber das Prinzip sollte klargeworden sein - hoffe ich.

Der Computer arbeitet mit Zweierpotenzen.

1/2 = 2^-1

Je nach Datentyp wird der Nachkommastellenbereich dann eine feste Länge haben. Die Bits für die Nachkommastellen werden entsprechend zu 1000.... gesetzt.

Woher ich das weiß:Studium / Ausbildung – Mathematik

Doch, kann er wissen. Denn wenn der Rest 0 ist, dann macht das Weiterrechnen nach eventuell noch weiteren Stellen keinen Sinn mehr.

Aber für's Detail wirst du dir Anschauen wollen, wie Nicht-Integer Zahlen im Rechner dargestellt werden, weil es da mehrere Möglichkeiten gibt. Abgesehen von "gewöhnlichen" floating point Zahlen, bei denen mit dem Exponent quasi die Kommaposition angegeben wird, besteht auch die Möglichkeit von fixed point, welches Kommazahlen eigentlich als Integers verarbeitet, und das Komma lediglich zwischen zwei Stellen gesetzt wird, und 1/2 intern als z.B. 1000/2 gerechnet wird. Außerdem wird gelegentlich eine Kommazahl auch als fraktional dargestellt, was lediglich heißt, dass sowohl Zähler als auch Nenner die Zahl ergeben. Eine 0.5 wäre in solch einer Darstellung die Kombination von 1 und 2 als eine Zahl (also 1/2) - denn damit läßt sich ebenfalls rechnen.


CatsEyes  09.01.2023, 16:06

Einfach gesagt, kein Rechner der Welt kann mit beliebig genauen Zahlen rechnen 😉

Bushmills145  09.01.2023, 20:23
@CatsEyes

Aber viele Rechner der Welt können nach einer Substraktion - welche Teil einer Division darstellt bzw darstellen kann - feststellen, ob die Differenz 0 ist. Auch können viele Rechner der Welt bestimmen, dass, sollte die verbleibende Differenz nicht 0 sein, weiter verglichen und konditionell substrahiert werden muss, und das so lange, bis das Ergebnis die Darstellungslänge übersteigt.

Auch können viele Rechner - bei Wahl des entsprechenden Darstellungsformats - Perioden vermeiden bzw. die Notwendigkeit, tatsächlich zu einer Teilung überzugehen, hinauszögern. Siehe fraktionales Format: 2/7 + 5/7 rechnet sich halt nicht glatt bei zu früher Teilung, bei Darstellung als Fraktionen allerdings schon.

CatsEyes  09.01.2023, 21:30
@Bushmills145

Welcher Rechner kann von der Zahl Pi selbige abziehen, die an zwei Nachkommastellen hinter der derzeitigen bekannten Stellenzahl (50 Billionen oder so) abweicht!?...

Es gibt doch auch eine Reihe bekannter diesbez. "Rechenfehler", nun nagele mich aber nicht an einem Beispiel fest, müsste ich erst (wieder) suchen.

CatsEyes  09.01.2023, 21:37
@Bushmills145

Habe ich doch nirgends geschrieben, sie war wegen ihrer Transzendenz nur ein Beispiel.

Bushmills145  09.01.2023, 21:38
@CatsEyes

Aber sowohl Frage als auch meine Antwort sowie Kommentar bezogen sich auf Division. Ein Beispiel einer Zahl, welche weder zu Frage noch zu Antwort passt, kann ich darin leider auch nicht unterbringen.

CatsEyes  09.01.2023, 21:43
@Bushmills145

1/2 - 1/2 kann jeder Rechner rechnen. Aber wird's nicht schon schwieriger wenn zwei Rechner 2/3 ausrechnen, mit jeweils verschiedener Nachkommastellenzahl, und man das dann auf dem "besseren" Rechner voneinander abzieht?

Also 0,666667 - 0,66666666667 etwa.

Bushmills145  09.01.2023, 21:48
@CatsEyes

Wenn das Darstellungsformat der Zahlen ein solches ist, das vorzeitige Division erforderlich ist, wirst du die Gefahr laufen, Rundungsfehler zu erhalten, und diese im weiteren Verlauf der Berechnung womöglich zu verstärken. Wählst du dahingegen eine Zahlendarstellung, welche es vermeidet, zu früh bzw an einem Punkt, an dem es noch nicht nötig ist, zu dividieren, kannst du das Akkumulieren solcher Fehler reduzieren oder sogar ganz eliminieren.

in deinem Beispiel hast du die Division bereits durchgeführt, obwohl bei Wahl eines anderen Darstellungsformats dies unnötig hätte sein können. Dargestellt als

{2,3} und {2,3} würde sich die Operation als {2-2,3}, also {0,3} darstellen. 0/3 würden viele Computer dann als glatt 0 ermitteln.

CatsEyes  09.01.2023, 21:52
@Bushmills145

Ich wollte bislang nichts Anderes als dem FS pragmatisch eine Antwort zu geben. Wollte darstellen, dass es u. U. allemal Ungenauigkeiten gibt.

Bushmills145  09.01.2023, 21:55
@CatsEyes

Das es u.U. Ungenauigkeiten gibt, dem stimme ich zu. Darum, dass ich in meiner Antwort kurz auf verschiedene Darstellungsformate eingegangen bin - denn diese haben einen Einfluss auf das Auftreten sowie den Umfang solcher Ungenauigkeiten.

Letztendlich wählt der Coder das Format, welches am besten zu seinem Problem passt.

Der Computer "weiß" das sofort.

Er "weiß", dass 1 = 1 ist

und er "weiß" dass im Binärsystem durch 2 dividiert wird, in dem das Komma um eine stelle nach links verschoben wird.

binär geschrieben:

1 : 10 = 0,1