AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ceil Floor Log10 - Rundungsfehler, Überlauf o.ä. (?)
Thema durchsuchen
Ansicht
Themen-Optionen

Ceil Floor Log10 - Rundungsfehler, Überlauf o.ä. (?)

Ein Thema von hansmaad · begonnen am 18. Mai 2011 · letzter Beitrag vom 19. Mai 2011
 
gammatester

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

AW: Ceil Floor Log10 - Rundungsfehler, Überlauf o.ä. (?)

  Alt 18. Mai 2011, 21:21
Deine Idee ist zwar ein Disaster-Konzept, weil Differenzen von zwei Sprungfunktionen geradezu danach schreien, solche Effekte hervorzurufen; in Deinem Fall für Werte, die keine Zehnerpotenzen sind.

Interessant ist jedoch an Deinem Problem folgendes:

Es sieht so aus als wenn Du auf eine Inkonsistenz der FPU gestoßen bist. log10(x) wird im Prinzip als log10(2)*log2(x) berechnet. Wenn man das so programmiert, verschwindet auch Dein Problem. Etwas mehr Hintergrund-Info nach einiger Knobelei:
Delphi-Quellcode:
{---------------------------------------------------------------------------}
function log10(x: extended): extended; assembler;
  {-Return base 10 logarithm of x}
asm
  fldlg2
  fld [x]
  fyl2x
  fwait
end;

{---------------------------------------------------------------------------}
function log10a(x: extended): extended; assembler;
  {-Return base 10 logarithm of x}
asm
  fld1
  fld [x]
  fyl2x
  fldlg2
  fmul
end;
Die beiden Funktionen sollten eigentlich dieselben Ergebisse bringen, log10(x) rechnet log10(2) * log2(x) via FPU-Befehl fyl2x und log10a(x) rechnet (1*log2(x)) * log10(2). Für x=1e7 rechnet log10a richtig und log10 (die Delphi-Implementation) um 1 ulp zu hoch (die $-Zahlen sind die internen extended Darstellungen via AMath und MPArith)

Code:
log10a(1e7) = $4001E000000000000000 = 7.0
log10(1e7) = $4001E000000000000001 = 7.00000000000000000043368086899420177360298112034797668457031
Gruß Gammatester
  Mit Zitat antworten Zitat
 


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 00:22 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 by Thomas Breitkreuz