Быстрые тригонометрические функции (cos, tan, arcsin, arcos, arctan)

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

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
Другие вопросы по тегам