Свифт тригонометрических функций (COS, загар, арксинуса, Аркос, равенства arctg)

Привет, я должен различать вычисления в градусах, и у меня есть следующий код, но я не возвращаю мне точные значения. Единственное право-это значение 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 и их функций дуги?

2 ответов


это больше математическая задача, чем быстрая задача:

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

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