Ankündigung

Einklappen
Keine Ankündigung bisher.

Diesmal on-topic: Genauigkeit, Nachkommastellen, Floatzahlen, Fehlerfortpflanzung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Diesmal on-topic: Genauigkeit, Nachkommastellen, Floatzahlen, Fehlerfortpflanzung

    Um nicht bei jedem Thema eine Grundsatzdiskussion zu haben, die letztlich nur ungewollt die Fragesteller vergrault, hier - sozusagen "ein für alle Male" das wichtigste:
    1. Genauigkeit, Runden usw. ist kein IT-Thema, es sei denn, es sei der Sonderfall, daß jemand haargenau weiß, was er will, alle Hintergründe kennt, "vom Fach" ist und nur eine Umsetzung seines Problems in der betr. Software sucht.
    2. Was insbesondere beim Runden zu beachten ist, steht in den betr. Lehrbüchern, Gesetzestexten, Din-Normen usw und ist den betr. Entwicklern aufgrund ihre fachlichen Hintergrundes bekannt oder beim Kunden zu erfragen.
    3. Kein Rechner, keine Software kann die Probleme, die beim Runden in Bezug auf die Genauigkeit bzw. im Hinblick auf die Genauigkeit allgemein entstehen, vermeiden. Sie müssen sach- und fachgerecht gelöst werden, Grundlage ist nicht IT-Wissen, sondern die jeweiligen Fachdisziplinen.
    4. Für eine Menge Verwirrung sorgt der sog. "Float"-Datentyp, der insbesondere von PHP, aber auch von JavaScript verwendet wird. Dieser Datentyp ist in hohem Maße für wissenschaftliche Berechnungen geeignet, sofern nicht Genauigkeiten von mehr als 14 signifikanten Stellen erforderlich sind. Ansonsten ist dieser Datentyp bei beliebigen Berechnungen (Sonderfall kaufmännisches Rechnen s. unten 8.) allen anderen Datentypen überlegen. Wer nicht weiß, was signifikante Stellen sind und warum sie wichtig sind, kann dies hier nachlesen: Wikipedia: Signifikante Stellen.
    5. Die größten Probleme treten in diesem Zusammenhang auf durch sog. "Scheingenauigkeiten" und bei Berechnungen, die die "Strichrechenarten" Addition/Subtraktion mit den "Punktrechenarten" Multiplikation/Division/Potenzieren usw. verbinden.
      In letzterem Fall gilt: zunächst wird alles mit der höchsten verfügbaren oder mit eine vorab festgelegten/vorgegebenen Anzahl von Nachkommastellen berechnet. Summen, deren Summanden auf vorherigen Berechnungen beruhen, können bei den Zwischenergebnissen grundsätzlich ohne Bedenken mit der vollen Anzahl ihrer Nachkommastellen berechnet werden, Abweichungen ergeben sich auf Grundlage fachspezifischer Regeln (vgl. 8.). Beim Endergebnis ist aber darauf zu achten:
    6. Scheingenauigkeiten sind zu vermeiden. Im Zusammenhang mit 5. zeigt folgendes Beispiel, wie damit umzugehen ist:
      Ausgangsdaten/Aufgabe: Es ist zu prüfen, ob folgende Deck-Aufbauen auf eine 9.49 mal 1.5 m große Fläche an Deck einer Yacht passen. Abweichend von der Realität, wo stets Abstände einzuhalten sind und bei diesen auf schonmal "geschummelt" werden kann, können alle Aufbauten ohne Zwischenraum montiert werden. Die weiteren Daten:
      9 festmontierte Liegestühle, senkrecht zur Bootslängsachse anzuordnen, Breite 0.7305 m, 2 mit massiver Umrandung ausgestattete, kreisrunde "Planschbecken", Durchmesser 1.43m. Die Angabe zur Länge des Decks weißt eine vom Erbauer garantierte Genauigkeit von 2 Nachkommastellen auf (also 16.00 m). Die Genauigkeit von 4 Nachkommastellen bei den Liegestühlen beruht auf Herrstellerangaben. Beim stichprobenartigen Nachmessen erweißt sich die Angabe als Scheingenauigkeit: Es wird daher von einem auf 2 Nachkommastellen genauen Rundungsgenauigkeit und einer Breite von 0.73 m ausgegangen.
      Lösung: Bei einer Berechnung ohne Rundung außer einer abschließenden auf 2 Nachkommastellen lautet das Ergebnis: paßt! (9 * 0.73 + 2 * 1.43 = 9.43) Tatsächlich ist diese Berechnung falsch. Folgendes wäre zu berücksichtigen gewesen (Mindestanforderung! die Anwendung wiss. Fehlerrechnung kann hier weitere Beschränkungen auferlegen): Da es sich bei der Genauigkeit der Maße der Stühle um 2 signifikante Stellen handelt, kann nach der Multiplikation um annähernd eine Größenordnung lediglich wieder von eine Genauigkeit von 2 signifikanten Stellen ausgegangen werden, das betr. Zwischenergebnis (6.57) ist also vor weiteren Berechnungen auf diese Stellenzahl, also auf 1 Nachkommastelle zu runden => 6.6.Die Summierung kann dann zunächst so erfolgen: 6.6 + 2.86 = 9.46. Allerdings ist das Ergebnis nochmal zu runden, und zwar mindestens auf die kleinste bei den Summanden vorkommende Nachkommastellen-Anzahl, hier also: 1! Das korrekte Rechenergebnis lautet also 9.50 - die Aufbauten passen nicht wie geplant!
      Hinweis: Ich betone nochmal, daß es sich hier um Mindestanforderungen handelt, bei komplexeren Berechnungen sollte bspw. nochmal eine Reduzierung der Nachkommastellen-Zahl um 1 erfolgen u. dergl. mehr oder aber sofort die wiss. Fehlerrechnung zur Anwendung gebracht werden.
    7. Zusammenfassend die wichtigsten Ursachen für Scheingenauigkeiten: Division durch eine Zahl mit Primfaktoren ungl. Potenzen von 2 oder 5, Bsp. 1000 / 7 =142.9 und nicht etwa 142.857143, Multiplikationen (vgl. oben), bereits vom "Auftraggebe eingebaute" Scheingenauigkeiten (vgl. oben), Summierungen ohne Berücksichtigung der unterschiedlichen zulässigen Stellenzahlen der Summanden usw. Wie gesagt: Wer es "ganz richtig" machen will, verwendet wiss. Verfahren - ergänzt um Regeln des jeweiligen Fachgebiets!
    8. Eine Sonderstellung nimmt die Buchhaltung ein. Hier sollte man sich vorher einschlägig schlau machen, generell ist hier die Verwendung des Datentyp Decimal mit 4 Nachkommastellen angeraten, Ergebnisse i.d.R. mit 2 Nachkommastellen. Alles weitere: Den Steuerberater, Devisen-Händler usw. fragen!
    9. Der einzige (mir bekannte Fall) der das Problem ausschließlich auf ein IT-Problem reduziert, steht hier: Wertvergleich in Kontrollstrukturen
    Fazit: Da dieses Gebiet i.d.R. Fachwissen (bzw. Praktikerregeln) aus den jeweils einschlägigen Fachgebieten erfordert, gilt insbesondere für Entwickler: Hier ist in hohem Maße Kommunikation mit den jew. Fachabteilungen gefordert, was nicht immer ganz einfach ist ("Mauern", um nicht Dinge zu "verraten", die der Entwickler oder indirekt Kollegen nicht mitkriegen sollen, "Betriebsblindheit", auch: unzureichende & uneingestandene Inkompetenz auf dem eigenen Fachgebiet, usw).

  • #2
    Auch wenn ich mich jetzt als Ignorant oute...

    Ich hätte den Auftrag zur Lieferung und Montage dieser 9 Stühle und zwei Planschbecken ohne Zwischenräume angenommen und die Kohle für die erfolgreiche Montage kassiert. Mit dem nach Steuer erzielten Gewinn säße ich jetzt mit meiner Frau in einem guten Restaurant und würde mich über meine Kollegen amüsieren, die noch immer darüber schwadronieren ob das nun passt.

    Ein Problem taucht allerdings in der Praxis auf, wie komme ich nach Montage des letzten Stuhls aus der Ecke raus ohne auf einen Stuhl oder in ein Planschbecken zu steigen?

    Kommentar


    • #3
      Zitat von Alf2016 Beitrag anzeigen
      ... so erfolgen: 6.6 + 2.86 = 8.46. Allerdings ...
      Du schwächelst in der Rechtschreibung, Addition ist auch nicht deine Masterdisziplin.

      Kommentar


      • #4
        Trotz Titel ist das ein klassisches OffTopic-Thema...
        [MOD: verschoben von PHP-Einsteiger]
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar

        Lädt...
        X