Быстрые тригонометрические функции (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