作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
今天早上突然开始。
原文是这样的
float angle = (x+90)*(M_PI/180.0);
float xx = cosf(angle);
float yy = sinf(angle);
放置断点并悬停光标后。我得到 yy 的正确答案为 1。但 xx 不为零。
我尝试了 cosf(M_PI_2);
仍然没有运气..直到昨天它工作正常..我没有更改任何编译器设置等..
截至今天,我使用的是最新版本的 Xcode
最佳答案
首先要注意的是您正在使用float
。这些本质上是不准确的,并且对于大多数计算,您只能得到数学上正确答案的近似值。假设代码中的 x
的值为 0
,angle
将非常接近 π/2。 xx
因此将具有 cos(π/2) 的近似值。但是,由于近似和舍入问题,这不太可能完全为零。
如果您能够将代码更改为我们的 double
而不是 float
,您可能会获得更高的准确性,并且答案更接近于零。但是,如果您的代码此时生成一个恰好为零的值很重要,那么您将不得不重新考虑如何进行计算。
如果这不能解决您的特定问题,请向我们提供更多详细信息,我们将另行考虑。
关于cosf(M_PI_2) 不返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1605435/
我是一名优秀的程序员,十分优秀!