| |
Visual-Basic EinsteigerProblem 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. | |
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. | |
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. | |
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. | |
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 | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|
|
|
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
|
|