当CGPointMake遇到大号时

时间:2012-10-12 11:23:28

标签: iphone objective-c ios ipad

我正在尝试制作基于时间的绘图。例如:定义一个点供以后使用。

CGPoint testPoint = CGPointMake(2341.2345, 1350046324.1234);

然后testPoint.y变成1350046336.00,这不是我们放在那里。 我正在使用Xcode 4.5。 有任何想法吗?感谢。

3 个答案:

答案 0 :(得分:2)

CGPointCGGeometry.h中定义:

struct CGPoint {
  CGFloat x;
  CGFloat y;
};

在32位系统上CGFloattypedeffloat。 iPhone / iPad是一个32位系统。最后一条信息--C中的float数字(目标C是C的严格超集):

  

C中的浮点数使用IEEE 754编码。   由于这种编码,你永远不能保证你不会   你的价值会发生变化。

您可以在此处阅读整个讨论:float vs. double precision

答案 1 :(得分:1)

CGPoint使用float(32bit)数据类型(至少在iOS6上)。

来自标题:

CGPointMake(CGFloat x, CGFloat y) ...

typedef CGFLOAT_TYPE CGFloat;

# define CGFLOAT_TYPE float

所以这导致了我的测试代码:

CGPoint testPoint1 = CGPointMake(2341.2345, 1350046324.1234);
CGPoint testPoint2 = CGPointMake(2341.2345f, 1350046324.1234f);
double d = 1350046324.1234;
float f = 1350046324.1234;

NSLog(@"%f %f %f %f", testPoint1.y, testPoint2.y, d, f);

打印到日志:

1350046336.000000 1350046336.000000 1350046324.123400 1350046336.000000

所以你只剩下单精度浮点数足够好的数字范围。 多数民众赞成。

BTW。:在我偶然发现你的问题之前,我确实认为CGFloat是双倍的。

答案 2 :(得分:0)

如果你写:

CGPoint testPoint = CGPointMake(2341.2345f, 1350046324.1234f);

它更好吗?