Autor Beitrag
MatthiasR.
Hält's aus hier
Beiträge: 1



BeitragVerfasst: So 16.03.08 17:03 
Wunderschönen Sonntag Allerseits,
ich beschäftige mich erst seit kurzem mit Delphi, von daher bin ich über jeden Tipp dankbar.
Undzwar bin ich grade dabei mir einen eigenen Taschenrechenr zu programmieren (ja, aus Eigeninteresse :wink: ). Folgende Funktionen bietet er bis jetzt, welche auch funktionieren:

Funktionen:
-Addition
-Subtraktion
-Multiplikation
-Divison
-Quadratwurzel: x^(1/2)
-Beliebige Wurzel: x^(1/y)
-Quadrierung: x^2
-x^3
-x^y
-Kehrwert: 1/x
-Natürlicher Logarithmus: ln(x)
-Logarithmus zur Basis 10: lg
-Sinus: sin(x)
-Cosinus: cos(x)
-Tangens: tan(x)
-Fakultät: x!

Des Weiteren habe ich die Konstanten Pi, die eulersche Zahl und den Goldenen Schnitt (Phi) als Konstanten hinzugefügt (nicht wirklich von Beudeutung).
Widmen wir uns nun meinem Problem:

Mein Taschenrechner macht folgendes, sobald ich auf den Sin(x) Button klicke.
Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure Tcalc.btsinClick(Sender: TObject);
begin
if edaus.Text <> ''
 then begin
      if cbDEG.checked
       then begin
        edaus.Text := FloatToStr(Sin(DegToRad(StrToFloat(edaus.Text))));
       end
       else if cbRAD.Checked
             then begin
              edaus.Text := FloatToStr(Sin(StrToFloat(edaus.Text)));
             end;
 end;
end;


Die Ausgaben, die ich in beiden Fällen erhalte (RAD bzw DEG) Stimmen.


Beim Arcsin sieht das jedoch ganz anders aus:
Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure Tcalc.btarcsinClick(Sender: TObject);
begin
if ABS(StrToFloat(edaus.Text)) <= 1
 then begin
      if cbDEG.checked
       then begin
        edaus.Text := FloatToStr(ArcSin(DegToRad(StrToFloat(edaus.Text))));
       end
       else if cbRAD.Checked
             then begin
              edaus.Text := FloatToStr(ArcSin(StrToFloat(edaus.Text)));
             end
 end
 else if (cbDEG.checked) or (cbRAD.checked)
       then begin
        edaus.Text := 'Ungütliger Wert: |x| <= 1';
       end;
end;


Das ist meine Berechnung für den Arcsin. Sie kann jedoch nicht stimmen da
X = Arcsin(sin(x))
gilt. Leider trifft diese Formel bei meinem Taschenrechner nicht zu. Folglich gehe ich davon aus, dass ich einen Fehler in der Arcsin Berechnung gemacht habe. Jedoch weiß ich leider nicht wo.

Ich bin für heden Tipp und jede Anmerkung dankbar
MfG
Matthias

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 16.03.08 18:27 
Du übergibst ArcSin den normalen Wert (zwischen -1 und 1) und die Funktion liefert dir dann einen Wert im Bogenmaß. Also:

RadToDeg(ArcSin(0.5)) = 30
X := RadToDeg(ArcSin(Sin(DegToRad(30))));
X := ArcSin(Sin(0.5));

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)