Winkelfunktionen/ Kommastellen < MathCad < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 19:23 Do 31.07.2008 | Autor: | Plumps |
Hallo zusammen,
ich versuche eine While schleife durch den vergleich zweier Winkelfunktionen abzubrechen!
Also: mach so lang wie sin(45) ungleich sin(x*45) ist
nun höhrt die schleife aber nicht auf, sollte ja für x =3 anhalten!
denn sin(45) = sin(135)
in MathCAD ist nun die 17. Kommastelle unterschiedlich!
Was kann ich da tun, kann ich die Kommastellen die er berechnet reduzieren oder weiß jemand warum der SIN nicht gleich dem SIN ist?
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:http://ww3.cad.de/foren/ubb/Forum479/HTML/000184.shtml
|
|
|
|
Hallo Plumps,
ich kenne mich zwar nicht mit MathCad aus, aber in derartigen Programmen werden, nach meiner Erfahrung, die trigonometrischen Funktionen (Sin, Cos, Tan, ArcSin, ...) über ihre Taylorentwicklung berechnet. Da man diese nicht unendlich genau ausrechnen kann (in endlicher Zeit), wirst du immer einen Fehler haben. Und in dieser Entwicklung hast du dann eben einen Unterschied zwischen Sin(45) und Sin(135).
Was du jetzt machen könntest, ist, dass du versuchst die Kommastellen abzuschneiden. Also dass du dich auf zum Beispiel 10 Stellen verlässt, und dann den Rest abschneidest (mir fallen hierzu Worte wie Truncate ein).
Wie gesagt, ich hab von mathcad keine Ahnung
Ich hoffe aber, dass ich dir weiterhelfen konnte...
MfG Sunny
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 20:11 Do 31.07.2008 | Autor: | abakus |
> Hallo Plumps,
>
> ich kenne mich zwar nicht mit MathCad aus, aber in
> derartigen Programmen werden, nach meiner Erfahrung, die
> trigonometrischen Funktionen (Sin, Cos, Tan, ArcSin, ...)
> über ihre Taylorentwicklung berechnet. Da man diese nicht
> unendlich genau ausrechnen kann (in endlicher Zeit), wirst
> du immer einen Fehler haben. Und in dieser Entwicklung hast
> du dann eben einen Unterschied zwischen Sin(45) und
> Sin(135).
>
> Was du jetzt machen könntest, ist, dass du versuchst die
> Kommastellen abzuschneiden. Also dass du dich auf zum
> Beispiel 10 Stellen verlässt, und dann den Rest
> abschneidest (mir fallen hierzu Worte wie Truncate ein).
Sollte es eine solche Funktion zu Abschneiden der Kommastellen nicht geben, dann wähle als Abbruchbedingung so etwas wie
[mm] |sin(3x)-sin(x)|\le [/mm] 0,00000000000001
(Beträge wird das Programm wohl kennen, oder?)
Gruß Abakus
>
> Wie gesagt, ich hab von mathcad keine Ahnung
>
> Ich hoffe aber, dass ich dir weiterhelfen konnte...
>
> MfG Sunny
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:21 Do 31.07.2008 | Autor: | uliweil |
Hallo Plumps,
abgesehen von dem Argument von Sunny ist Gleitkommaarithmetik immer rundungsfehlerbehaftet (natürlich in Abhängigkeit der Anzahl der benutzen Ziffern der Arthmetik).
Als Endeabfrage für Deine Whileschleife benutze den relativen Fehler, also
abs((sin(45) - sin(x*45))/sin(45)) <= gewünschte relative Genauigkeit, z.B. [mm] 10^{-16} [/mm] oder was die Arthmetik sonst hergibt.
Gruß
Uli
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:26 Fr 01.08.2008 | Autor: | Plumps |
alles klar, ich habe eine rRnden-Funktion gefunden!
Danke für die Anregungen!
|
|
|
|