Video-Tutorial für Gleitkomma-Arithmetik nach IEEE-754. Teil I.

Gleitkomma-Arithmetik wird nicht von allen Programmierern gut verstanden. Zuvor arbeitete ich in verschiedenen IT-Unternehmen und stellte überrascht fest, dass selbst erfahrene Programmierer verloren gehen, wenn sich die Auswahl der Aufgabe ergibt ε So vergleichen Sie zwei Gleitkommazahlen im Code wie folgt:



if (abs (a-b) < EPS) . . .
      
      





Sie wählten naiv für alle ihre Projekte dieselbe 1e-8-Nummer, wodurch ein potenzieller Ort für schwerwiegende Fehler geschaffen wurde. Außerdem haben sie versucht, zwei Doppel wie folgt zu vergleichen:



if (a < b) . . .
      
      





Ich verstehe nicht, warum ich sie beschimpft habe, als ich solchen Unsinn sah. Ich spreche nicht einmal darüber, welchen Horror eine Konstante wie 0x400921fb54442d18 verursachen könnte (nur eine Zahl π ), die in einigen älteren Programmen oder auf dem Debugger-Bildschirm angezeigt werden.







Während des Debuggens stellte ein Kollege fest, dass sich der Ausdruck mit double nicht ändert, wenn er versucht, zwei Zahlen hinzuzufügen, und begann dann, bei einem Fehler im Compiler oder Debugger zu sündigen, bis ich erklärte, in welchen Fällen die Summe zweier Zahlen nur einem der Begriffe entspricht ...



Tricks zur Zahlenpermutation sind für viele ebenfalls beängstigend, und bei StackOverflow habe ich oft verwirrte Benutzerfragen gesehen, warum eine kleine Änderung eines Ausdrucks zu unterschiedlichen Ergebnissen führt und warum die Codeoptimierung zu einer völlig falschen Antwort führen kann. Einmal gab einer der Benutzer ausdrücklich an, dass er einen Fehler im Prozessor gefunden habe, als er eine Ganzzahl von 64 Bit in eine Zahl mit doppelter Genauigkeit konvertierte und dann zurück - und eine andere Zahl erhielt. Er wusste offenbar nicht, wie bei einer solchen Konvertierung mindestens 11 Bits verloren gehen. Und solche Unwissenheit findet sich auch bei denen, die sicher sind, dass er einfach weiß, wie alles funktioniert.



Selbst auf Habré gibt es oft Artikel, in denen die Autoren das unverständliche Verhalten von Gleitkommazahlen "aufdecken" und ihre Entdeckung als etwas Neues und Unbekanntes, Unverständliches und Geheimnisvolles ausgeben. Es ist seltsam, solche Artikel von scheinbar professionellen Programmierern zu sehen. Ich werde sie nicht veröffentlichen, bitte suchen Sie sie selbst.



Es scheint, dass verschiedene Schulungsmaterialien das Problem lösen sollten, aber nein. In der Regel hat der Leser Angst vor Formeln und unverständlichen Worten, die der Autor sofort auf ihn wirft: normalisierte Zahl , versteckte Einheit , voreingenommener Exponent- und dann, ohne die Gründe zu erklären, warum diese oder jene Lösung im IEEE-754-Standard erschien, beginnt eine trockene Darstellung der Theorie. Videovorträge zu diesem Thema glänzen auch nicht mit Abwechslung: Jeder scheint das gleiche primitive Beispiel zu analysieren, bei dem alles schnell und schön ausfällt ... und der Student wird nie vermuten, dass fast 100% der Compiler mit schwebender Arithmetik mit Fehlern arbeiten. Das ist verständlich, solche Lehrer wissen selbst nicht, was kommt und wie es funktioniert, und erzählen daher nur, was sie selbst verstehen, und es ist ganz offensichtlich, dass sie selbst erst gestern die Welt der Gleitkomma-Arithmetik entdeckt haben, aber sie haben es bereits eilig verwirrt erzähle von ihm. Ich beschuldige nicht, aber ich denke, dass ein solches Verhalten in der Öffentlichkeit inakzeptabel ist.



