• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> 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

Breuhahn
Registriert
28.05.04
Beiträge
8.585
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

Breuhahn
Registriert
28.05.04
Beiträge
8.585
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.059
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

Breuhahn
Registriert
28.05.04
Beiträge
8.585
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]];