News Windows 10: Der Taschenrechner berechnet Wurzeln nun doch noch richtig

Meetthecutthe schrieb:
"Vielen" geht es offenkundig mit den einfachsten Rechtschreibregeln ähnlich. Dennoch würde ich weder die einen noch die anderen verurteilen wollen :p .
Joa, hab' das gestern vom Handy aus geschrieben. Das macht mein Argument natürlich vollkommen ungültig.
 
Acrylium schrieb:
Joa, hab' das gestern vom Handy aus geschrieben. Das macht mein Argument natürlich vollkommen ungültig.

Ich habe es nicht böse gemeint. Ist ja richtig.

BTT : Erfreulich das es überhaupt noch nachgebessert wurde.
 
Bis auf einfachste Grundrechenarten, verwende ich sowieso nur Excel und da funktioniert es gut.

Die wichtigsten Formeln in einem Dokument übersichtlich darstellen, damit man sich in Zukunft viel Tipp-Arbeit spart oder das Suchen nach der passenden Formel.
Außerdem kann man Zwischenschritte besser visualisieren.

Für alles andere habe ich "echten" Casio Taschenrechner. Danke Japan!
 
All die hämischen und besserwisserischen Kommentare hier sind sowas von nervend. Zeugt wie wenig selbst in Technikforen Leute wissen wieviel Aufwand in korrekter Software steckt.

Kurz erklärt: 1/3 ist nicht genau darstellbar in Dezimalschreibweise: 0,33333... (irgendwann schneidet man ab oder rundet man). Genauso gibt es andere Zahlen die als Gleitkommazahl nicht genau darstellbar sind, obwohl sie es in Dezimalschreibweise wären.

Sqrt/Wurzel rechnet mit Gleitkommazahlen, und verwendet schrittweise Approximation durch z.B. Taylorreihen oder den CORDIC-Algorithmus, siehe hier:
https://de.wikipedia.org/wiki/Quadratwurzel#Berechnung_von_Quadratwurzeln_aus_reellen_Zahlen

Daher sind die Ergebnisse nicht genau, die Fehler akkumulieren sich, da die Zwischenergebnisse keine ganzen Zahlen sind und die wie oben erwähnt nicht immer genau darstellbar sind. Von Rundungsfehlern der Rechenschritte an sich ganz abgesehen.

Will man etwas genaueres, muss man auf ein Verfahren analog der schriftlichen Division setzen, wo auch nur ganze Zahlen verwendet werden:
https://de.wikipedia.org/wiki/Schriftliches_Wurzelziehen

Wahrscheinlich verwenden sie etwas ähnliches.

Amüsant dass man es nicht hinbekommt richtig mit floats zu rechnen.
Dabei hätte die FPU extra das PF und mit FRNDINT einen Befehl um die Rundung durchzuführen oder FIST(P) wenn man den Int gleich speichern will. Das kann man alles in wenigen Cycles handhaben.
Der Vorschlag zu runden ist Unsinn, denn das verschiebt den Fehler nur, und führt Fehler an anderen Stellen ein. Siehe oben.

Es hilft nur ein komplett anderes Rechenverfahren, das keine rellen Zwischenergebnisse erzeugt, oder aber symbolisch rechnet und erst am Schluss konkrete Zahlen erzeugt. Alles andere erzeugt Rundungsfehler in den Zwischenergebnissen (je nach Ergebnis hat man mal Glück, mal nicht).
 
  • Gefällt mir
Reaktionen: Mort626, PoiZz3n, zepho und eine weitere Person
Habe gerade mal interessehalber den Standard-Modus des MacOS Rechners und den Standard-Rechner von Samsung auf Android ausprobiert: 8 - 4 x 2 = 0

Anscheinend trauen andere Hersteller auch dem normalen "Standard-Nutzer" so viel Vorkenntnisse zu.

Dafür zeigt Apple nicht mal im wissenschaftlichen Modus alle eingegebenen Werte an, sondern hat wie ein uralter Schultaschenrechner nur ein einzeiliges Display.
 
