Wozu braucht man noch float und double?
-
schonwiedarausgeflogngrrr schrieb:
(arme 8bit-Welt, konnte immer nur mit Zahlen bis 255 bwz +127 oder -127 rechnen...;))
ganz so schlimm wars nicht, in 8 Bit kommt man (mit 2er Komplement Darstellung) von +127 bis -128
-
übrigens:
ob man mit Fix- oder Fließpunkt auskommt, hängt sehr von der Anwendung ab - auch 4-fach genaue Fließpunkt-Arithmetik reicht nie für alle Zwecke aus, ebenso wenig wie 8- oder 65536-fach genaue.
In der Zahlentheorie beispielsweise wäre jeder Rundungsfehler fatal, und die Zahlen können riesig sein. Dort ist es ein gewaltiger Unterschied, ob man beweisen kann, daß eine Zahl gleich 2.00000.....000000004839276123 ist oder exakt 2.
Dafür reicht dann weder Fix- noch Fließpunkt, man braucht Arithmetik mit beliebiger Genauigkeit wie bignums. Eine ALU, die so was kann, wäre mal hübsch.
-
!rr!rr_. schrieb:
Dafür reicht dann weder Fix- noch Fließpunkt, man braucht Arithmetik mit beliebiger Genauigkeit wie bignums. Eine ALU, die so was kann, wäre mal hübsch.
Na, wie soll die denn zum Beispiel 1./3.0 berechnen? Irgendwann ist der Speicher voll...
-
edit: nix
-
otze schrieb:
Na, wie soll die denn zum Beispiel 1./3.0 berechnen? Irgendwann ist der Speicher voll...
na indem rationale Zahlen vollständig gekürzt gespeichert werden. 1./3.0 wird gespeichert als 1/3, 2/10 dagegen wird gespeichert als 1/5. "Rationale Arithmetik" heißt dann "Bruchrechnung".
Diese Arithmetik mit beliebiger Genauigkeit ist schon in manchen Programmiersprachen eingebaut, in manchen seit Jahrzehnten, also ein alter Hut,
auch für C++ gibt es Bibliotheken dafür, und letztendlich unvermeidlich, falls Rundungsfehler inakzeptabel sind wie in der Zahlentheorie.
-
!rr!rr_. schrieb:
schonwiedarausgeflogngrrr schrieb:
(arme 8bit-Welt, konnte immer nur mit Zahlen bis 255 bwz +127 oder -127 rechnen...;))
ganz so schlimm wars nicht, in 8 Bit kommt man (mit 2er Komplement Darstellung) von +127 bis -128
FF
807F
-
!rr!rr_. schrieb:
"Rationale Arithmetik" heißt dann "Bruchrechnung".
Wann denn nicht?
-
z.B. wenn man mit Fließpunkt oder fixpunkt rechnet, wg. Rundungsfehler:
rational: 1/1 + 1/1000000000000000000000000000000000000000000000000000000000 = 10000000000000000000000000000000000000000000000000000000001 /10000000000000000000000000000000000000000000000000000000000
fließpunkt: 1.0 + 0.000000000000000000000000000000000000000000000000000000001 = 1.0
-
Aha. Wo ist da die rationale Arithmetik, die keine Bruchrechnung ist?
-
Ich denke auch das man float und double nicht braucht. Ich bin auch der Meinung das man Referenzen nicht braucht man kann ja zeiger benutzen. Ich bin auch der Meinung dass man die CString library nicht braucht man kann doch seine eigene schreiben oder noch besser anständig mit charpointers umgehen. Ach und Mehrfachvererbung von C++ ist ja sowas von überflüssig.
Warum sollte man nicht alles ein bisschen komplizierter machen?
Dann hat man noch was zum denken!
Wenn programmieren sowieso zu einfach wird dann macht das am Schluss noch jeder Depp. AAAHHH schreckliche Welt alles Informatiker. HHHIIILLLFFFEEE! Ich bin voll deiner Meinung lasst uns noch ints und chars benutzen:)
-
Sorry habe das "nur" im letzten satz vergessen. Ich bin voll deiner Meinung lasst uns nur noch ints und chars benutzen:)
-
mngbd schrieb:
Aha. Wo ist da die rationale Arithmetik, die keine Bruchrechnung ist?
wie wo ist da die ??
< +, -, /, *, > ~~~ < rationale Arithmetik >
rechnet man mit unbegrenzter Genauigkeit, handelt es sich um echte Bruchrechnung.
rechnet man mit Fix- oder Fließpunkt oder sonstwie begrenzten Formaten, dann muß dann und wann gerundet werden, und aus der echten Bruchrechnung wird eine Näherungsrechnung.
- habe ich was übersehen, oder wieso ist das ein Diskussionsgegenstand
-
Und wenn mal eine irrationale Zahl kommt z.b. Wurzel(2)? Dann schreibt man einfach -weil man ja möglichst genau sein will- alle 20 Stellen, die ein 64-bit Integer bietet, voll.
Damit ist dann die Wurzel(2) um ~10^19 von der tatsächlichen Zahl entfernt, man muss sich merken, dass das Komma noch verschoben werden muss.
Dann kommt die nächste Zahl z.b. 1000,1; Diese muss man dann wieder skalieren um in die Größenordung von wurzel(2) zu kommen und ich muss mir wieder merken wo denn nun das Komma ist...
Im Endeffekt speichere ich einen möglichst großen Integer und merke mir die Stelle des Kommas für jede Zahl. Da ist der double-Datentyp wohl besser geeignet.
Damit würde ein Vergleich so aussehen:
Int64 hat 18-19 Stellen Genauigkeit + Ich muss mir merken wo das Komma ist.
Double hat 15-16 Stellen Genauigkeit + nix mehr.
-
!rr!rr_. schrieb:
rechnet man mit unbegrenzter Genauigkeit, handelt es sich um echte Bruchrechnung.
Also ist rationale Arithmetik nur ne angenäherte Rechnung?
-
rationale Arithmetik heißt: Rechnen mit + - / *
ob man exakt oder angenähert rechnen muß, hängt vom Zahlenformat ab.
Daß man "1 + 1e-100 = 1" nicht als echte Bruchrechnung im math. Sinn bezeichnen kann, dürfte klar sein. Das ist eine Näherung.
-
Ist das ein "ja, rationale Arithmetik kann eine Näherungsrechnung sein"?
-
rationale Arithmetik mit Fließpunkt ist keine echte Bruchrechnung, sondern eine Näherungsrechnung. Die Summe zweier rat.Zahlen, etwa 1.0 und 1.0e-100000 wird im allgemeinen nur approximiert, in diesem Fall durch die Näherung 1.0
Rationale Arithmetik auf Zahlen beliebiger Genauigkeit dagegen ist echte Bruchrechnung.
- worauf willst du denn hinaus ?
-
Ich will darauf hinaus, dass ich (und wohl auch andere) keinen Unterschied zwischen den Begriffen "rationale Arithmetik" und "Bruchrechnung" feststellen kann. Denn rationale Zahlen sind gerade als Brüche von ganzen Zahlen definiert.
Die Abweichungen der Rechenergebnisse im Computer haben nichts damit zu tun, dass man es mit rationalen Zahlen zu tun hat (also rationale Arithmetik betreibt), sondern dass die darstellbare Menge an Zahlen z. B. eines Fließkommatyps keinen Körper darstellen, weil die Rechenoperationen nicht abgeschlossen sind (d. h. das Ergebnis einer Multiplikation/Division/Addition/Subtraktion zweier Zahlen aus dem darstellbaren Bereich kann den darstellbaren Bereich verlassen, was dir bei rationaler Arithmetik nicht passieren kann, da die rationalen Zahlen einen Körper mit den üblichen Operationen bilden).
Daher würde ich nicht unterscheiden zwischen rationaler Arithmetik und Bruchrechnung, sondern zwischen der Arithmetik im Körper Q und der Arithmetik auf der Menge der im Computer bzgl. eines bestimmten Typen darstellbaren Zahlen.
-
Michael E. schrieb:
Ich will darauf hinaus, dass ich (und wohl auch andere) keinen Unterschied zwischen den Begriffen "rationale Arithmetik" und "Bruchrechnung" feststellen kann.
Ack.
-
nöö. So spitzfindig zu sein bringt gar nichts. Denn dann müßte man auch behaupten, daß es rationale Arithmetik in der Praxis überhaupt nicht gibt:
schließlich ist leben wir in einem zeitlich und räumlich endlich begrenzten Universum, da gibt es keinen Computer (und wird es auch nicht geben), der genug Speicherkapazität hat, um wirklich beliebig lange Zahlen zu speichern; und selbst wenn er groß genug wäre, würde das Universum nicht lange genug existieren, damit er seine Rechnung abschließen könnte.
Weniger spitzfindig, aber dafür praxis-relevant bleibe ich dabei: mit Fließ- und Fixpunkt gibt es rationale Arithmetik mit Näherungen, rationale Arithmetik mit "unbegrenzter" (aber s.o.) Genauigkeit ist das, was man vulgo "Bruchrechnung" nennt.