实际上又是阮长中。
到目前为止,非常感谢大家的回答。我非常感谢您的回答,这为我提供了继续调试的途径!目前,我以某种方式找到了不同步的原因,但还没有具体的解决方案。我希望向您提供我得到的信息,希望我能得到更多的见解。
1. 发现:
我有这个使用cos的功能。我这样打印日志:
void rotateZ(浮动角度)
{
if( angle )
{
const float sinTheta = sin( angle );
const float cosTheta = cos( angle );
// I logged here
myLog( "Vector3D::SelfRotateZ(%x) %x, %x", *(unsigned int*)&angle, *(unsigned int*)&cosTheta, *(unsigned int*)&sinTheta );
....
}
}
异步是这样发生的:
在 iPad4 上:Vector3D::SelfRotateZ(404800d2) bf7ff708, 3c8782bc 在 iPhone4 上:Vector3D::SelfRotateZ(404800d2) bf7ff709, 3c8782bc
2.重新测试:
故事并不止于此,因为:
- 我在游戏开始时尝试了这些代码行:
{ 无符号整数 zz = 0x404800d2;
float yy = 0;
memcpy( &yy, &zz, 4 );
const float temp1 = cos( yy );
printf( "%x\n", *(unsigned int*)&temp1;
}
我在同一个 iPhone4 上运行了上面的代码,你猜怎么着?我得到了这个:bf7ff708
我将该代码放入游戏的更新循环中,我得到的结果在每个循环中仍然是 bf7ff708。
更?值 0x404800d2 是游戏的初始化值,所以每次游戏开始时,上面的两条不同步行总是在那里。
3:提问:
所以,我决定忘记上面发生的事情,暂时用我在 dreamcode.net 上找到的简单 Taylor 实现替换 sin、cos 函数。不再发生不同步。
似乎 cos 函数在同一个 iPhone 4(OS 版本 5)上甚至都不是确定性的。
我的问题是:我们有没有解释为什么 cos 函数在同一部手机上为相同的输入返回不同的结果?这里我有输入 0x404800d2,以及两个不同的输出:bf7ff708 和 bf7ff709。但是,我无法通过简单的编码来重现结果 bf7ff709。
我想我需要操作系统的数学函数(浮点版本)的源代码才能清楚地理解这一点。我发现的上述问题是否足以作为错误报告?