Meine arctan-Methode geht nicht

Raumsonde

Aktives Mitglied
In Java ME gibt es ja keine arctan-Funktion.

Habe versucht, meine eigene zu schreiben nach dem, was hier:
Inverse trigonometric functions - Wikipedia, the free encyclopedia
unter "Continued fraction for arctangent" steht.

Mein Versuch:
Code:
public class TestKlasse {
	static double arctan(double z)
	{
	 if ( z==0 ) return 0;
         double Nenner6teEbene;
	 double Nenner5teEbene;
	 double Nenner4teEbene;
	 double Nenner3teEbene;
	 double Nenner2teEbene;
	 double Nenner1teEbene;
	 double Endergebnis;
	 double z_quadrat;
	 
	 //continued fraction for arctangent
	 z_quadrat = z*z;
	 Nenner6teEbene = 11 + (36*z_quadrat)/13;
	 Nenner5teEbene = 9  + (25*z_quadrat)/Nenner6teEbene;
	 Nenner4teEbene = 7  + (16*z_quadrat)/Nenner5teEbene;
	 Nenner3teEbene = 5  + ( 9*z_quadrat)/Nenner4teEbene;
	 Nenner2teEbene = 3  + ( 4*z_quadrat)/Nenner3teEbene;
	 Nenner1teEbene = 1  + ( 1*z_quadrat)/Nenner2teEbene;
	 Endergebnis    = 0  + (   z        )/Nenner1teEbene;
	 
	 return Endergebnis;	
	};

Doch die Ausgabe:
Code:
	public static void main (String argv[])
	  {
	     //System.out.println("Hello World!");
	     for (int i=10;i<=100;i=i+10)
	     {
	      System.out.println("arctan von "+i+":  "+arctan(i));	 
	     }
	     System.out.println("arctan von 0.5:  "+arctan(0.5));
	  }

liefert:

Code:
arctan von 10:  2.372521980541964
arctan von 20:  4.3262544536273175
arctan von 30:  6.367850287305142
arctan von 40:  8.4332129693478
arctan von 50:  10.508270843292705
arctan von 60:  12.588215645729225
arctan von 70:  14.670964602845421
arctan von 80:  16.7554704191579
arctan von 90:  18.841149288535433
arctan von 100:  20.927650155827695
arctan von 0.5:  0.4636476102024936

Wenn ich das mit den Ergebnissen meines Taschenrechners vergleiche,
hat das wenig mit der Realität zu tun.

Wo liegt der Fehler in meinem Code?
 

Marco13

Top Contributor
In Radians rechnen
Code:
         for (int i=10;i<=100;i=i+10)
         {
          System.out.println("arctan von "+i+":  "+arctan(Math.toRadians(i))+" math "+Math.atan(Math.toRadians(i)));
         }
 

eRaaaa

Top Contributor
Gibts glaube ich in Me auch nicht...da gibt`s soweit ich weiß nur abs,max und min
-->
Java:
	static final double PI = 3.14159265358979323846;

	static double toRadians(double d){
		return d / 180.0 * PI;
	}
 
Zuletzt bearbeitet:

Raumsonde

Aktives Mitglied
(@Raaaa Bei mir ist toRadians in ME enthalten.)

Für Werte von z zwischen 0 und 1 funktioniert meine Funktion/Methode dahingehend, dass sie
den Tangens berechnet (statt den Arcustangens, den ich haben will).

Meine Ausgabe habe ich mit toRadians angepaßt:
Java:
	public static void main (String argv[])
	  {
	     double t = 0;
		 for (int i=0;i<=10;i=i+1)
	     {
 	      //liefert Tangens statt ArcusTangens, z muß 0<=z<=1 sein:
	      System.out.println("arctan von "+t+":  "+arctan(Math.toRadians(t)));
	      t = t + 0.1;
	     }
	  }

Ausgabe:

Code:
arctan von 0.0:  0.0
arctan von 0.1:  0.0017453274798052572
arctan von 0.2:  0.0034906443265538163
arctan von 0.30000000000000004:  0.005235939907577654
arctan von 0.4:  0.006981203590986054
arctan von 0.5:  0.008726424746054185
arctan von 0.6:  0.010471592743611546
arctan von 0.7:  0.012216696956430302
arctan von 0.7999999999999999:  0.013961726759613411
arctan von 0.8999999999999999:  0.01570667153098255
arctan von 0.9999999999999999:  0.01745152065146582

Das ist aber jeweils der Tangens.
Was muß ich noch ändern, damit ich den Arcustangens bekomme?
 
Zuletzt bearbeitet:

Raumsonde

Aktives Mitglied
Ich habe jetzt mal die Methode static public double atan(double x) von
Calling atan function on Blackberry 4.2 JDE - Stack Overflow
in mein Programm übernommen.

Allerdings liefert meine Ausgabe wieder den Tangens statt den Arcustangens!:

Java:
double t = 0;
for (int i=0;i<=10;i=i+1)
	     {
	      //liefert Tangens statt ArcusTangens, aber z muß 0<=z<=1 sein:
	      System.out.println("arctan von "+t+":  "+atan(Math.toRadians(t))); //atan übernommen aus URL (siehe Text)
	      t = t + 0.1;
	     }

Ist mein Code und auch der übernommene falsch oder habe ich irgendeinen Denkfehler?
 

Raumsonde

Aktives Mitglied
Da ich meine Methode vorläufig mit Java SE teste, konnte ich auch testen,
was bei

Java:
System.out.println("arctan von "+t+":  "+ Math.atan(Math.toRadians(t)));

herauskommt.

Beispiel: t=0,5 -> Math.atan(Math.toRadians(t)) ergibt 0.008726424746054184.
Das ergibt auch mein Programm.
Mein "richtiger" Taschenrechner ergibt aber bei 0.5 (tan hoch -1) -> 26.56505118
und der Windowstaschenrechner "wissenschaftliche Ansicht" ergibt bei 0.5
Häkchen bei Feld "Inv" gemacht und dann "tan" gedrückt: 26,565051177077989351572193720453.

Ich glaube mein Denkfehler lag darin, dass ich dachte, arctan wäre tan hoch -1 bzw. der inverse Tangens,
aber Arcustangens doch etwas anderes ist.

Da mein Programm dasselbe ergibt wie Math.atan (aus Java SE), gehe ich davon aus, das es richtig funktioniert
und ich nur falsche Funktionen zum Vergleich herangezogen habe.
Danke für die Hilfe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Android Wie bekomme ich Traffic auf meine App? Android & Cross-Platform Mobile Apps 4
A Wie kann ich meine app auf meinem Smartphone zum laufen bekommen Android & Cross-Platform Mobile Apps 8
U Seit heute morgen läuft meine OpenGL app nicht mehr Android & Cross-Platform Mobile Apps 2
S Wie teste ich meine Bluetooth Anwendung Android & Cross-Platform Mobile Apps 4
CT9288 Methode von Fragment durch Activity rufen scheitert Android & Cross-Platform Mobile Apps 7
L Regelmäßig eine Methode im Hintergund ausführen Android & Cross-Platform Mobile Apps 1
K Methode wird nicht gefunden Android & Cross-Platform Mobile Apps 1
L Android Methode funktioniert nicht unter Android Android & Cross-Platform Mobile Apps 3
R Android App mit Datenbankeinträgen und Math.random() Methode programmieren Android & Cross-Platform Mobile Apps 0
J Android button mithilfe einer Methode automatisch erstellen Android & Cross-Platform Mobile Apps 6
Z Canvas onDraw() Variablen muss in der Methode initialisiert werden Android & Cross-Platform Mobile Apps 1
S Auf Methode zugreifen von anderen Klassen Android & Cross-Platform Mobile Apps 6
G Back-Button Methode überschreiben Android & Cross-Platform Mobile Apps 2
G eine Methode einer anderen Activity aufrufen Android & Cross-Platform Mobile Apps 9
P Android Sort Methode von ArrayAdapter überschreiben Android & Cross-Platform Mobile Apps 5
K Apps durchsuchen nach verwendeter Methode Android & Cross-Platform Mobile Apps 4
F Android Fehlermeldung bei onClick-Methode Android & Cross-Platform Mobile Apps 2
U Probleme mit der drawString Methode bei Canvas Android & Cross-Platform Mobile Apps 8

Ähnliche Java Themen

Neue Themen


Oben