![]() |
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
Kommt immer darauf an, wie viele Rechnungen man schon angestellt hat, da sich die Ungenauigkeiten nach mehreren vielen Operationen durchaus auch schon im Ganzzahlanteil bemerkbar machen können. Dass ein Mal Zuweisen und dann Anzeigen nicht dazu führt ist klar, aber wenn man viel rechnet kann es eng werden. Ist allerdings im höchsten Maße vom Einzelfall abhängig, und sollte im kleinsten Teil der üblichen Anwendungen überhaupt ins Gewicht fallen. Man muss es nur im Hinterkopf haben.
Edit: Hi Red-Box :) |
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
Immer wieder das Gleiche: Floating point ist nicht ungenau, sondern auf 8-20 Stellen (je nach Datentyp) *genau*. Man kann beruhigt damit rechnen, es gibt eigentlich keinen praktischen Fall, bei dem die Genauigkeit (von Extended) nicht ausreicht. Bis sich die 20.te Stelle zu einer relevanten 7.-8. Stelle hochschaukelt (Das sind ist ein Faktor von 10^12 !!). vergeht so Einiges.
Ich finde es nicht richtig, wenn diese Unwahrheit (Floats sind ungenau) hier immer wieder verbreitet wird. Richtig wird die Aussage damit auch nicht. Ich verwende Floats seit 25 Jahren in numerischen Verfahren (Messdatenerfassung, Auswertung, Iteration, Integration etc.) und hatte noch *nie* Probleme damit. Oh, doch, 1x: Es ging um Nullstellenberechnung (Newton) und da kann eine sehr große durch eine sehr kleine Zahl geteilt werden. Da würde aber auch BCD (der angebliche Heilsbringer) alle Viere von sich strecken. |
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
Zitat:
Delphi-Quellcode:
Und die Ungenauigkeit ist selbstverständlich da (Größenordnung 1e-7, 1e-16 etc). Sinnvollerweise sollten Compiler Warnungen oder Hinweise ausgeben, wenn Fließkommaausdrücke auf Gleichheit getestet werden.
var
x: extended; begin x := 0.0; repeat x := x+0.1; {Mach was mit x} until x=1.0; end; Gammatester |
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
Zitat:
|
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
alzaimar, du wiedersprichst dir hier leider selbst. Ein Typ, der bis zu einer gewissen Stelle genau ist, ist insgesamt gesehen immer noch ungenau. Oder sagen wir besser: Ungenau genug, um damit wenn man es nicht im Hinterkopf hat, ganz kräftig auf die Nase zu fallen. Dass Fälle, in denen sich die Abweichungen relevant äussern selten sind, ist nicht genug, um die gesamte Aussage zu falsifizieren. Das macht den Datentyp aber nicht schlecht oder unbrauchbar - hier will keiner die Float-Apokalypse hervorsagen.
Man kann sicherlich getrost alle Kundenrechnungen der letzten 10 Jahre mit Doubles aufsummieren*, und die 2. Nachkommastelle ist akkurat, aber gerade wenn wir in den Bereich physikalischer Simulationen kommen, oder analytischer Mathematik, wirst du gelegentlich nicht drum herum kommen manchen Algorithmus bewusst darauf hin zu entwickeln, dass sich diese Fehler in Grenzen halten. * Obwohl, aus gutem Grund, hier idR Integer genommen werden ;) Nochmal: Die "Otto-Normal-Anwendung" merkt da vermutlich nie was von, besonders wenn nur simple Operationen wie + und - auftauchen, und sich die betrachteten Werte in einem genügend kleinen Intervall um 0 bewegen. Auch komplexere Dinge sind noch locker drin, aber ab und an, abhängig vom Algo und den Daten, wirds halt eng. Jürgen will hier sicherlich keine "Benutzt nie Floats!"-Kampagne starten, aber so manche Frage (besonders eben die Prüfung auf Gleichheit) würde evtl. nicht hier im Forum landen, wenn man sich dieses Umstandes nur bewusst ist. Edith findet die Idee mit der Warnung auch spitzenklasse :) |
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
Zitat:
$2: Sollte ewr mal nichr Recht haben, gilt §1 :zwinker: Zngenauigkeiten sind OK, wenn man weiss wie groß diese sind. |
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
@mkinzler: So ist es richtig, außer wenn es nicht richtig ist, aber selbst dann ist es nicht falsch.
|
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
kommt halt immer auf den anwendungsfall an, welchen datentyp man verwendet. im kaufmännischen bereich, gibts nicht viel mehr als + und - und wenn es doch mal mehr wird, dann müssen beide seiten sowieso nicht zusammen passen.
real's sind schon ok. aber nicht für jeden anwendungsfall. genaus, kann man BCD für die meisten probleme vergessen, wo man mit formeln jonglieren muss... also, beide kampagnen kann man vergessen. man muss nur unterscheiden und bedarfsgerecht den richtigen datentyp auswählen :-) btw: das mit dem compiler hinweis, wär mal was :-) |
Re: C# kann nicht rechnen oder bin ich zu blöd?¿?
Zitat:
Zitat:
Zitat:
Okay, puh. nur 2/3 OT. Muss reichen für heute! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz