AGB  ·  Datenschutz  ·  Impressum  







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

Sinus-Problem

Ein Thema von Socke_SG · begonnen am 13. Okt 2009 · letzter Beitrag vom 13. Okt 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.544 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Sinus-Problem

  Alt 13. Okt 2009, 18:32
Zitat von Wolfgang Mix:
Mach' Dich 'mal bitte über Frequenz und Periodendauer schlau.
[OT] Das waren doch so 4 bis 5 Tage, oder nicht? (Sry, es war stärker als ich ^^) [/OT]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#12

Re: Sinus-Problem

  Alt 13. Okt 2009, 18:38
Die fachliche Antwort lautet:

Bei 50 Hertz sind es 20 Millisekunden, also weeeesentlich weniger als Du dachtest

Topic on


Gruß

Wolfgang
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Sinus-Problem

  Alt 13. Okt 2009, 18:43
Zitat von Wolfgang Mix:
Integerwerte machen bei Sinus/Cosinus sowieso keinen Sinn, denn Minimalwerte sind 0
und Maximalwerte sind 1.
[Edit] Alle wirklich interessanten Werte liegen dazwischen [/Edit]
Meine lagen immer zwischen -1 und +1
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#14

Re: Sinus-Problem

  Alt 13. Okt 2009, 18:46
Sorry, hast natürlich recht, meine bisher auch

Gruß

Wolfgang

[Edit] Schnell korrigiert, damit es sonst keiner merkt [/Edit]
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
gammatester

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

Re: Sinus-Problem

  Alt 13. Okt 2009, 22:47
Delphi und Rechengenauigkeit: Das ist leider eine sehr traurige Geschichte. Hier für sin/cos: Die Güte der Implementation nimmt mit den Versionsnummern monoton ab. Für große Argumente wie sin(1e19) signalisiert die FPU ein 'Out of range'. Borland Pascal 7 wirft noch ein RTE 207 (wie's eigentlich sein sollte), bis Delphi 7 wird gecheckt, ob dieser Fall eintritt; dann sin := 0 und cos := 0 gesetzt,

Code:

        FSIN
        FNSTSW AX
        SAHF
        JP     @@outOfRange
        RET
@@outOfRange:
        FSTP   st(0)  { for now, return 0. result would      }
        FLDZ           { have little significance anyway      }
Irgendwie scheint man bei Borland/Codegier zu hoffen, daß trotzdem noch sin^2 + cos^2 = 1 gilt. Delphi 10 und höher treiben es noch wilder in dem sie (wie schon gemerkt) einfach sin=1e19, cos=1e19 liefern und noch mehr hoffen (2*1e38 = 1 ??)

Natürlich ist sin(1e19) = sin(1e19 mod 2*pi). Das Problem ist also die Reduktion modulo 2*pi. Für sin(1e19) kann man diese Reduktion zB mit double-double Arithmetik angehen. Oder man benutzt gleich Multipräzisionsarithmetik für alle Funktionen.

Mein Delphi-Implementation MPArith rechnet wie folgt:

Code:
Test of MPArith V1.13.03 (15/16 bit) [mp_rcalc]  (c) W.Ehrhardt 2008-2009
Karatsuba cutoffs: mul/sqr = 64/96
Toom-3, BZ cutoffs: mul/sqr = 128/192, div = 96
Type "?<enter>" to get some info about commands, "\q" or "quit" to end.
Current bit precision = 240, decimal precision = 72.2

[D]:=> prec 128
New bit precision = 128, decimal precision = 38.5
[D]:=> x=sin(1e19)
X = -9.2706316604865038523412228966493597547E-1
Time = 0.275 ms
[D]:=> y=cos(1e19)
Y = -3.7490516955071783015322054600961073097E-1
Time = 0.214 ms
[D]:=> x*x + y*y - 1
Result = 0.0000000000000000000000000000000000000
Time = 0.050 ms
@Socke_SG: Wenn Du also nicht gerade Zillionen Werte ausrechnen mußt, wär das doch vielleicht was für Dich?

Gruß Gammatester
  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 04:59 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