Wozu braucht man noch float und double?
-
Wie baust du einen Taschenrechner, bei dem du nicht vorher sagen kannst, mit welchen Größenordnungen du zu rechnen hast. Dann müsstest du bei jeder weiteren eingegebenen Zahl und bei jedem Rechenschritt prüfen, ob deine Skalierung noch passt. Ganz schön umständlich, wo du doch eigentlich nur die Funktionsweise der Fließkommazahlen nachbaust.
-
Fließkomma ist doch nix anderes als festkomma mit ner variablen 10er potenz
.
Und wenn das komma "im sinne" immer nach der ersten ziffer stellst,... naja,...Die frage sollte eigentlich lauten:
Warum gibt es noch keine handelsüblichen ALU's mit achtfacher genauigkeit ?grüße
-
Bashar schrieb:
Integer vs. Double schrieb:
Außerdem rechnet Int genau, double tut das nicht.
3/2 == 1
3.0/2.0 == 1.5
Wenn das deine Vorstellung von Genauigkeit ist ...naja, wenn man 3 durch 2 teilt, bleibt ein rest 1. Eins geteilt durch 2 geht nicht, also rechnet man 10 geteilt durch 2...
also in asm.......:)
(arme 8bit-Welt, konnte immer nur mit Zahlen bis 255 bwz +127 oder -127 rechnen...;))
-
Selbst bei der besten realistisch machbaren fixed point Arithmetik ist dein Wertebereich winzig gegenüber Fließkommazahlen. Oftmals hat man eben Rechnungen in denen sehr kleine und sehr große Zahlen gleichzeitig vorkommen oder man eben nicht vorher weiß, in welcher Größenordnung das Ergebnis liegt. Einfaches Beispiel: Zeichne ein Diagramm von 1/x in logarithmischen Skalen. Hier will ich mal sehen wie du das ohne Fließkomma löst.
-
zeusosc schrieb:
Die frage sollte eigentlich lauten:
Warum gibt es noch keine handelsüblichen ALU's mit achtfacher genauigkeit ?Manchmal ist vierfache Genauigkeit eben genau genug. Und mit manchmal meine ich immer.
-
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.