Wie berechnet ein Computer 1/2 = 0,5?
Ich habe mich gefragt wie diese für uns einfache Divisionsaufgabe von einem Taschenrechner gelöst wird, ist der Algorithmus so geschaffen das er so lange iteriert bis genug Nullen entstanden sind das er das Ergebnis als 0,5 ausgibt? Er kann ja nicht wissen daß es nicht vielleicht 0,5000000000000000...001 ist.
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.
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.
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.
Einfach gesagt, kein Rechner der Welt kann mit beliebig genauen Zahlen rechnen 😉
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.
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.
Habe ich doch nirgends geschrieben, sie war wegen ihrer Transzendenz nur ein Beispiel.
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.
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.
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.
Ich wollte bislang nichts Anderes als dem FS pragmatisch eine Antwort zu geben. Wollte darstellen, dass es u. U. allemal Ungenauigkeiten gibt.
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
Nein, so wird - üblicherweise - nicht gerechnet.
So würde bei Festkommaoperationen gerechnet, die sind aber sie Ausnahme. Die Regel sind Gleitkommaoperationen.