我写了这个测试代码:

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

控制台的输出为:
1.63312e+16

问题是关于近似的,对不对?我是否犯了一些错误,还是 math.h的 tan 函数确实不处理这种情况(使我返回INFINITY)?我应该自己处理这些输入案例(例如:当我获得pi / 2输入值时,我返回一条错误消息)还是有更好(更优雅)的方法来获取正确的值?

谢谢

最佳答案

这是因为M_PI != real pi因为无法表示,所以从M_PI得到的是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

这正是您得到的。

关于objective-c - objective-c (math.h)中的tan(pi/2)未定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8458001/

10-10 07:22