Android 在C中,tan(30)给了我一个负值!为什么?
我观察到来自Android 在C中,tan(30)给了我一个负值!为什么?,android,c,math,android-ndk,cmath,Android,C,Math,Android Ndk,Cmath,我观察到来自cmath库的tan(float)函数返回负值 运行时,将显示以下代码: #include <cmath> .... // some calculation here gives me a value between 0.0 to 1.0. float tempSpeed = 0.5; float tanValue = tan(tempSpeed * 60); __android_log_print(ANDROID_
cmath
库的tan(float)
函数返回负值
运行时,将显示以下代码:
#include <cmath>
....
// some calculation here gives me a value between 0.0 to 1.0.
float tempSpeed = 0.5;
float tanValue = tan(tempSpeed * 60);
__android_log_print(ANDROID_LOG_INFO, "Log Me", "speed: %f", tanValue);
据我记忆所及
tan(0.5*60) = tan(30) = 1/squareroot(3);
有人能帮我解释一下为什么我看到负值吗?是否与某些浮点大小错误有关?还是我真的在做什么蠢事?在C中,
tan
和其他三角函数的参数是弧度,而不是度。可以将度转换为弧度:
这是角度的正切值(30弧度)。如果要寻找30度的正切值,必须先将角度转换为弧度。我猜在C中,tan函数需要输入弧度作为参数,而不是实际的度值 所以对于棕褐色30,你必须将你的30度转换成弧度。请记住,360度是2*Pi弧度,因此30度将是弧度的(1\6*Pi)分之一
所以tan(1\6*Pi)会给你正确的答案。其中Pi为3.142将参数乘以
Pi/180
以将角度转换为弧度。正如你所知,M_Pi
不是标准的一部分:太棒了,反应如此迅速。现在我可以回家睡觉了。:-)谢谢大家!!为什么不查找并阅读tan()
文档?是的,我应该。。我同意这是愚蠢的。但是,有时候当你深陷迷茫的时候。。[就像找出正确的方法将击球长度和速度映射到球的轨迹],最简单的事情不会发生在你的头上。:-)@高性能标记。。是的。。你说得对,我好像漏掉了那2个。。我现在已经改正了。。。谢谢
tan(0.5*60) = tan(30) = 1/squareroot(3);
tan( 30. * M_PI / 180. ) == 0.57735026918962576450914878050196