Wie lässt sich das Problem der Gleitkomma-Rundung den Kunden am besten erklären ?
Ich kenne
http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html
Wie auch die Einträge in den C ++ - FAQ und verschiedenen anderen Seiten, die sich an Entwickler und Wissenschaftler richten. Gibt es jedoch eine Webseite, einen Artikel oder eine Erklärung, die sich an "Stammkunden" mit begrenztem mathematischem oder wissenschaftlichem Hintergrund richtet? (für die die obigen Referenzen flach fallen).
Wenn es von einer bekannten und anerkannten Institution oder Firma gepflegt wurde oder stammt, kann es, wie einige von Ihnen vielleicht erlebt haben, etwas kompliziert sein, dies selbst zu erklären.
customer-relations
Eric Grange
quelle
quelle
Antworten:
Ich finde einen einfachen Weg dies zu erklären, indem ich es demonstriere . Besprechen Sie, wie Sie
x
durch eine Zahl dividiert und dann mit derselben Zahl multipliziert werden sollten. Lassen Siex
den Kunden zustimmen, dass dies immer der Fall sein sollte. Dann mach das Alte(100 / 3) * 3
auf einem Taschenrechner; Zeigen Sie, dass der Wert nicht wie erwartet zu 100 zurückkehrt. Wenn die meisten Leute scheinbar einfache Mathematik "zusammenbrechen" sehen, dann neigen Sie dazu, die Gefahr von Gleitkommazahlen zu "bekommen", bei denen Genauigkeit wichtig ist (obwohl dies intuitiv ist nicht auf die niedrige Ebene, in die der Artikel geht, auf den Sie verweisen).Leider sind die meisten halbwegs vernünftigen Taschenrechner (mit Sicherheit alle wissenschaftlichen, die ich gesehen habe, und nicht nur einige grundlegende) heutzutage in der Lage, damit umzugehen - ich nehme an, sie speichern zusätzliche Ziffern, die über das hinausgehen, was angezeigt und gerundet werden kann - und tun dies auch Prüfen Sie, wie clever Ihr Rechner ist, bevor Sie ihn Ihrem Kunden vorführen.
quelle
Ich glaube nicht, dass es Abkürzungen gibt. Sie müssen entweder:
Oder, wenn das zu viel verlangt wird, muss man einfach:
Vielleicht hilft ein Beispiel mit irrationalen Zahlen (auch wenn Gleitkomma - Fragen im Zusammenhang mit rationalen Zahlen gelten auch):
sqrt(2) ~ 1.414
. Dann1.414^2 = 1.999396
. Egal wie viele Ziffern Sie verwenden, Sie werden nie ganz zum Original zurückkehren2
. Okay, 4 korrekte signifikante Stellen mögen akzeptabel sein, aber überlegen Sie, was passiert, wenn sich diese Art von "Rundungsfehlern" ansammeln. Hier liegt die wahre Gefahr.quelle
Bestimmen Sie zunächst, worüber sie sich beschweren. Finanztransaktionen müssen präzise durchgeführt werden, mit der richtigen Anzahl von Dezimalstellen und den richtigen Rundungsregeln. Dies bedeutet in der Regel, dass eine ganzzahlige Anzahl von Währungseinheiten beibehalten und sichergestellt wird, dass die Arithmetik korrekt ausgeführt wird.
Alternativ beschweren sie sich möglicherweise über übergenaue Anzeigen, und die Reduzierung der Anzahl der ausgegebenen signifikanten Stellen kann alles sein, was erforderlich ist.
Für Zahlen im Allgemeinen können Sie immer versuchen, eine dreistellige Dezimalzahl x zu finden, sodass x * 3 10 ist. Dies zeigt die Grundprinzipien.
Es gibt zwei verbleibende Probleme. Zum einen können bestimmte Zahlen genau dezimal, aber nicht binär ausgedrückt werden (z. B. 3,15). Es wird schwierig sein, dies nicht-technischen Leuten zu erklären, und Sie sollten versuchen, dies zu vermeiden, indem Sie nicht genügend signifikante Ziffern bereitstellen, damit es angezeigt wird. Der andere ist der Kunde, der ein wenig weiß, genug, um zu wissen, dass Computerarithmetik nicht immer genau ist und nicht genug, um zu erkennen, dass Dezimalarithmetik nicht immer genau ist. Ich habe mich mit einigen von ihnen gestritten und nichts Nützliches zu berichten.
quelle
Gleitkommazahlen in Computern verwenden Binärzahlen. So wie wir ein Zahlensystem mit Einsen, Zehnern, Hunderten und Zehnteln, Hundertsteln haben, haben Gleitkommazahlen in Computern tatsächlich Einsen, Zweien, Vieren und Hälften, Viertel und Achtel Spalten. Wenn der Kunde mit Fuß / Zoll vertraut ist, erinnern Sie ihn daran, wie Sie normalerweise Basis-2-Bruchteile eines Zolls für die Messung verwenden.
Versuchen Sie nun, 10 Cent als Kombination von Hälften, Vierteln und Achteln eines Dollars zu speichern. Es funktioniert einfach nicht:
.00011001100110011. . . ( wiederholt sich unendlich )
Es ist dasselbe, als würde man ein normales imperiales Maßband nehmen und versuchen, einen Zehntel Zoll zu messen. Sie können es nicht genau machen. Es gibt keine Darstellung von 1/10 als X / Y, wobei X und Y ganze Zahlen sind und Y eine Potenz von 2 ist.
Aus diesem Grund gibt es die dezimalen Datentypen, bei denen jede Dezimalstelle mit 4 Bits gespeichert wird. Daher kehren wir zur Darstellung der Basis 10 zurück. Der Kompromiss ist in Raum und Leistung (nach dem, was ich gelesen habe, ein Performance-Hit von ungefähr 100%).
quelle
Sagen Sie ihnen, dass der Computer eine Zahl nicht einfach mit willkürlicher Genauigkeit speichern kann, so wie ihr Bankkonto nicht 4.4423425908459032890413 ... Dollar halten kann (entweder $ 4.44 oder $ 4.45, nichts dazwischen). Speicherfehler führen zu Rechenfehlern.
(Es ist leicht betrügerisch, sollte ihnen aber eine Vorstellung davon geben, woran es liegt.)
quelle
2/3
Bitten Sie sie, die exakte Antwort auf zwei geteilt durch 3 aufzuschreiben.
Da die Antwort „ewig so bleibt“, können Sie darauf hinweisen.
Die Verwendung von 1/3 würde ebenfalls funktionieren, aber 2/3 ist möglicherweise ein etwas besseres Beispiel, da die Rundung (z. B.) .6666667 ergibt, wohingegen .3333333 so aussieht, als könnte es einfach abgeschnitten werden.
quelle
quelle
Einige Berechnungen erfolgen nach einer gesetzlichen Vorschrift. Wenn Sie beispielsweise berechnen möchten, wie viel Einkommensteuer in Deutschland auf ein zu versteuerndes Jahreseinkommen von 79.245,18 € zu zahlen ist, gibt es nur eine richtige Antwort. Du verstehst es richtig oder du verstehst es falsch. Wenn Sie es richtig machen, müssen Sie nicht erklären, wie Gleitkomma-Arithmetik funktioniert. Wenn Sie etwas falsch machen, müssen Sie nicht erklären, wie Fließkomma-Arithmetik funktioniert, sondern müssen Ihren fehlerhaften Code korrigieren.
Manchmal werden Ergebnisse angezeigt, die nicht richtig aussehen. Wenn Sie beispielsweise US $ 13.297,46 mit zwei Dezimalstellen in UK £ umwandeln und dann diesen Betrag von UK £ wieder in US $ umwandeln, erhalten Sie möglicherweise nicht US $ 13.297,46, sondern US $ 13.297,45 oder US $ 13.297,47. Das hat nichts mit Gleitkomma-Arithmetik zu tun. Es ist ein unvermeidbares Problem, und Sie sollten besser erklären können, warum es unvermeidbar ist. (Sie sollten auch wissen, warum das Problem nicht auftritt, wenn Sie von UK £ zu US $ und zurück konvertieren.)
Es gibt andere mögliche Ergebnisse, die nicht richtig aussehen. Wenn Sie Zahlen in Prozentsätze konvertieren, sollten die Prozentsätze 100% ergeben, möglicherweise jedoch nicht. Wenn Sie vier Prozentangaben mit zwei Dezimalstellen anzeigen, addieren sich die vier angezeigten Prozentangaben möglicherweise zu 99,99% oder 100,01%. Mit Gleitkomma-Arithmetik nichts zu tun. Trotzdem solltest du erklären können warum.
Als nächstes gibt es Situationen, in denen die unachtsame Verwendung von Gleitkomma-Arithmetik zu unangemessenen Ergebnissen führt. Zum Beispiel ist a + b + c normalerweise nicht dasselbe wie b + c + a. Wenn das ein Problem verursacht, gibt es nichts zu erklären, es ist etwas, das Sie beheben.
quelle