Photon schrieb:
Klingt ja nicht nach einem Bug, der schwer zu beheben ist
Klingt vor alle dem nicht nach einem "bug", den man beheben muss. Die Rechenungenauigkeit ist so gering, dass man damit die Strecke von hier bis zu Alpha Centauri in Millimeter mit weniger als einem Millimeter Rechenungenauigkeit berechnen kann.
Das sollte für jede Aufgabe reichen. Es ist also ein reines Komfortproblem für den User, der die Zahl immer ein wenig Runden muss
Dabei fände ich es eigentlich ganz gut, wenn den Leuten bewusst wäre, dass CPUs niemals mit unendlich hoher Genauigkeit rechnen können.


Reverend1949 schrieb:
Wie kann es sein daß Taschenrechner verkauft werden die nicht "Punkt vor Strich" beherrschen? Das habe ich auch schon bei Softwarerechnern erlebt und erst nach Umstellung auf "wissenschaftlich" wurde korrekt gerechnet.
Weil "Punkt vor Strich" einfach nur eine Definitionssache ist, die festlegt, wo du die Klammern zu setzen hast.
In gewissen Bereichen macht es aber keinen Sinn so viele Klammern zu setzen. Zum Beisiel im kaufmännischen Bereich. Dort will man zum Beispiel alle möglichen Preise von Produkten aufaddieren und anschließend die Mehrwertsteuer hinzurechnen.
Wenn man dort 1+2+3+4+5*1,19 eingibt, dann rechnet man die Mehrwertsteuer zu allen Posten hinzu und nicht nur zu der 5.
Aus dem Grund rechnet der Taschenrechner kein Punkt-vor-Strich im normalen Modus.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Reverend1949
joshy337 schrieb:
Wenn man versteht, wie ein normaler Taschenrechner arbeitet, wird alles klar..
Kurzum: Ein Taschenrechner arbeitet mit Stacks. Er "merkt" sich nur die letzte Eingabe, und rechnet damit Schritt-für-Schritt weiter.
In anderen Worten: A+B=A. Er hat keinen Überblick über die gesamte Rechnung. Darum kann er kein "Punkt vor Strich, aber Klammern zuerst"
Nein, im "normalen" Modus wird gerade KEIN Stack verwendet, deshalb funktioniert "Punkt vor Strich"-Rechnung nicht. Wenn du Klammern verwenden kannst, hast du automatisch einen Stack und dann geht auch "Punkt vor Strich".

Gruß,
CTN
 
Auch auf die Kleinigkeiten kommt es an.

Die Fixierung zeigt doch wie sehr MS an Windows 10 arbeitet.

Ich persönlich benutze den Taschenrechner so gut wie nie, weil ich habe immer einen Taschenrechner mit deutlich mehr Funktionen in griffweite und es ist auch oft nicht nötig, weil in vielen CAD Programmen selber sehr gut rechnen können.
Was habe ich schon richtig Formeln und Gleichungen in SolidWorks eingetragen wo nur eine kleine Änderung das ganze Bauteil komplett umgebaut hat.
 
aber in standard kann er immer noch nicht punkt- vor strichrechnung-peinlich!

calculator.png
 
  • Gefällt mir
Reaktionen: DjangOC
denglisch schrieb:
Der Vorschlag zu runden ist Unsinn, denn das verschiebt den Fehler nur, und führt Fehler an anderen Stellen ein. Siehe oben.
Um bei dem erwähnten Beispiel von 1/3 zu bleiben, der Windows Rechner wird, da er im Standardbetrieb stets mit endlicher Genauigkeit darstellt, runden müssen. Da runden ja Schwachsinn ist scheint Abschneiden also besser zu sein?

Calc rechnet(e?) eben offenbar nach einem fehlerbehafteten Verfahren, doch statt dem Nutzer das einfach so hinzuwerfen hätte er auch die aus der Operation maximal erzielbare Genauigkeit ermitteln, eventuell anzeigen und entsprechend runden können. Die Technik dazu existiert seit Jahrzehnten.
Das würde den an dieses Programm gestellten Anforderungen schon Genüge tun, es sollte ein einfacher Rechner sein und kein volles CAS o.Ä.

