web-dev-qa-db-ja.com

swift三角関数(cos、tan、arcsin、arccos、arctan)

こんにちは、度で計算を区別する必要があり、次のコードがありますが、正確な値を返しません。唯一の権利は、度= 1のsin90の値です

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

Cos、tan、およびそれらのARC関数の度単位のすべての操作の正確な値を返す正しい操作は何ですか?

20
kepi

これは、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)")

プリント

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

90度の洞は1(正しい)

90度の余弦は0です。値6e-17は非常に小さな値であり、賢明な丸めではゼロに等しいと見なされます(正しい)。正確にゼロを取得できないという事実は、計算の丸め誤差によるものです。

90度の正接は定義されていません(sin/tan = 1/0、ゼロによる除算は定義されていません)。正確な計算があれば、おそらく無限大になります。この場合、1 で割った 6e-17、これは大きな番号になります1.6e16。結果は正しいです。

逆関数に関しては、一つのことに注意してください-それらのパラメータは度でもラジアンでもありません。結果は度/ラジアンで、たとえば次のとおりです。

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

プリント

Arcsinus 90.0
22
Sulthan

Swift 4は修正された構文で動作します:

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