Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 对于CGPoint类型中的点,精度不够_Ios_Cocos2d Iphone_Floating Point Precision_Cgpoint - Fatal编程技术网

Ios 对于CGPoint类型中的点,精度不够

Ios 对于CGPoint类型中的点,精度不够,ios,cocos2d-iphone,floating-point-precision,cgpoint,Ios,Cocos2d Iphone,Floating Point Precision,Cgpoint,我正在使用cocos2dv3开发基于地图的游戏 我有一张2^19点大小的地图。在那张地图上,我有一个物体,它应该在短距离内随时间移动。大约60-70分 CGPoint offset = [_trajectoryPath offsetForNextPosition]; CGFloat x = self.position.x + offset.x; CGFloat y = self.position.y + offset.y; self.position = CG

我正在使用cocos2dv3开发基于地图的游戏

我有一张2^19点大小的地图。在那张地图上,我有一个物体,它应该在短距离内随时间移动。大约60-70分

    CGPoint offset = [_trajectoryPath offsetForNextPosition];

    CGFloat x = self.position.x + offset.x;
    CGFloat y = self.position.y + offset.y;

    self.position = CGPointMake(x, y);
在这样的地图大小下,地图位置大约可以是{300000,40000}个点。 当我尝试添加小步进时,比如说{0.002f,0.004f},来设置对象位置的动画,我最终得到的仍然是相同的{300000,40000}点

我知道这是因为浮子的精度。由贴图大小归一化的值(介于0和1.0之间)也不起作用

是否有可能以某种方式提高iOS上浮点类型的精度?或者可能有人会提示解决此问题的可能方法


谢谢。

mightee.cactus,我记得我们在用c中的float将非常小的数字添加到非常大的数字时遇到了类似的问题


解决方案如下:我们将类型更改为加倍以保持准确性;在您的例子中,您可以使用double进行所有算术运算,并在使用CGPointMake之前将其转换为CGFloat。

CGFloat已经具有双精度,但这不是精度错误。。。你肯定在什么地方出了另一个错误。self.position是如何声明的?
CGFloat
在64位平台上仅为双精度。任何早于iPhone 5S的iOS设备都只运行32位应用程序,其中
CGFloat
仍然是单精度(24位有效位)。在考虑回答这个问题之前,我会先质疑你的意图。如果一张地图上的物体可以在几十万(如果不是几百万的话)的坐标点上,那绝对是极端的。我希望您做了大量的实际检查,比如写下数据结构的字节大小,地图上有多少字节,以及这些字节是否适合内存。假设你的地图平均每平方点存储1字节,那么在一张300000 x 300000大小的地图上,你的内存消耗将达到80+千兆字节(!)。仅供参考,Minecraft是一个巨大的世界,众所周知,它在世界的遥远边缘存在浮点不准确的问题。但到目前为止,尽管有一名玩家开始连续朝一个方向移动,但还没有人能到达那里。也许浮点不准确是他从未到达的原因……我可以在计算时将值转换为两倍,但毕竟我必须将其重新分配给浮点类型,因为它无法容纳如此大的值。