Also beschloss ich, die Situation zu beheben, und schuf gewissermaßen einen ProzessTrainingskurs. Dies ist ein Videokurs, der den Betrachter nahtlos in die Welt der Gleitkomma-Arithmetik eintaucht. In den ersten vier Lektionen beschäftigen wir uns mit dem Dezimalzahlensystem und wie die Umstände uns zwingen, das eine oder andere Zahlensystem zu erstellen, um schließlich zu einem Gleitkommasystem in dieser Form zu gelangen. Woher kommt die Normalisierung und warum wird sie benötigt? Woher kommt das Assoziativitätsproblem? Wie und warum geht die Genauigkeit verloren und was ist dagegen zu tun? Was ist absolut verboten und warum? Warum erscheinen in einem solchen System denormalisierte Zahlen und was ist das im Allgemeinen? Dann zeigen die nächsten 4 Lektionen, wie all dieses Wissen wunderbar in die binäre Arithmetik passt und woher die Idee des verborgenen Bits kommt. Wenn die erste "schreckliche Formel" auf dem Bildschirm erscheint,Der Betrachter hat bereits das notwendige Bild der Gleitkomma-Arithmetik im Kopf und versteht die Logik einer solchen Formel leicht ... natürlich, wenn er die Übungen korrekt ausgeführt hat. Alle diese 8 Lektionen sind der erste Teil des Kurses, es ist für Anfänger. Der zweite ist für fortgeschrittene Programmierer gedacht und befindet sich derzeit in der Entwicklung.



Warum Video und kein Text? Die Erklärung ist einfach: Ich habe verschiedene Formate ausprobiert und fand es für Anfänger schwierig zu lesen. Wer sorgfältig lesen kann, öffnet das Lehrbuch und liest den Text mit Formeln, versteht und versteht. Für diejenigen, die Schwierigkeiten beim Lesen haben, Angst vor schwierigen Dingen haben und es einfacher finden, das Material bei einer Tasse Tee zu studieren, ist ein reibungsloses Eintauchen in das Videoformat mit Voice-Over geeignet. Viel Wasser? Ja, es ist möglich, aber der Kurs richtet sich auch an Personen, die programmieren möchten, aber in der Schule nicht mit Mathematik befreundet waren. Daher ist das „Wasser“ für Sie kein Wasser, sondern das, was Sie bereits gut aus der Schule wissen, und viele meiner Schüler sind es nicht. Seien Sie herablassend zu ihnen, wir haben alle irgendwo angefangen. Das Video kann auch als Vorbereitung für das Lesen seriöser Lehrbücher angesehen werden. Stimmen Sie zu, es ist schön, wenn Sie ein Lehrbuch öffnen und viel schneller verstehen, was darin geschrieben steht.da ist das gewünschte bild schon im kopf.



Über mich: Früher ein professioneller Lehrer, 11 Jahre an einer Universität gearbeitet, Mathematik und Programmierung unterrichtet, habe ich in den letzten Jahren mathematische Bibliotheken für Hochleistungsrechnen entwickelt. Ich verstehe gut, was meine Zielgruppe will, und ich verstehe gut, was zu diesem Thema in der Programmierwelt gefragt ist, und daher glaube ich, dass ich das Recht habe, solche Kurse zu erstellen, und Sie können sich selbst davon überzeugen, dass qualitativ hochwertige ( inhaltliche ) Vorlesungen über Sie werden jetzt kein Russisch finden. Hör zu! Die ersten vier Lektionen, aus denen Sie bereits viele interessante Dinge lernen werden, sind völlig kostenlos. Wenn Sie möchten, können Sie den Rest durchgehen, sie sind noch interessanter, aber gegen eine Gebühr. Die Arbeit eines anderen muss respektiert werden: Ich bin es nichtIch verkaufe Wissen, aber ich brauche Unterstützung, um meine Bildungsarbeit fortzusetzen, also ist meine Zeit Geld wert. Generell können Sie aus meinen anderen Artikeln über Habré Rückschlüsse auf die Qualität meiner Arbeit ziehen.



