Einführung in Operatorausdrücke in Java im Rahmen der Lehre des Programmierens. (Java Operator Java Operatoren Java Grundrechenart Java Grundrechenarten Java), Lektion, Seite 720587
https://www.purl.org/stefan_ram/pub/java_operator_de (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Java-Kurs

Begrenzungen von Operatorrechnungen mit Java 

Bei Rechnungen mit Zahlen kommt es in Java  immer wieder zu Abweichungen von den schulmathematisch richtigen Ergebnissen . Java -Implementationen rechnen also tatsächlich manchmal mehr oder weniger „falsch“! – jedenfalls verglichen mit den Erwartungen eines Lernenden. Tatsächlich richten sich Java -Implementationen aber oft nach der Norm IEEE 754, nach welcher die Ergebnisse dann korrekt sind.

Begrenzungen beim Datentyp »int«

Das folgende Programmbeispiel zeigt, wie bei Rechnungen mit int-Werten falsche Ergebnisse entstehen können. Dies kann vermieden werden, indem sichergestellt wird, daß kein Wert einer Rechnung zu groß (größer als zirka eine Milliarde) wird.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 1000000 * 1000000 ); }}
java.lang.System.out
-727379968

Das folgende Programmbeispiel zeigt, wie ein Rechenergebnis „fast“ richtig zu sein scheint – abgesehen vom falschen Vorzeichen!

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( ( 2_147_483_647 + 1 ) ); }}
java.lang.System.out
-2147483648

In dem folgenden Programm wollte vielleicht jemand das Vorzeichen korrigieren, indem er ein Minuszeichen hinzufügt. Allerdings ändert dies die Ausgabe des Programms überhaupt nicht!

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( -( 2_147_483_647 + 1 ) ); }}
java.lang.System.out
-2147483648

In vielen Fälle kann man aber mit »int« korrekt rechnen, solange die dabei vorkommenden Werte nicht zu groß werden.

Begrenzungen beim Datentyp »double«

Nun könnte man denken, daß Rechenprobleme vermieden werden können, indem immer der Datentyp »double« verwendet wird, aber auch hier zeigen sich Rechenfehler. Man darf den hinteren Stellen eines double-Wertes nicht trauen! In der Regel kann man aber davon ausgehen, daß bei einfachen Rechnungen mit dem Typ »double« die ersten 10 Stellen stimmen, was für viele technische Berechnungen ausreichend genau ist.

Interne Näherungswerte

Der interne Wert des Literals »0.1« beträgt genau «0.1000000000000000055511151231257827021181583404541015625», da die verwendete Codierung den Wert ‹ 0,1 › nicht genau darstellen kann. Die Ausgabedarstellung von «0.1000000000000000055511151231257827021181583404541015625» ist aber wieder »0.1«, so daß die kleine Abweichung nicht beobachtbar ist.

Ausgabe des Wertes eines Ausdrucks

Auswertung Ausgabe
Ausdruck -----------------------> Wert -----------------------> Textdarstellung

0.1 0.1000000000000000055511151231257827021181583404541015625 0.1
(0x1.999999999999ap-4)

Der Wert in den Klammern gibt die interne binäre Darstellung durch Ziffern, die jeweils vier Bits zusammenfassen, an. Er wäre genau gleich ‹ 0,1 ›, wenn Platz für unendlich viele 9-Bitgruppen wäre.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 0.1 ); }}
Protokoll
0.1
Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 0.1000000000000000055511151231257827021181583404541015625 ); }}
Protokoll
0.1

Ergebnisse von Rechnungen

Bei Rechnungen können sich Fehler von Operandenwerten so addieren, daß der Gesamtfehler auch in der Ausgabe des Ergebnisses sichtbar wird.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 0.1 + 0.2 ); }}
java.lang.System.out
0.30000000000000004

Das folgende Programmbeispiel zeigt, daß bei »double« nicht nur Werte hinter dem Komma, sondern auch schon Stellen vor  dem Komma nicht mehr unbedingt mathematisch korrekt sein müssen.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 10000000000000000. + 1.
- 10000000000000000. ); }}
java.lang.System.out
0.0

Das folgende Programmbeispiel zeigt den größten double-Wert, der noch vom um »1.« erhöhten Wert unterschieden werden kann. Das Ergebnis der Rechnung ist noch mathematisch korrekt.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 9_007_199_254_740_991. + 1. - 9_007_199_254_740_991. - 1. ); }}
transcript
0.0

