web-dev-qa-db-fra.com

swift fonctions trigonométriques (cos, tan, arcsin, arccos, arctan)

bonjour je dois différencier les calculs en degrés et j'ai le code suivant mais je ne me renvoie pas les valeurs exactes. Le seul droit est la valeur de sin90 en degré = 1

//////***** 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)

Quelle est la bonne opération pour renvoyer la valeur exacte de chaque opération en degré pour cos, tan et leurs fonctions ARC?

20
kepi

C'est plus un problème mathématique qu'un problème Swift:

let sinus = sin(90.0 * Double.pi / 180)
print("Sinus \(sinus)")

let cosinus = cos(90 * Double.pi / 180)
print("Cosinus \(cosinus)")

let tangent = tan(90 * Double.pi / 180)
print("Tangent \(tangent)")

impressions

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

Le sinus de 90 degrés est 1 (correct)

Le cosinus de 90 degrés est 0. La valeur 6e-17 est une valeur très très petite, tout arrondi raisonnable la considérerait comme nulle (correcte). Le fait que vous ne puissiez pas obtenir exactement zéro est dû à des erreurs d'arrondi dans le calcul.

La tangente de 90 degrés n'est pas définie (sin/tan = 1/0, la division par zéro n'est pas définie). Si nous avions des calculs précis, vous obtiendriez probablement un infini. Dans ce cas, nous avons 1 divisé par 6e-17, qui devient un grand nombre 1.6e16. Le résultat est correct.

En ce qui concerne les fonctions inverses, notez une chose - leurs paramètres ne sont ni en degrés ni en radians. Leur résultat est en degrés/radians, par exemple:

let arcsinus = asin(1.0) * 180 / Double.pi
print("Arcsinus \(arcsinus)")

impressions

Arcsinus 90.0
22
Sulthan

Swift 4 fonctionne avec une syntaxe modifiée:

let sinus = sin(90.0 * Double.pi / 180)
let cosinus = cos(90 * Double.pi / 180)
let tangent = tan(90 * Double.pi / 180)

let arcsinus = asin(1) * 180/ Double.pi
let arcosinus = acos(0) * 180/ Double.pi
let arctangent = atan(1) * 180/ Double.pi
5
Darius Miliauskas