• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> 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
 
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.
 
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
 
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.
 
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
 
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 β .
 
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.
 
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
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]];