Hi Andreas,
Elementare Kenntnisse über (hier: numerische) Mathematik _sind_ hilfreich. Da gab es neulich so einen Thread zu diesem Thema ... ;-)
Was ist "numerische" Matehmatik? Das Problem besteht doch wohl darin, dass sich bstimmte Zaheln nicht alsbinär-Code abbileden lassen, so z.B. 1/3. DAher entstehen beim Rechnen mit sochen float-zahlen ganz minimale Abweichungen, die normalerweise nicht zu sehen sind, halt nur in Spezialfällen.
Eben - _das_ ist Numerische Mathematik. ;-)
Nur verstehe ich das obige Beispiel nicht - was ist daran schwer abszubilden? Vermutlich ergibt 0.1 + 0.7 = 0.7999999999, und das * 10 ist dann 7.99999999 und das als INT ist 7. Aber wieso? Wieso ist 0.1 + 0.7 nicht einfach 0.8? Kann man Dezimalzahlen grundsätzlich nicht 100% korrekt binär abbilden?
Nein. Und das zu verstehen, ist auch Numerische Mathematik.
Was ist denn so eine Binärzahl? Eine endliche (!) binäre Ziffernfolge.
Ob die als Vor- oder als Nachkommastellen interpretiert werden, ist egal - die Wertemenge ist nun mal auf 2 hoch (Anzahl der verwendeten Bits für die Mantisse) Kombinationen beschränkt.
Und innerhalb dieser Menge erlaubter Werte liegt 0.8 nun mal leider nicht - Du müßtest in der Lage sein, es durch die Summe beliebiger Terme aus [0.5, 0.25, 0.125, ...] darzustellen, und das wird Dir nicht gelingen, weil diese Liste eben nur endlich lang ist - so lang, wie Du Bits für die Mantisse spendierst.
Wieso speichern Programmiersprachen keien INT-Werte Kombiniert mit der Potenz?
Tun sie doch. Allerdings teilen sie diese INT-Werte vorher durch 2 hoch (Anzahl der verwendeten Bits für die Mantisse). Das ändert nichts an der Anzahl der darstellbaren Zahlen - allerdings sehr wohl an der konkreten Menge, wie Du am Beispiel von 0.8 siehst.
Also bei 0.7 einfach 7 * 10 ^-1 ? Man rechnet einfach mit den INT-Werten und ermittelt am Ende dann zusätzlich die 10er Potenz?
Versuche mal, das in ein real existierendes Schaltwerk zu übersetzen ... es hat schon seine Gründe, wieso Computer mit Binärzahlen arbeiten und nicht mit Dezimalzahlen.
Außerdem würdest Du bei Dezimalzahlen Platz verschenken. Wenn schon ein Exponent, dann einer zur Basis 16 ...
Und wieso werden die .9999999 nirgendwo angezeigt wenn sie doch existieren?
Weil Du das durch die Verwendung von INT() verboten hast?
Der erste Teil erfordert Abstraktionsfähigkeit (das ist etwas für die Mathematiker), der zweite Kreativität (das ist etwas für die Künstler), der dritte saubere handwerkliche Arbeit (das ist etwas für die Arbeiter).
Also sind Informatiker nichts anderes als hart arbeitende Künstler mit guten Mathematikkentnissen? ;-)
Informatiker sind vor allem gute Mathematiker mit hinreichend viel Kreativität und harten Arbeitern in Rufweite. (Ich habe nichts gegen Programmierer - jeder sollte einen haben. ;-)
Viele Grüße
Michael
T'Pol: I apologize if I acted inappropriately.
V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.