AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C# kann nicht rechnen oder bin ich zu blöd?¿?
Thema durchsuchen
Ansicht
Themen-Optionen

C# kann nicht rechnen oder bin ich zu blöd?¿?

Ein Thema von Phoenix · begonnen am 23. Mai 2008 · letzter Beitrag vom 27. Mai 2008
Antwort Antwort
Seite 2 von 2     12   
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 23. Mai 2008, 14:12
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
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#12

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 26. Mai 2008, 13:56
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#13

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 26. Mai 2008, 14:50
Zitat von alzaimar:
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...
Das Rechnen ist in der Tat meist nicht problematisch, sondern der naive Umgang mit Vergleiche. Wie oft kommt es nicht vor, daß sich Anwender wundern, weshalb folgendes Programm hängt, zB (in Pascal)

Delphi-Quellcode:
var
  x: extended;
begin
  x := 0.0;
  repeat
    x := x+0.1;
    {Mach was mit x}
  until x=1.0;
end;
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.

Gammatester
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#14

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 26. Mai 2008, 15:01
Zitat von gammatester:
Sinnvollerweise sollten Compiler Warnungen oder Hinweise ausgeben, wenn Fließkommaausdrücke auf Gleichheit getestet werden.
DAS sollte mal auf die Feature-Liste von CodeGear.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#15

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 26. Mai 2008, 15:14
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
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#16

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 26. Mai 2008, 19:05
Zitat von Medium:
alzaimar, du wiedersprichst dir hier leider selbst.
Niemals! Ich habe immer Recht! Ausgenommen, wenn ich mal nicht Recht habe...

Zitat von Medium:
Ein Typ, der bis zu einer gewissen Stelle genau ist, ist insgesamt gesehen immer noch ungenau.
Meinst Du das persönlich ("Der Typ") ? Im Ernst, ich schrieb "nicht ungenau, sondern auf xxx Stellen genau". Das ist so ähnlich wie 'Glass halb voll oder halb leer'.

Zitat von Medium:
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.
Absolut korrekt, nur ist das keine Eigenheit der floats, sondern der Limitierung auf X signifikante Stellen. Auch bei BCD schaukelt sich der Fehler hoch.
Zitat von Medium:
Nochmal: ... aber ab und an, ..., wirds halt eng.
Jupp. "Normalisieren" heißt das Zauberwort.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 26. Mai 2008, 19:08
Zitat:
Niemals! Ich habe immer Recht!
§1: alzaimar hat immer Recht
$2: Sollte ewr mal nichr Recht haben, gilt §1

Zngenauigkeiten sind OK, wenn man weiss wie groß diese sind.
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 26. Mai 2008, 22:17
@mkinzler: So ist es richtig, außer wenn es nicht richtig ist, aber selbst dann ist es nicht falsch.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#19

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 26. Mai 2008, 22:25
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
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#20

Re: C# kann nicht rechnen oder bin ich zu blöd?¿?

  Alt 27. Mai 2008, 01:32
Zitat von alzaimar:
Niemals! Ich habe immer Recht! Ausgenommen, wenn ich mal nicht Recht habe...
Man muss nur scharf aufpassen, dass man nicht so weit Recht hat, dass man schon fast wieder Link hat... ...glaub ich =)

Zitat von alzaimar:
Absolut korrekt, nur ist das keine Eigenheit der floats, sondern der Limitierung auf X signifikante Stellen. Auch bei BCD schaukelt sich der Fehler hoch.
Aja okay, wenn du bei "Floats" an das Konzept an sich denkst, geb ich dir vollkommen Recht. Ich denk immer gleich an die bestehenden Datentypen - da liegt der Hase nebem dem Hund im Pfeffer begraben.

Zitat von alzaimar:
Jupp. "Normalisieren" heißt das Zauberwort.
Was is heutzutage schon noch normal


Okay, puh. nur 2/3 OT. Muss reichen für heute!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz