Algorithmischer Fehler des Rechners (Bowmar MX140 [1974])

Sep 15 2020

Mein älterer Kollege ist kürzlich in den Ruhestand getreten und hat einen Bowmar MX140-Rechner zurückgelassen, den ich reparieren konnte

Nachdem ich damit herumgespielt habe, habe ich festgestellt, dass es bei bestimmten Funktionen einen Fehler gibt.
Als Beispiel \$9*9=81\$. Wo als \$9^{2}=80.9999\dot{9}\$
Die Quadrate der Zahlen 10 bis 19 werden als vollständige Ganzzahlen angezeigt, aber \$20^{2}=399.9999\dot{9}\$

Es ist zu erklären gibt es ein gewisses Maß an Fehlern im Handbuch finden Sie hier auf den Seiten 30-31.

Meine Frage ist: Woher kommt dieser Fehler?
Ich würde Firmware annehmen, aber gibt es andere Möglichkeiten, die \ zu berechnen$Y^{X}\$außerdem \$Y*Y*Y\$usw.?
Als zusätzliche Frage, warum tritt dieser Fehler nur bei bestimmten Zahlen auf? zB 9 & 20

Antworten

5 DaveTweed Sep 14 2020 at 23:04

\.$Y^X\$wird normalerweise als \ implementiert$e^{X \ln Y}\$so dass X und Y beide nicht ganze Zahlen sein können. Logarithmus und Potenzierung werden mithilfe von Reihenerweiterungen implementiert und es besteht eine gewisse Wahrscheinlichkeit, dass keine genaue Antwort gefunden wird.

Moderne Taschenrechner führen diese Berechnungen mit genügend "Schutzziffern" durch, damit das Ergebnis für die Anzeige korrekt gerundet werden kann. Frühe Taschenrechner hatten manchmal nicht genug Ziffern, um in jedem Fall richtig zu runden, und das sehen Sie hier.

3 SpehroPefhany Sep 14 2020 at 23:45

Das Exponential wird wahrscheinlich mit demselben CORDIC- Algorithmus wie die transzendentalen Funktionen berechnet .

Die Hardware in diesen frühen Rechnerchips war extrem einfach - BCD-Ziffernverschiebung und -addition und nicht viel mehr.

Ein Rundungsfehler ist daher zu erwarten, außer wenn es sich um exakte BCD-Ganzzahlen handelt.