In dem folgenden Programm wird der Nachfolger des Wertes aus dem vorherigen Programm verwendet. Bei diesem Ändert die Addition von »1.« den Wert nicht mehr. Das Ergebnis der Rechnung ist nun nicht mehr mathematisch korrekt.

Main.java
public final class Main
{ public static void main( final java.lang.String[] args )
{ java.lang.System.out.println
( 9_007_199_254_740_992. + 1. - 9_007_199_254_740_992. - 1. ); }}
transcript
-1.0

Die Umstände, unter denen es zu solchen „Rechenfehlern“ kommen kann, müssen jedem ernsthaften Programmierer bekannt sein. Es wäre an dieser Stelle des Kurses aber noch zu früh, dieses Thema der möglichen Abweichungen vom mathematisch korrekten Ergebnis ausführlich zu behandeln. Vorläufig sollte man darauf achten, daß die Zahlen und die (Zwischen-)Ergebnisse bei Verwendung des Datentyps »int« nicht zu groß  werden (nicht größer als zwei Milliarden und nicht kleiner als minus zwei Milliarden) und wissen, daß Ergebnisse vom Typ »double« in den hinteren Stellen  (ungefähr nach der 10. Stelle) vom korrekten Ergebnis abweichen können.

Ein Kuriosität stellt es ferner dar, daß das folgende Programm übersetzt wird, aber nicht der danach stehende Quelltext. Dies liegt daran, daß es für die Folge aus den beiden lexikalischen Einheiten »-« und »2147483648« ein spezielle Regel gibt, die sie erlaubt und ihr eine Bedeutung gibt, während das Literal »2147483648« ansonsten nicht erlaubt ist.

