32

您好,我必须以度为单位进行计算,我有以下代码,但我没有返回确切的值。唯一的一项权利是 sin90 的值,单位为 degree = 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)

对于 cos、tan 和它们的 ARC 函数,返回每个操作的精确值的正确操作是什么?

4

2 回答 2

42

这更像是一个数学问题而不是 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(正确)

Cosinus of 90 degrees is 0. The value 6e-17 is a very very small value, any sensible rounding would consider it equal to zero (correct). The fact that you can't get exactly zero is due to rounding errors in the calculation.

Tangent of 90 degrees is not defined (sin/tan = 1/0, division by zero is not defined). If we had precise calculations, you would probably get an infinity. In this case we have 1 divided by 6e-17, which becomes a large number 1.6e16. The result is correct.

Regarding the inverse functions, note one thing - their parameters are neither in degrees or radians. Their result is in degrees/radians, for example:

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

prints

Arcsinus 90.0
于 2016-03-03T12:14:37.460 回答
12

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
于 2018-06-18T11:04:59.087 回答