AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Genauigkeit bei Gleitkomma-Berechnungen erhöhen

Ein Thema von Panthrax · begonnen am 20. Nov 2010 · letzter Beitrag vom 26. Nov 2010
Antwort Antwort
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#1

Genauigkeit bei Gleitkomma-Berechnungen erhöhen

  Alt 20. Nov 2010, 14:12
Hallo zusammen,

ich habe fertige Berechnungen mit Gleitkommawerten (Typ Extended), und möchte nun schauen, ob ich deren Genauigkeit irgendwie noch erhöhen kann.

Was kann ich tun, um die Genauigkeit von Gleitkomma-Berechnungen zu erhöhen?

Im Speziellen handelt es sich um die Rechnung mit Dichte- und Verteilungsfunktionen (Wahrscheinlichkeitsrechnung), so dass einige Werte eben auch sehr sehr klein sind; z.B.:

Φ ist die numerische Integration über die Standardnormalverteilung
Φ⁻¹ ist eine "intelligente" Zielwertsuche (= Umkehrfunktion)

Φ(-7) < 0.0000001
Φ⁻¹(Φ(-7)) = -15
|Φ(-7) - Φ(-15)| < 0.0000000000001

Das Problem hier ist etwa, dass die Funktionswerte von Φ(-7) und Φ(-15) nur sehr gering voneinander abweichen. Entsprechend schwer lässt sich mit der Umkehrfunktion Φ⁻¹ sagen, was das ursprüngliche Argument für Φ war.

Wer den Teil mit Beispiel nicht versteht, hat vielleicht doch ganz allgemein eine Idee, was man tun kann, um die Genauigkeit solcher Berechnungen zu erhöhen, oder (bis zu einer bestimmten Signifikanz) zu garantieren?
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Genauigkeit bei Gleitkomma-Berechnungen erhöhen

  Alt 20. Nov 2010, 14:14
Da die Geanuigkeit HW bedingt ist ( FPU) kann man diese nur darin umgehen, indem man Fixed-Point-Typen verwendet
Markus Kinzler
  Mit Zitat antworten Zitat
Medium

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

AW: Genauigkeit bei Gleitkomma-Berechnungen erhöhen

  Alt 20. Nov 2010, 14:54
Eine andere mögliche Sache wäre Skalierung, so dass hach hinten raus mehr "Luft" ist. Dies geht aber nicht mit allen Verfahren so problemlos, und bei der zurück skalierten Anzeige ists auch schon wieder Essig.
Die Genauigkeit ist fix, und lässt sich in keinster Weise beeinflussen. Die einzigen Wege sind eben nicht-native Typen via irgendwelcher BigNum-Libs (oder Eigenbau), oder aber die Berechnungen auf skalierte Bereiche anzupassen.
"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
mkinzler
(Moderator)

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

AW: Genauigkeit bei Gleitkomma-Berechnungen erhöhen

  Alt 20. Nov 2010, 15:00
Skalieren tut die FPU-Arithmetik doch eh
Markus Kinzler
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Genauigkeit bei Gleitkomma-Berechnungen erhöhen

  Alt 20. Nov 2010, 17:09
Man sollte möglichst versuchen, zu vermeiden, dass die Größenordnungen sich zu oft verändern bzw. auseinandergehen. Eine Gleitkommazahl ist ja ein Koeffizient (Mantisse) multipliziert mit der Basis hoch einem Exponenten. D.h. ob du 0.00001 und 0.00001 miteinander addierst, oder 100000 und 100000, sollte von der Genauigkeit her keinen Unterschied machen, da sich lediglich der Exponent ändert (vorausgesetzt die Basis wäre 10, i.d.R. ist es bei Computern in der Praxis 2). Wenn du jetzt aber z.B. 100000 und 0.00001 addierst, lässt sich die Zahl nicht mehr über einen Exponenten skalieren und es müssen irgendwie 10 Stellen in die Mantisse gequetscht werden. Wenn die Anzahl an Stellen die der sogenannten "signifikanten Stellen" des Gleitkommatyps überschreitet, wird der Wert ungenau.

Der Wikipedia-Artikel ist auch einen Blick wert.
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Genauigkeit bei Gleitkomma-Berechnungen erhöhen

  Alt 23. Nov 2010, 15:14
Okay. Ich sehe, es gibt nicht die wirklich einfachen Stellschrauben, wäre wohl auch zu einfach gewesen... In jedem Fall, danke!
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
gammatester

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

AW: Genauigkeit bei Gleitkomma-Berechnungen erhöhen

  Alt 23. Nov 2010, 15:38
Φ(-7) < 0.0000001
Φ⁻¹(Φ(-7)) = -15
|Φ(-7) - Φ(-15)| < 0.0000000000001

Das Problem hier ist etwa, dass die Funktionswerte von Φ(-7) und Φ(-15) nur sehr gering voneinander abweichen.
Ich verstehe Deine Frage nicht ganz. Meine Statistikroutinen rechnen Φ(-7) = 1.27981254388583500E-0012 und
Φ(-15) = 3.67096619931275E-0051. Die Werte unterscheiden sich doch gewaltig (relative Abweichung). Und auch Φ^{-1}(Φ(-7)) ist kein Problem: -7.00000000000000000E+0000. Berechnet via
Delphi-Quellcode:
y := normstd_cdfx(-7);
x := normstd_invx(y);
writeln(y:30);
writeln(normstd_cdfx(-15):30);
writeln(x:30);
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

AW: Genauigkeit bei Gleitkomma-Berechnungen erhöhen

  Alt 26. Nov 2010, 07:29
Ich denke, Frage und Antworten wichen bisher voneinander ab. Du hast den Wink in die richtige Richtung gegeben.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:05 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