vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Problem mit Sprung in der Winkelfunktion 
Autor: Gecko
Datum: 02.10.17 12:48

Hallo Forum,

seit langem hab ich mal wieder mein VB6.0 rausgekramt und hab jetzt bereits ein Problem bei den Winkelfunktionen.

Vom Prinzip ich will mit einem Bogenmaß den Faktor für Berechnung des Katheten aus der Hypothenuse ausrechnen. Hierzu sieht der Cos ganz gut aus. Mein Problem sind nur die Nulldurchgänge bei 0,5 * pi und 1,5 * pi. In diesem Bereich macht der Cosinus irgendwelche Sprünge anstatt einen plausiblen Wert auszugeben 0.

Private Sub CmdTest_Click()
 
    'Winkel = Atn(Gegenkathede / Ankathede) [Umkehrfunktion von Tangens]
    'Ankathede = Hypotenuse * Cos(Bogenmaß)
    'Bogenmaß = Winkel[Grad] * (pi) / 180
 
    Cos1.Caption = Cos(0)
    Cos2.Caption = Cos(0.1 * pi)
    Cos3.Caption = Cos(0.2 * pi)
    Cos4.Caption = Cos(0.3 * pi)
    Cos5.Caption = Cos(0.4 * pi)
 
    Cos6.Caption = Cos(0.5 * pi)
 
    Cos7.Caption = Cos(0.6 * pi)
    Cos8.Caption = Cos(0.7 * pi)
    Cos9.Caption = Cos(0.8 * pi)
    Cos10.Caption = Cos(0.9 * pi)
    Cos11.Caption = Cos(1 * pi)
    Cos12.Caption = Cos(1.1 * pi)
    Cos13.Caption = Cos(1.2 * pi)
    Cos14.Caption = Cos(1.3 * pi)
    Cos15.Caption = Cos(1.4 * pi)
 
    Cos16.Caption = Cos(1.5 * pi)
 
    Cos17.Caption = Cos(1.6 * pi)
    Cos18.Caption = Cos(1.7 * pi)
    Cos19.Caption = Cos(1.8 * pi)
    Cos20.Caption = Cos(1.9 * pi)
    Cos21.Caption = Cos(2 * pi)
 
End Sub
pi ist als Constante definiert:
Const pi As Double = 3.14159265358979
Hier die Ergebnisse:

Cos1 = 1
Cos2 = 0,95
Cos3 = 0,81
Cos4 = 0,59
Cos5 = 0,31

Cos6 = 1,62 ???

Cos7 = -0,31
Cos8 = -0,59
Cos9 = -0,81
Cos10 = -0,95
Cos11 = -1
Cos12 = -0,95
Cos13 = -0,81
Cos14 = -0,59
Cos15 = -0,31

Cos16 = -4,62 ???

Cos17 = 0,31
Cos18 = 0,59
Cos19 = 0,8
Cos20 = 0,95
Cos21 = 1

Den Fehler bekomme ich auch bei einem Wert minimal neben dem Nulldurchgang.

Kann mir wer auf die Sprünge helfen, was ich übersehen hab, dass es an den Nulldurchgängen vom Cosinus zu solchen Ausschlägen kommt? Beim Sinus hab ich das gleiche Problem bei pi und 2 * pi.

Schoneinmal Danke für die Antworten.

Grüße
Gecko

Beitrag wurde zuletzt am 02.10.17 um 12:50:31 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Sprung in der Winkelfunktion 
Autor: Manfred X
Datum: 02.10.17 13:34

Hallo!

Ein numerischer Wert ist keine Zeichenfolge!
Verwende die Umwandlungsfunktion für die
Zuweisung auf die Caption-Eigenschaft: CStr.

Double-Werte nahe 0 werden mit begrenzter Genauigkeit
(15 Stellen) berechnet und in Exponentialdarstellung
angegeben. (Die Zahl pi hat unendlich viele Stellen.)
VB: 0.5 * pi = 1,61554255216634E-15

Du kannst auch die Round-Methode einsetzen, um eine reduzierte
Stellenzahl zu erhalten. Das Ergebnis ist dann gerundet = 0.
Const pi As Double = 3.14159265358979
Dim cos_str As String
 
cos_str = CStr(Round(Cos(0.5 * pi), 8))


Beitrag wurde zuletzt am 02.10.17 um 13:37:33 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Sprung in der Winkelfunktion 
Autor: Gecko
Datum: 02.10.17 13:44

Ahhhh vielen Dank für die Erklärung mit dem Umwandeln.

Wichtig war auch noch der Hinweis mit dem Runden. Dadurch hab ich erst gemerkt, dass der Sprung gar kein Ausreiser ist sondern hinter der ewig langen Zahlenfolge e-15 steht, was nicht in mein angezeigtes Label gepasst hat.

Vielen Dank.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Sprung in der Winkelfunktion 
Autor: Manfred X
Datum: 03.10.17 10:00

Unter Verwendung einer Listbox (List1) und der Format-Methode
läßt sich Dein obiger Code geringfügig kürzen:
Const pi As Double = 3.14159265358979
 
Dim i As Double
For i = 0# To 2.01 Step 0.1
   List1.AddItem Format(cos(i * pi), "0.00000")
Next i


Beitrag wurde zuletzt am 03.10.17 um 10:12:22 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Problem mit Sprung in der Winkelfunktion 
Autor: Franki
Datum: 17.10.17 04:35

Hallo,

ja das mit dem Runden und der Mathematik ist so eine Sache.

Teile mal eine Kuchen auf drei Leute auf, ok jeder bekommt ein Drittel vom Kuchen. Soweit so gut aber wenn man dann den Taschenrichner anwirft, dann sieht das anders aus.

Mathematisch gesehen sin drei Drittel wieder 1 aber wenn man 1 durch 3 teilt, dann sind das Konmmastellen also 0.33... wenn man die wieder multipliziert dann kommt ...,999 raus und eben nicht 1.

Wie genau deine Berechnungen sein müssen weiß ich nicht, aber das Rundungsproblem ist immer vorhanden, du kannst auch nicht genau eine Liter Kraftstoff an einer Tankstele tanken weil da der ,9 preis nicht bezalbar ist.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel