c – atan(x)给了我错误的价值观?

c – atan(x)给了我错误的价值观?,第1张

概述我在我的代码中得到了这个函数: -(void)printAngle{ int width = p2_t.x-cp1_t.x; int height = p2_t.y-cp1_t.y; if (width != 0) { CCLOG(@"%i * %i", width, height); CCLOG(@"%f", (float)atan(he 我在我的代码中得到了这个函数:

-(voID)printAngle{    int wIDth = p2_t.x-cp1_t.x;    int height = p2_t.y-cp1_t.y;    if (wIDth != 0) {        cclOG(@"%i * %i",wIDth,height);        cclOG(@"%f",(float)atan(height/wIDth)*(180/M_PI));    }}

下面是输出的片段:

2011-12-06 20:46:52.074 x[12392:c503] 24 * 132011-12-06 20:46:52.074 x[12392:c503] 0.0000002011-12-06 20:46:52.108 x[12392:c503] 25 * 152011-12-06 20:46:52.108 x[12392:c503] 0.000000

这意味着arctan(13/24)度数为0.这是不正确的.那我为什么得到0呢?这类型的东西我做错了吗?

它有一些正确的角度:

2011-12-06 20:51:11.956 x[12436:c503] 12 * 1292011-12-06 20:51:11.957 x[12436:c503] 84.2894042011-12-06 20:51:11.989 x[12436:c503] 10 * 1322011-12-06 20:51:11.990 x[12436:c503] 85.601292
解决方法 您正在使用整数数学并期望浮点结果.这不行.将宽度和高度更改为浮动,您应该获得预期的结果.

如果您不知道,在C中,使用整数进行除法会产生整数结果.所以评估13/24正在产生0而不是0.541666667.通过在执行除法之前将其中一个变量转换为(float),或者只使用float开始,您将得到您期望的浮点数.

总结

以上是内存溢出为你收集整理的c – atan(x)给了我错误价值观?全部内容,希望文章能够帮你解决c – atan(x)给了我错误的价值观?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1219474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存