0

我目前正在从事一个我已经做了近一年的个人项目。我正在尝试将其移植到已成功的 Windows 环境。因为我正试图尽快向人们推出 Windows 版本,所以我决定继续在 Windows 中进行开发,同时尝试添加新功能并解决已经存在数月的错误。最近尝试添加严重依赖三角函数的功能时,我发现所有 3 个三角函数,奇怪的是,无论我传递的参数如何,都返回相同的值 (1072693887)。可以想象,这会导致系统中出现一些相当奇怪的错误。

我包含了 math.h,据我所知,没有其他文件包含此函数。(也许有一个调试器命令可以找到定义符号的位置?我找不到任何这样的东西,但也许我错过了一些东西。)我试过在其他地方询问并在谷歌上搜索,但无济于事......

有没有其他人听说过这个问题,或者知道如何解决它?

4

4 回答 4

5

编辑:这个答案不相关。看评论。


这可能是由于数值不稳定。

当您将如此大的值传递给sin()cos()或任何周期性三角函数时,您必须记住存在一个隐含的模 by 2*pi

如果您正在使用float,那么不确定性1072693887远不止2*pi. 因此,无论你得到什么结果都是垃圾。

我们需要查看一些代码才能准确地看到发生了什么。

编辑:这是一个插图:

sin(1072693886) =  0.6783204666
sin(1072693887) = -0.2517863119
sin(1072693888) = -0.9504019164

但是如果数据类型是float,那么 的不确定性1072693887+/- ~64......

于 2011-11-20T18:27:36.923 回答
2

1072693887是十六进制的3FF207FF,代表IEEE单精度浮点数的1.8908690。您确定您的问题不仅仅是一个表示问题,即您正在将结果转换或查看为整数吗?

于 2011-11-20T18:37:40.180 回答
0

数学库很好。

您意识到函数期望弧度作为输入吗?

例如:

double param = 90.0;
double rads = param * M_PI/180;
std::cout << std::fixed << "Angle : " << param << " sin : " << sin (rads) << " cos " << cos(rads);

输出 :

Angle : 90.000000 sin : 1.000000 cos 0.000000-0.304811
于 2011-11-20T18:51:05.143 回答
0

我所知道的是,GDB 告诉我它的结果是 1072693887,它发生在我的所有 3 个三角函数中(并且所有三个函数的弧版本都只返回 -1072693887),无论我传递什么参数。

可能是 GDB 问题。如果您只是手动将值打印到控制台会发生什么?

于 2011-11-20T20:55:37.850 回答