3

我写了这个测试代码:

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

控制台的输出是:

1.63312e+16

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

谢谢

4

1 回答 1

7

这是因为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

这正是你得到的。

于 2011-12-10T16:56:54.947 回答