没有得到Tan(90)值在objective-c中未定义

时间:2017-05-19 12:54:02

标签: objective-c xcode

在运行以下语句时,它会在控制台中输出错误的值。因为我是初学者而陷入困境。

NSLog(@"tan(90)=%f",tan(90*M_PI/180.0);

输出显示为: tan(90)= 16331239353195370.000000

2 个答案:

答案 0 :(得分:2)

结果是正确的。 M_PI / 2.0是一个非常接近π/ 2的double,但不是精确π/ 2(π不能用double精确表示)。因此它的切线非常大,但不是无限的。

schmitdt9's link to the tan docs很有用,但重要的是这一点:

  

该函数的数学极点为π(1/2 + n);但是没有共同的浮点表示能够准确地表示π/ 2,因此没有极点错误发生的参数值。

“Pole”表示“函数无限的输入。”

对于你的问题“我应该如何在控制台中将tan(90)打印为未定义”,答案是你需要特殊情况。将您传递的任何内容归一化为0-360,并检查它是90还是270.如果是,请打印infinite,否则请拨打tan

答案 1 :(得分:0)

tan是C函数,请参阅此页http://en.cppreference.com/w/cpp/numeric/math/tan 特别是说:

  

如果发生域错误,则返回实现定义的值   (支持NaN)

所以我想数字16331239353195370.000000意味着在这种情况下无穷大/错误

修改

关于Infinity打印 有一个特殊的宏INFINITY,如果你这样做

NSLog(@"%f", INFINITY);

输出将是

inf