Mathematik für Computerbegeisterte

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Mathematik für Computerbegeisterte

Beitrag von Xin » Mi Mär 07, 2012 12:21 pm

Nur mal so zum drüber nachdenken:

Man nehme ein float und weise ihm den teuflichen Wert 666,6 zu.
Anschließend ziehe man 666,5 ab und multipliziere das Ergebnis mit 10000.

Welches Ergebnis kommt raus?
(Nicht programmieren, nur drüber nachdenken und das Ergebnis unkommentiert posten - erst dann programmieren, wenn man seinen Gedanken nicht traut.)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Mathematik für Computerbegeisterte

Beitrag von cloidnerux » Mi Mär 07, 2012 12:31 pm

1000
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
bbbl
Beiträge: 80
Registriert: So Jul 19, 2009 12:04 am

Re: Mathematik für Computerbegeisterte

Beitrag von bbbl » Mi Mär 07, 2012 1:11 pm

1000,0

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Mathematik für Computerbegeisterte

Beitrag von fat-lobyte » Mi Mär 07, 2012 1:15 pm

1000.

Gehts hier um Mathematik oder um Floating-point ungenaugkeiten?
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Mathematik für Computerbegeisterte

Beitrag von cloidnerux » Mi Mär 07, 2012 1:25 pm

Gehts hier um Mathematik oder um Floating-point ungenaugkeiten?
Ich glaube es geht im um die Floatingpoint Ungenauigkeiten, sonst hätte er nicht auf float bestanden^^
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Mathematik für Computerbegeisterte

Beitrag von Xin » Mi Mär 07, 2012 1:32 pm

fat-lobyte hat geschrieben:Gehts hier um Mathematik oder um Floating-point ungenaugkeiten?
Wer sagt denn, dass Float-Point ungenau sind?
Sie tun doch genau das, was ihre Schöpfer von ihnen erwarten.

Und dieser Thread dient ja auch nur dazu, sich darüber Gedanken zu machen, welche Erwartungen man selbst hat.
cloidnerux hat geschrieben:Ich glaube es geht im um die Floatingpoint Ungenauigkeiten, sonst hätte er nicht auf float bestanden^^
Ich habe auch kein Problem, wenn Du double nimmst.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Mathematik für Computerbegeisterte

Beitrag von fat-lobyte » Mi Mär 07, 2012 1:35 pm

Xin hat geschrieben:Und dieser Thread dient ja auch nur dazu, sich darüber Gedanken zu machen, welche Erwartungen man selbst hat.
Achso. Dann möchte ich meine Antwort ändern auf:
Irgendwas zwischen 1005 und 995.

Aber wenn man zuerst die Differenz bilded und dann erst multipliziert, ist man selber schuld, wenn einem die Genauigkeit nicht passt.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Mathematik für Computerbegeisterte

Beitrag von Xin » Mi Mär 07, 2012 2:36 pm

fat-lobyte hat geschrieben:
Xin hat geschrieben:Und dieser Thread dient ja auch nur dazu, sich darüber Gedanken zu machen, welche Erwartungen man selbst hat.
Achso. Dann möchte ich meine Antwort ändern auf:
Irgendwas zwischen 1005 und 995.
Öhm.... ich hantiere hier mit recht kleinen Zahlen und Du schätzt den Fehler bei 0,5% Prozent?
Wieso nennt man Computer dann Rechner und nicht Verrechner? ^^
fat-lobyte hat geschrieben:Aber wenn man zuerst die Differenz bilded und dann erst multipliziert, ist man selber schuld, wenn einem die Genauigkeit nicht passt.
Was ist wohl schneller ausgerechnet?
(666.6 - 666.5) * 10000
oder
666.6 * 10000 - 666.5 * 10000?

Wenn man erst die Differenz bildet, dann spart man eine Multiplikation.
Erst zu subtrahieren zeigt also, dass man verstanden hat, wie man Rechnungen beschleunigt.
(Die Aussage ist so korrekt, auch wenn ihm eine gewisse Ironie in dem Zusammenhang beiliegt)

Und da der Rechenweg in der Regel nicht so einfach ist, wie hier, sondern man einen Wert einfach in eine Funktion packt, die z.B. für ihre Berechnungen erstmal Einheiten (*10000) umrechnet, aber halt die Differenz als Eingabewert hat, da bleibt einem nicht viel anderes über, als erst zu subtrahieren und dann das Ergebnis an die Funktion zu geben.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Mathematik für Computerbegeisterte

Beitrag von cloidnerux » Mi Mär 07, 2012 3:24 pm

Float: 0,0244% Abweichung
Double: 0% Abweichung
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Mathematik für Computerbegeisterte

Beitrag von fat-lobyte » Mi Mär 07, 2012 3:42 pm

Xin hat geschrieben:
fat-lobyte hat geschrieben:
Xin hat geschrieben:Und dieser Thread dient ja auch nur dazu, sich darüber Gedanken zu machen, welche Erwartungen man selbst hat.
Achso. Dann möchte ich meine Antwort ändern auf:
Irgendwas zwischen 1005 und 995.
Öhm.... ich hantiere hier mit recht kleinen Zahlen und Du schätzt den Fehler bei 0,5% Prozent?
Wieso nennt man Computer dann Rechner und nicht Verrechner? ^^
Ok, ist doch ein bisschen viel...
Xin hat geschrieben:
fat-lobyte hat geschrieben:Aber wenn man zuerst die Differenz bilded und dann erst multipliziert, ist man selber schuld, wenn einem die Genauigkeit nicht passt.
Was ist wohl schneller ausgerechnet?
(666.6 - 666.5) * 10000
oder
666.6 * 10000 - 666.5 * 10000?
Schneller schon, aber ich könnte mir vorstellen, dass letzteres numerisch stabiler ist. Wenn ich das richtig verstanden habe, geht genauigkeit dann verloren, wenn man mit Zahlen sehr unterschiedlicher Größenordnung rechnet. 0.1 und 10 000 klingt sehr unterschiedlich, 666,6 und 10 000 klingt weniger unterschiedlich. Wenn ich so drüber nachdenke, dann hab ich wahrscheinlich was missverstanden.
Haters gonna hate, potatoes gonna potate.

Antworten