【求助】关于不同设备计算加速度所得结果不一致

描述:
在加速感应回调事件中获取手机三个方向的数值,计算其加速度,但是当我快速甩动手机时,不同移动设备计算出来的数据不一致。请问如何解决

Code:

//用户甩动手机 加速感应回调
void GameMainScene::didAccelerate(cocos2d::CCAcceleration *pAccelerationValue)
{
 //x,y,z轴的方向上的数据
    double x = pAccelerationValue->x;
    double y = pAccelerationValue->y;
    double z = pAccelerationValue->z;
 
 
 //计算加速度 , 业务逻辑中需要这个数据
    double a = sqrt(x*x+y*y+z*z);
 
 CCLOG("*************加速度: %f",a);
}

操作:
当我快速甩动手机(从代码可以看出,与方向无关), iphone 5 和 5s ipod 5 最大值在 10左右 , iphone 4 和 4s 和 ipod 4 最大值在 3 左右

问题:
如何解决这个问题?

补充:
进过测试发现,此值与操作系统无关,应该只与硬件设备有关,所以,是否可以通过判断具体设备类型进行数据的修正? 但是UIDevice中没有与硬件设备信息相关的API

现在想到2个解决方案:
1.通过获取设备的硬件信息(http://snipplr.com/view/36902/get-iphoneipadipod-touch-hardware-generation/), 根据不同的硬件信息进行加速度的修正,但是这样安卓方面可能很麻烦

2.使用程序维护一个数值,把用户每次获得的最大加速度保存,并且定义一个业务逻辑的最大加速度,通过每一次用户加速度与业务逻辑最大加速度的比较,进行“动态修正”