Schwachsinn wäre nach jedem Rechenschritt zu runden, das allerdings hat niemand behauptet.
 
K7Fan schrieb:
Um bei dem erwähnten Beispiel von 1/3 zu bleiben, der Windows Rechner wird, da er im Standardbetrieb stets mit endlicher Genauigkeit darstellt, runden müssen. Da runden ja Schwachsinn ist scheint Abschneiden also besser zu sein?
Schwachsinn wäre nach jedem Rechenschritt zu runden, das allerdings hat niemand behauptet.
Wenn man 1/3+1/3+1/3 mit Dezimalzahlen berechnet wird man z.B. 0,99999 bekommen (je nachdem wieviel Stellen man behält), aber nicht 1,0.

Addiert man 1/4 + 1/4 +1/4 erhält man 0,75.

Wenn man beidesmal das Endergebnis rundet, bekommt man zwar 1,0 im ersten Fall wie gewünscht, aber auch 1,0 für die zweite Rechnung.

Wie genau/ab welcher Stelle man runden soll hängt von der Berechnung ab, und das zu entscheiden bedeutet die Rechnung analytisch oder symbolisch zu betrachten. Dann kann man auch gleich symbolisch Rechnen.

Daher hilft Runden allgemein nicht und man muss eine andere Herangehensweise nehmen, also keine Gleitkommazahlen, sondern etwas Symbolisches. Z.B. wie bei der schriftlichen Division von Hand, die für Ergebnisse die ganze Zahlen wären, auch ganze Zahlen liefert.

Irgendetwas in der Art haben sie implementiert, also eine Darstellung gewählt die für die genannten Probleme endlich, aber exakt ist.

Will man diese Exaktheit für viele Operationen haben, wird das schnell ziemlich aufwändig (sprich individuelle Lösungen), und auch den Rechenfehler zu bestimmen ist nicht trivial.

Wenn man mit Gleitkommazahlen rechnet ist der Fehler nicht zu entdecken, nachdem er eingetreten ist. Dafür braucht man wie gesagt symbolische Darstellungen bzw. explizite Prüfungen vor der Rechnung. Das kann man für ein paar Probleme machen, will man das aber allgemein lösen, wird das sehr aufwändig. (Siehe Computeralgebrasystem.)
 
Zuletzt bearbeitet:
CrunchTheNumber schrieb:
Nein, im "normalen" Modus wird gerade KEIN Stack verwendet, deshalb funktioniert "Punkt vor Strich"-Rechnung nicht. Wenn du Klammern verwenden kannst, hast du automatisch einen Stack und dann geht auch "Punkt vor Strich".

Gruß,
CTN
Ah, verstehe. Fein, danke für die Rückmeldung! :) Ich möchte mich dann anders ausdrücken..
Ein Taschenrechner, dh. ein "echter" Taschenrechner, also ohne CPU, RAM und Programmcode,
arbeitet mit einer sequentiellen Eingabe. Die Logik basiert eher auf dem Prinzip einer ALU.
Er führt traditionell alle vier Grundrechenarten auf die Addition zurück.

https://de.wikipedia.org/wiki/Taschenrechner#Unterscheidungsmerkmale
https://de.wikipedia.org/wiki/Arithmetisch-logische_Einheit

wesch2000 schrieb:
aber in standard kann er immer noch nicht punkt- vor strichrechnung-peinlich!

Anhang anzeigen 692195
Finde ich aber auch irgendwie gut so. Mein Taschenrechner aus dem 1€ Shop kann das ja auch nicht.

Wenn der Windows-Rechner das in der Standardversion könnte, wäre er kein Ersatz mehr zu einem normalen Taschenrechner.
 
  • Gefällt mir
Reaktionen: Reverend1949
Tja, für ganzzahlige Wurzeln mag Microsoft den Fehler behoben haben, aber probiert doch mal sqrt(6,25)-2,5 aus. Da kommt weiterhin nicht 0 raus 🙄
 
