在运行以下语句时,它会在控制台中输出错误的值。因为我是初学者而陷入困境。
NSLog(@"tan(90)=%f",tan(90*M_PI/180.0);
输出显示为: tan(90)= 16331239353195370.000000
答案 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