快速三角函数(cos、tan、arcsin、arcos、arctan)

问题描述 投票:0回答:2

我必须以度为单位区分计算,并且我有以下代码,但它不会返回准确的值。唯一正确的是 sin90 的度数 = 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 函数,返回以度为单位的精确值的正确操作是什么?

swift degrees trigonometry radians
2个回答
51
投票

这更像是一个数学问题,而不是 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 是一个非常非常小的值,任何合理的舍入都会认为它等于 0(正确)。事实上,您无法精确地得到零,这是由于计算中的舍入误差造成的。

未定义 90 度正切(sin/tan = 1/0,未定义除以零)。如果我们进行精确计算,你可能会得到无穷大。在这种情况下,我们将

1
除以
6e-17
,得到一个大数
1.6e16
。结果是正确的。

关于反函数,请注意一件事 - 它们的参数既不是度数也不是弧度。他们的结果以度/弧度为单位,例如:

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

打印

Arcsinus 90.0

14
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.