Zuletzt bearbeitet:
denglisch schrieb:
Wenn man mit Gleitkommazahlen rechnet ist der Fehler nicht zu entdecken, nachdem er eingetreten ist.
Genau dafür hat die FPU extra ein Flag, Bit 5 im SR. Über das C1 Flag teilt sie i.d.R. zusätzlich mit ob auf- oder abgerundet wurde. Man entdeckt sehr wohl und leicht dass das Ergebnis fehlerbehaftet ist.

Auch wenn man anstatt die antiquierte FPU zu verwenden bessere/genauere/modernere Rechenmethoden programmiert ist das keine Entschuldigung dafür bei derart trivialen Aufgaben ein falsches Ergebnis zu liefern. Die Erkennung von Fehlern bei Fließkommaoperationen war schon vor 30 und mehr Jahren möglich.

Es geht hier immer noch um Calc, einen relativ einfachen Rechner, und nicht Maple, Mathematica und Co. Deren Leistung von Ersterem zu erwarten oder zu fordern wäre IMHO nicht angebracht. Der primäre Verwendungszweck für Calc liegt in relativ einfachen Berechnungen, dort muss er richtig und fehlerfrei rechnen.
Wenn jemand meint die Flugbahn der Reise seines zukünftigen Marsroboters mit calc höchst genau berechnen zu müssen dann liegt der Fehler zu einem signifikanten Teil in der falschen Auswahl des Werkzeuges.

edit: Weiters geht es hier in den genannten Beispielen von 2-sqrt(4) und 2.5-sqrt(6.25) um Rechnungen bei denen niemals eine Zahl auftritt die man nicht selbst als float exakt darstellen kann. Dabei nicht exakt 0 als Ergebnis zu liefern kann nicht über finite Präzision der Datentypen erklärt werden.

daku93 schrieb:
Tja, für ganzzahlige Wurzeln mag Microsoft den Fehler behoben haben, aber probiert doch mal sqrt(6,25)-2,5 aus. Da kommt weiterhin nicht 0 raus 🙄
Faszinierend. Man braucht eigentlich garnichts weiter zu machen als diese Berechnung genau so in eine herkömmliche x87 FPU zu hämmern um ein richtiges und exaktes Ergebnis zu erhalten, gerade eben versucht.
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: ZeusTheGod
Ein Taschenrechner der im Jahre 2018 Wurzeln korrekt berechnen kann - iam impressed ^^

Not.
 
Fragger911 schrieb:
Du hast im Windows-Rechner zwischen Quadratwurzel und Pi einen Pfeil, der bringt eine weiter Funktionsreihe hervor... und da gibt es auch die Möglichkeit der Kubikwurzel (yrootx).
Ooh wow! Vielen Dank!!! Den Pfeil hätte ich wohl sonst nie angeclickt... aber macht natürlich schon ein wenig Sinn :) Cool, Danke!
 
Genau dafür hat die FPU extra ein Flag, Bit 5 im SR. Über das C1 Flag teilt sie i.d.R. zusätzlich mit ob auf- oder abgerundet wurde. Man entdeckt sehr wohl und leicht dass das Ergebnis fehlerbehaftet ist.
Die Größenordnung des Fehlers muss man immernoch selbst bestimmen, und vorallem dann eine alternative Rechenmethode ausführen, die es genauer macht.
Welche Methode man auswählen muss hängt dann immer noch von den konkreten Werten ab die verrechnet werden sollen, z.B. ob es Integerwerte sind oder sie dazu verlustfrei skaliert werden könnten, um dann korrekt zu rechnen.

Abgesehen davon verwenden sie aber nicht die FPU, SSE oder ähnliches, sondern eine BigNum-Bibliothek die Dezimalzahlen darstellen kann.
Ist natürlich alles machbar, aber Aufwand, und nicht trivial.

