tan (pi / 2) в target-c (math.h) не является неопределенным - PullRequest
3 голосов
/ 10 декабря 2011

Я написал этот тестовый код:

NSLog(@"%g", tan(M_PI / 2.0));

и вывод консоли:

1.63312e+16

Вопрос о приближении, верно? Я допустил некоторые ошибки или функция tan math.h действительно не обрабатывает сам этот случай (возвращая мне INFINITY)? я должен обработать эти случаи ввода самостоятельно (пример: когда я получаю значение ввода pi / 2, я возвращаю сообщение об ошибке) или есть лучший (более элегантный) способ получить правильное значение?

Спасибо

1 Ответ

8 голосов
/ 10 декабря 2011

Это потому, что M_PI != real pi, потому что оно не может быть представлено, поэтому то, что вы получаете от M_PI, является приближением к пи, а его тангенс - это то, что вы получаете.
Редактировать: следующее:

printf("cos(M_PI / 2) = %.30f\nsin(M_PI / 2) = %.30f\n",
       cos(M_PI / 2), sin(M_PI / 2));

напечатает

cos(M_PI / 2) = 0.000000000000000061232339957368
sin(M_PI / 2) = 1.000000000000000000000000000000

Что показывает, что cos(pi / 2) не равно нулю.
Выполнение деления даст

1.63312393531953E16

, что в точности так и получается.

...