目标C中的pi

Xco*_*der 32 iphone objective-c

当我尝试使用pi时,我的iPhone编程一直出错.我尝试着

    float pNumber = 100*cos(2 * pi * (days/23));
Run Code Online (Sandbox Code Playgroud)

但我得到的错误说:

_pi,引用自

_pi $ non_lazy_ptr

我在互联网上的某个地方看到使用M_PI并编译,但我不认为它给了我正确的计算.

当我尝试:

    float pNumber = 100*cos(2 * M_PI * (15746/23));
Run Code Online (Sandbox Code Playgroud)

我得到0

谢谢

Jon*_*ler 55

  • 整数除法可能需要被强制转换为浮点数(将其中一个数字转换为double - 或者使用符号23.0来表示您想要浮点除法).
  • 尝试打印M_PI并查看它的内容(printf("M_PI = %16.9g\n", M_PI);在C中).
  • 你有声明cos()吗?如果不是,它可以被解释为返回整数(#include <math.h>可能)的函数.

示例代码(在带有GCC 4.3.3的Solaris 10 SPARC上的C中测试):

#include <math.h>
#include <stdio.h>

int main(void)
{
    float pNumber = 100*cos(2 * M_PI * (15746/23));
    printf("M_PI = %16.9g\n", M_PI);
    printf("pNum = %16.9g\n", pNumber);
    pNumber = 100*cos(2 * M_PI * (15746/23.0));
    printf("pNum = %16.9g\n", pNumber);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

示例输出:

M_PI =       3.14159265
pNum =              100
pNum =      -77.5711288
Run Code Online (Sandbox Code Playgroud)

  • 这是学习一些调试技巧的好机会.将等式细分为更小的部分,看看每件作品的样子.2*M_PI*(15746/23)的结果是什么? (4认同)
  • 如果days不是float,将它转换为float并将其重新分配给相同的int变量是没有意义的 - 它只会被转换回int. (3认同)
  • Objective-C是C的完美(我认为)超集,所以你可以像在C中一样做. (2认同)