Für diejenigen, die unserer VK-Community beitreten möchten, kann ich einen Rabatt von 50% gewähren, wenn Sie sich an die PM wenden. Bitte melden Sie sich bei ZealComputing School an (kostenlos) und sehen Sie sich die ersten 4 Lektionen an. Oder sie sind auf YouTube (der erste ist hier - und weiter auf den Links aus der Beschreibung). Ja, Sie müssen sich das Einführungsvideo, auf das ich verweise, nicht ansehen, es ist nur eine Werbung.



Zusammenfassung der bezahlten Lektionen



Lektion 5 : Gehen wir zum ersten Mal zum Binärzahlensystem über. Wir bauen ein schönes und einfaches 6-Bit-Gleitkommamodell, das dem IEEE-754-Format sehr nahe kommt. Dies ist die wichtigste und schwierigste Lektion. Die vorherigen vier Lektionen sollten zeigen, woher bestimmte Dinge in der Gleitkomma-Arithmetik kommen, und jetzt verstehen Sie anhand eines Spielzeugs und eines verständlichen Beispiels, wie diese Dinge im IEEE-754-Format schön aussehen.



Lektion Nummer 6: Einführung der Rundung. Es ist nicht so offensichtlich wie in der üblichen Mathematik. In den einfachsten Beispielen anderer Videolehrer erfahren Sie, was schwer zu erkennen ist. Nämlich: Es ist manchmal schwierig, eine Zahl aus dem Dezimalzahlensystem so oft in das IEEE-754-Format zu konvertieren, dass einige Compiler dies nicht richtig machen können. Ich werde im Detail erklären, warum theoretisch alles so einfach ist, aber nicht in der Praxis.



Lektion Nummer 7: Hier beherrschen Sie die Formate binary32 und binary64 (float und double) vollständig, zeigen, wie Sie die Bitdarstellung von Zahlen in C ++ anzeigen können (in anderen Sprachen ist es auch möglich, aber nicht in allen, dort verweise ich Sie auf Google oder Yandex und zeige, wie einfach es ist, finden Sie beispielsweise eine Java-Lösung). Nach dieser Lektion ist Ihnen die Struktur der Gleitkommazahlen (wenn Sie die Übungen gut gemacht haben) völlig klar und kann keine Fragen aufwerfen, die in den vorherigen Lektionen nicht beantwortet wurden.



Lektion Nummer 8: Eine praktische Anleitung zur Verwendung von Gleitkomma-Arithmetik. Einige der bereits beschriebenen Merkmale und neuen Momente: Verlust der Kommutativität, Assoziativität, unerwartete Manifestationen des sogenannten "Gleichmuts". Und der wichtigste Tipp! Mit diesem Ratschlag können Sie fast 100% aller Fehler bei häufig auftretenden unkritischen Aufgaben vermeiden. Als nächstes folgt die Diskussion des doppelten Rundungsfehlers, des katastrophalen Verlusts signifikanter Zahlen: wann und wie er auftritt. Im Allgemeinen wird in dieser Lektion jede einfache Übung beschrieben, die keine fortgeschrittene Mathematik erfordert.



Was ist noch im Kurs enthalten? Und nichts mehr wird benötigt! Sie können mir Fragen zu den Lektionen stellen, aber ich bin sicher, dass sie nicht entstehen werden. Jede Lektion enthält umfassende Übungen mit Antworten, so dass meine Teilnahme im Allgemeinen nicht erforderlich ist, daher der niedrige Preis. Ein vollständiger Kurs mit Kursleiter, Kommunikation, betreutem Workshop und Live-Vorträgen würde das Zehnfache kosten.



Viel Spaß beim Lernen!



All Articles