2016-03-03 20 views
5

hallo ich muss Berechnungen in Grad unterscheiden und ich habe den folgenden Code, aber ich gebe mir nicht die genauen Werte zurück. Der einzige, der rechts ist der Wert von sin90 in Grad = 1schnelle trigonometrische Funktionen (cos, tan, arcsin, arcos, arctan)

//////***** DEGREES ******////// 
var sinus = sin(90.0 * M_PI/180) 
var cosinus = cos(90 * M_PI/180) 
var tangent = tan(90 * M_PI/180) 

var arcsinus = asin(90 * M_PI/180) 
var arcosinus = acos(90 * M_PI/180) 
var arctangent = atan(90 * M_PI/180) 

Was die richtige Operation ist es, den genauen Wert für jeden Betrieb in Grad für cos, tan und ihre ARC Funktionen zurückzukehren?

+0

'sin' und der Rest nehmen _angle in radians_ als Argument. Warum machst du dieses '90 * 180/M_PI'-Zeug in dem letzten Teil? – courteouselk

+0

könnten Sie Ihre Antwort in einem Code für den Wert von 90 schreiben? weil ich nicht wirklich verstehe, was du meinst .. :) sorry ich bin neu @AntonBronnikov – kepi

Antwort

10

Dies ist ein mathematisches Problem als ein Swift Problem:

let sinus = sin(90.0 * M_PI/180) 
print("Sinus \(sinus)") 

let cosinus = cos(90 * M_PI/180) 
print("Cosinus \(cosinus)") 

let tangent = tan(90 * M_PI/180) 
print("Tangent \(tangent)") 

druckt

Sinus 1.0 
Cosinus 6.12323399573677e-17 
Tangent 1.63312393531954e+16 

Sinus von 90 Grad 1 (richtig)

Cosinus von 90 Grad ist 0. Der Wert 6e-17 ist ein sehr sehr kleiner Wert, jede sinnvolle Rundung würde ihn gleich Null (richtig) machen. Die Tatsache, dass Sie nicht genau Null erhalten können, ist auf Rundungsfehler in der Berechnung zurückzuführen.

Tangens von 90 Grad ist nicht definiert (sin/tan = 1/0, Division durch Null ist nicht definiert). Wenn wir genaue Berechnungen hätten, würden Sie wahrscheinlich eine Unendlichkeit bekommen. In diesem Fall haben wir 1 geteilt durch 6e-17, was eine große Zahl 1.6e16 wird. Das Ergebnis ist korrekt.

In Bezug auf die umgekehrten Funktionen, beachten Sie eine Sache - ihre Parameter sind weder in Grad oder Radiant. Ihr Ergebnis ist in Grad/rad, zum Beispiel:

let arcsinus = asin(1.0) * 180/M_PI 
print("Arcsinus \(arcsinus)") 

druckt

Arcsinus 90.0 
+0

danke sooooo viel !!!! – kepi

+0

also, ich muss nichts ändern? Mein Code ist richtig wie er ist? @Sultan? Gibt es eine Möglichkeit, den richtigen Wert auf dem Display anzuzeigen und anzuzeigen? – kepi

+0

@kepi Ihre Ergebnisse sind korrekt, um sie den Benutzern anzuzeigen, müssen Sie sie zuerst in Zeichenfolgen konvertieren. Ich würde 'NSNumberFormatter' empfehlen, das Rundungen und Formatierungen für Sie übernimmt. – Sulthan