2016-03-03 2 views
5

привет. Я должен различать вычисления в градусах, и у меня есть следующий код, но я не возвращаю точных значений. Только одно правом является значением sin90 в степени = 1быстрые тригонометрические функции (cos, tan, arcsin, arcos, arctan)

//////***** 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) 

Как правильно операция возвращает точное значение для каждой операции в градусах для соза, загара и их функции ARC?

+0

'sin', а остальные принимают _angle в radians_ в качестве аргумента. Почему вы делаете этот материал 90 * 180/M_PI' во второй части? – courteouselk

+0

Вы могли бы написать свой ответ в куске кода для значения 90? потому что я действительно не понимаю, что вы имеете в виду .. :) извините, я новичок @ AntonBronnikov – kepi

ответ

10

Это больше проблема математике, чем Swift проблемы:

let sinus = sin(90.0 * M_PI/180) 
print("Sinus \(sinus)") 

let cosinus = cos(90 * M_PI/180) 
print("Cosinus \(cosinus)") 

let tangent = tan(90 * M_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/M_PI 
print("Arcsinus \(arcsinus)") 

печатает

Arcsinus 90.0 
+0

спасибо sooooo много !!!! – kepi

+0

Итак, мне не нужно что-то менять? Мой код прав, как есть? @ Sulthan? Любой способ вернуть и отобразить правильное значение на дисплее? – kepi

+0

@kepi Ваши результаты верны, чтобы отобразить их пользователям, сначала вы должны преобразовать их в строки. Я бы порекомендовал 'NSNumberFormatter', который будет обрабатывать округление и форматирование для вас. – Sulthan

Смежные вопросы