Main.java
public final class Main
{ public static void main( final java.lang.String args[] )
{ java.lang.System.out.println( ( -2147483648 )); }}
transcript
-2147483648
Main.txt
public final class Main
{ public static void main( final java.lang.String args[] )
{ java.lang.System.out.println( -( 2147483648 )); }}
transcript
Main.txt:3: error: integer number too large: 2147483648
{ java.lang.System.out.println( -( 2147483648 )); }}
^
1 error

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram720587 stefan_ram:720587 Java Operator Java Operatoren Java Grundrechenart Java Grundrechenarten Java kostenlos, kostenlose, kostenloses, kosten los, kosten lose, kosten loses, gratis, free, frei, freie, freies, privat, private, privates, homepage, home-page, home page, website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite, Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel, online, on-line, on line, download downloaden, down load, or, deutsch, deutsche, deutsches, deutscher, Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges, german, germany, and, uebersicht, Uerbersicht, uebersichten, Uebersichten, Übersicht, übersicht, Übersichten, übersichten, Uebersicht, uebersicht, Uebersichten, uebersichten, Info, Infos zu, Information über, ueber, Informationen über, Auskunft, Auskünfte, Auskuenfte, Dienst, PbclevtugFgrsnaEnz, Angebot, Angebote, Anbieter, server, für, fuer, in, an, keyword, keywords, key word, keywords, internet, internets, net, network, net work, networks, net works, web, www, world wide web, Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar, computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon, computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 was ist ein, was ist das, was sind, definiere, definition, define, Inhalt, html, xhtml, free im netz, PDF Text, digital, digitale, binär, binäre, elektronisch, elektronische, fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines, Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen; , Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz, lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung, Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training, WBT, Net Based Training, NBT, computer based training, CBT, virtual learning environment, virtual university, für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie, Onlineacademie, Onlineakademie, Wissen, Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat, Referate, Hausaufgabe, Hausaufgaben, Tip, Tipp. Tipps und Tricks, Tips und Tricks, Methode, Methoden, Methodik, Funktion, Funktionsweise, Aufbau, Prinzip, Grundlage, Grundlagen, Internetschulung, Unterlage, Unterlagen, Struktur, Frage, Fragen, Antwort, Antworten, Schulunterricht, zum erlernen, was ist das?, wie?, lerne, Onlineausbildung, Onlinelehrgang, Onlinekurs, Onlinebuch, Webbuch, Academy, Fachhochschule, FH, TFH, Hochschule, Universität, Universitaet, Uni, Schule, Berufsschule, Gymnasium, Erste Schritte mit, Dozent, Dozenten, Zusammenfassung, Übersicht, Term, Fachwort, Fachbegriff, Fachbegriffe, Grundbegriff, Grundbegriffe, Lektion, Lektionen, Bedienungsanleitung, Bedienungsanleitungen, Spezialist, Spezialisten, Coaching, Coach, Fachbuch, technologie, Unterschied zwischen, Unterschiede zwischen, lehren, unterrichten, für das Studium, für Studenten, für Studentinnen, für Studierende, für Schüler, für Schülerinnen, Wie kann ich, Wie kann man, Hilfe, selber, erstellen, Erstellung, Beginner, Online-Seminar, Online-Kurs, Online-Schulung, ich, gebrauchsanweisung, gebrauchsanleitung, Bedienungsanweisung, Einweisung, Kurzinfo, Internet-Kurs, Internet-Kurse, Online-Training, Intensiv, Intensivkurs, Vortragsreihe, Präsentation, Grundzüge, Mitschrift, Mitschriften, Verständnis, verstehen, anwenden, Hintergrundwissen, Hintergrund, Hintergründe, content, Funktionsprinzip, Schritt für Schritt; E-Learning; elearning; online learning; Fernlehre, Fernlehrgang, Fernlehrgänge, Referent, Referenten, Fernkurs, Fernkurse, Fernstudium, Fernschule, Fernuniversität, Fernlehrer, Denken, Qualifizierungsmaßnahme, Qualifizierung, Qualifizierungen, Volkshochschulkurs, Volkshochschulkurse, Internet-Learning-Plattform, Online-Learning-Plattform, E-Learning-Plattform, Internetlearning-Plattform, Onlinelearning-Plattform, Elearning-Plattform, jetzt, Kochbuch, einfach erklärt, Kenntnis, Kenntniss, Kenntnisse, deutsche Hilfe, lernen und verstehen; blended learning; courseware, Profi, Profis, professionell, professionelle, professionelles, profesionell, profesionelle, profesionelles, professionel, gekonnt, für Könner, Grundkurs, Leistungskurs, Aufbaukurs, Lehrtext, Lehrtexte, Fachtext, Fachtexte, Ausarbeitung, distance learning, Online Seminar, distance education, Online Tutorium, Online Tutorien, technology-based learning, Computer based learning, CBL, Internet Based learning, IBL, Web based learning, WBL, online-learning, OL, online-training, OT, CAI, Computer Assisted Instruction, CUU, Computerunterstützter Unterricht, Computer-unterstützter Unterricht, Know how, Grundkenntnis, Grundkenntnisse, Kompetenz, Schulungsunterlagen, Insiderwissen, Rat, Lehrerinnen und Lehrer, ABC, Überblick, Arbeitsblatt, Sekundarstufe, Oberstufe, Material, Materialien, Unterrichtsentwurf, Unterrichtsentwürfe, Lerntip, Lerntips, Lerntipp, Lerntipps, ebook, schnell lernen, Lerner, Lernender, Lernende Erwachsenenbildung, Frage und Antwort, Selbststudium, Selbstudium, Umschulung, , Grundrechenart, Grundrechenarten, Addition, Summe, plus, Summand, Subtraktion, Differenz, Subtraktor, Subtrahend, Multiplikation, mal, multipliziert mit, Produkt, Faktor, Division, Quotient, geteilt durch, Bruch, Dividend, Divisor, source, source code,sourcecode, Programmier sprache java, Java Programm Java Programmiersprache Java Sprache Java Programmierung Programmieren in Java, Die Programmiersprache Java Javapgrammierung, Java-Programmierung, Java2, Java1.2, Java1.3, Java1.4, Java1.5, Java 2, Java 1.2, Java 1.3, Java 1.4, Java 1.5, Java 1.6, Java 1.7, Java 1.8, Java 8, Java 1.9, Java 9, Java 1.10, Java 10, Tiger, Dolphin, objektorientierte Programmierung, Java sun, , Softwareentwicklung, Software-Entwicklung, Software Entwicklung, Softwareprogrammierung, Software-Programmierung, Software Programmierung, Softwareherstellung, Software-Herstellung, Software Herstellung, Softwareerstellung, Software-Erstellung, Software Erstellung, Softwareengineering, Software-Engineering, Software Engineering, Softwareenginering, Software-Enginering, Software Enginering, Softwaremethodik, Software-Methodik, Software Methodik, Programmiermethodik, Programmier-Methodik, Programmier Methodik, Softwaredidaktik, Software-Didaktik, Software Didaktik, Methodik des Programmierens, Didaktik des Programmierens, Fachdidaktik des Programmierens, Fach-Didaktik des Programmierens, Programmieren, Programmierung, Computer Science, Informatik, Informatik, Informationspädagogik, Informationspaedagogik, Programmierer, programmieren, Quellcode, Quelltext, Quelle, Quellen, Informatiker, Fachinformatiker, Entwickler, mit Stil, mit Stiel, mit Still, , Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd720587, slrprddef720587, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/java_operator_de