Auch wenn man anstatt die antiquierte FPU zu verwenden bessere/genauere/modernere Rechenmethoden programmiert ist das keine Entschuldigung dafür bei derart trivialen Aufgaben ein falsches Ergebnis zu liefern. Die Erkennung von Fehlern bei Fließkommaoperationen war schon vor 30 und mehr Jahren möglich.
BigNum-Bibliothek die Dezimalgleitkomma unterstützten gibt es sicherlich nicht seit 30 Jahren. Die FPUs haben sich erst Mitte der 80er stabilisiert, und ein großer Teil der Numerik entwickelt sich immernoch.

edit: Weiters geht es hier in den genannten Beispielen von 2-sqrt(4) und 2.5-sqrt(6.25) um Rechnungen bei denen niemals eine Zahl auftritt die man nicht selbst als float exakt darstellen kann. Dabei nicht exakt 0 als Ergebnis zu liefern kann nicht über finite Präzision der Datentypen erklärt werden.
Binary floats und ihre Implementierung sind aber nicht relevant, da sie nicht verwendet werden, um z.B. 0.1 rundungsfrei darstellen zu können.
Es bleibt dass andere Rechnungen ebenso betrachtet werden müssen, sonst kriegt man irgendwo ungefähr 4 raus, und die Wurzel davon ist wieder nicht 2.

Faszinierend. Man braucht eigentlich garnichts weiter zu machen als diese Berechnung genau so in eine herkömmliche x87 FPU zu hämmern um ein richtiges und exaktes Ergebnis zu erhalten, gerade eben versucht.
Siehe oben. Das bringt nichts, da der Windows-Rechner Dezimalbrüche rundungsfrei speichert, und daher binary floats nicht verwenden kann.
Versuche mal sqrt(4) + 0.1, das Ergebnis ist nicht wie erwartet 2.1, da gar nicht darstellbar.
Und ein normaler Taschenrechner sollte wenn, dann auch sowas richtig rechnen.
Ups, doch nicht so einfach...

Mich stört auch das Prinzip "gibt es schon irgendwo seit langem, ist doch selbstverständlich dass ihr das auch habt". Wenn man es oberflächlich betrachtet, ja. Im Detail passt das dann aber nicht mehr, siehe DecimalFloats.
Die wurden für Hardware erst 2008 standardisiert, und von Implementierungen ist bisher nicht viel zu sehen.
 
Zuletzt bearbeitet:
denglisch schrieb:
Versuche mal sqrt(4) + 0.1, das Ergebnis ist nicht wie erwartet 2.1, da gar nicht darstellbar.
Und ein normaler Taschenrechner sollte wenn, dann auch sowas richtig rechnen.
Ups, doch nicht so einfach...
Sharp Tischrechenmaschine: 2.1
FPU: 2.1
Ti-92: 2.1
Mint-Calc: 2.1
Windows 7 Calc: 2.1

All das obwohl 0.1 für sie nicht einmal existiert. Um ihnen dieses Problem sichtbar zu entlocken braucht es schon bessere Aufgaben ;)
Die gute alte Sharp, Baujahr ca. 1980, rechnet btw. ebenso die beiden im Thread gebrachten Beispiele mit Wurzeln korrekt.

Garantiert lassen sich Beispiele finden bei denen das von Microsoft eingesetzte Verfahren den hier Genannten klar überlegen ist, daran zweifle ich nicht im Geringste, nur welchen Anteil an dem was calc.exe in der Praxis als Eingabe sieht haben solche Aufgaben? Kann es sein dass man dieses Programm einfach völlig an den Anforderungen vorbei entwickelt und sich dabei, unnötigerweise, reichlich Probleme eingehandelt hat?

denglisch schrieb:
BigNum-Bibliothek die Dezimalgleitkomma unterstützten gibt es sicherlich nicht seit 30 Jahren.
Zehn Jahre weniger und man kommt zu Mainframes die Dezimalgleitkomma beherrschten, ganz so neu ist das Thema auch wieder nicht.
Man kann die Kanone mit der man den Spatzen abschießen möchte natürlich beliebig groß bauen, der Schmerz wenn sie einem auf die Füße fällt steigt halt stets mit deren Gewicht.
 

Ähnliche Themen

Zurück
Oben