• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Problem mit tan^-1, cos^-1, sin^-1

Markussm

Granny Smith
Registriert
20.12.14
Beiträge
14
Hi
ich habe ein Problem mit der Funktion tan^-1. Ich habe es mal mit *180 / M_PI veruscht.
Bekomme aber ein falschen Wert. Kann mir jemand Helfen.
Im Textfeld My4 habe ich z.B. 0,12 eingegeben.
Im Textfeld Beta4 habe ich z.B. 30 eingegeben.
Bei meiner programmierten Lösung kommt 7.118034 raus, es sollte aber 7.08 als Ergebnis raus kommen.

Code:
- (IBAction)BerechRhoSt4:(id)sender{
  NSString *entered1 = My4.text;
  NSString *entered2 = Beta4.text;
  NSNumberFormatter *formatter1 = [[NSNumberFormatter alloc] init];
  NSNumberFormatter *formatter2 = [[NSNumberFormatter alloc] init];
  [formatter1 setDecimalSeparator:@"."];
  [formatter1 setGroupingSeparator:@","];
  [formatter2 setDecimalSeparator:@"."];
  [formatter2 setGroupingSeparator:@","];
  NSNumber *number1 = [formatter1 numberFromString:entered1];
  NSNumber *number2 = [formatter2 numberFromString:entered2];
  if (number1 == nil || number2 == nil )
  {
  [formatter1 setDecimalSeparator:@","];
  [formatter1 setGroupingSeparator:@"."];
  number1 = [formatter1 numberFromString:entered1];
  [formatter2 setDecimalSeparator:@","];
  [formatter2 setGroupingSeparator:@"."];
  number2 = [formatter2 numberFromString:entered2];
  }
  float a = [number2 floatValue]/ 2;
  float c = cosf(a* M_PI / 180);
  float b = [number1 floatValue]/ cosf(a* M_PI / 180);
  float d = atan(b* M_PI / 180);
  float e = (b * 180) / M_PI;
  NSLog(@"%f",b);
  NSLog(@"%f",e);
  MySt4.text =[NSString stringWithFormat:@"%2.8g", b];
  RhoSt4.text =[NSString stringWithFormat:@"%2.8g", e];
}

Würde mich über eure Hilfe freuen.

Viele Grüße
Markus
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.573
Das Programm ist im Prinzip zu folgendem Einzeiler äquivalent:

printf("%f\n", 0.12 / cos(15.0 * M_PI / 180.0) * 180.0 / M_PI);

Da kommt 7.118035 heraus und der Arcustangens wird nirgendwo verwendet.
 

Markussm

Granny Smith
Registriert
20.12.14
Beiträge
14
Hallo Marcel
ich habe die Frage vielleicht falsch formuliert ich habe es am Anfang mit atan probiert, wie man es auch beim float d sieht.
Aber da habe ich auch ein falschen Wert bekommen.
Meine Frage ist wie kann ich das ganze mit atan bzw. auf "Normalen Taschenrechnern" tan^-1 lösen?

Gruß Markus
 

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.573
Was willst Du lösen? Du verrätst überhaupt nicht, was Du machen willst.

Die Funktion atan() funktioniert auf einem Computer genau wie auf einem Taschenrechner, der in der Betriebsart "Radiant" ist.
 

Markussm

Granny Smith
Registriert
20.12.14
Beiträge
14
Ich habe ein kleines Projekt mit Formelsammlung und nun will ich jeden Teil der Formel für die Gewindereibungszahl berechnen.

IMG_4541.JPG

Und da häng ich jetzt an dem Problem, das ich ϱ´ nicht richtig ausgerechnet bekomme.
Hier ist mal die Lösung die raus kommen soll.
FullSizeRender.jpg



Vielleicht kann mir jemand Helfen.

Gruß Markus
 

Markussm

Granny Smith
Registriert
20.12.14
Beiträge
14
Das liegt nicht an atan(), sondern daran, dass du schlicht und einfach was anderes rechnest, als was in der Formel für µ' steht.

Hallo Scotch
kannst du mir bitte schreiben was ich anderes rechne, als was in der Formel steht ( außer natürlich das Problem mit dem tan ) ?
Gegeben sind µ und β .
 

Scotch

Bittenfelder Apfel
Registriert
02.12.08
Beiträge
8.053
Nimm' dir ein Blatt Papier, schreib' deine a-e auf und setz' sie ineinander ein. Fängt schon damit an, dass du in RAD umrechnest, obwohl in deiner Formel mit DEG gerechnet wird (mathematisch egal, aber nicht für das numerische Ergebnis, wenn du die vergleichen willst) und die Formel für d wird dann völlig falsch, da b bereits im Bogenmass vorliegt. Wenn überhaupt musst du nach DEG zurückrechnen, aber dafür ist dann der Kehrwert anzusetzen.

Wie gesagt: Schreib' deine Variablen auf ein Blatt Papier und setz' sie ineinander ein.
 

martinv2

Doppelter Prinzenapfel
Registriert
14.04.12
Beiträge
437
Es könnte vielleicht auch helfen, wenn Du Dich für einen Gelitkommazahl-Typ entscheiden würdest; also entweder float, cosf() und atanf(), oder double, cos() und atan().
 
  • Like
Reaktionen: Scotch

Marcel Bresink

Hadelner Sommerprinz
Registriert
28.05.04
Beiträge
8.573
Was Du wirklich machen willst, ist wohl das hier:

Code:
NSNumberFormatter *formatter;
double mu, rho;
      
formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle: NSNumberFormatterDecimalStyle];
[formatter setLenient: YES];
mu = [[formatter numberFromString: entered1] doubleValue];
rho = [[formatter numberFromString: entered2] doubleValue];
[RhoSt4 setText: [NSString localizedStringWithFormat:
   @"%2.8g", atan(mu / cos(rho / 2.0 * M_PI / 180.0)) * 180.0 / M_PI]];