我试图做一个基于时间的绘图。例如:定义一个点供以后使用。当CGPointMake遇到大数字
CGPoint testPoint = CGPointMake(2341.2345, 1350046324.1234);
然后testPoint.y变成1350046336.00这不是我们放在那里。 我正在使用Xcode 4.5。 任何想法?谢谢。
我试图做一个基于时间的绘图。例如:定义一个点供以后使用。当CGPointMake遇到大数字
CGPoint testPoint = CGPointMake(2341.2345, 1350046324.1234);
然后testPoint.y变成1350046336.00这不是我们放在那里。 我正在使用Xcode 4.5。 任何想法?谢谢。
CGPoint采用浮动(32位)数据类型(至少在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
所以,你刚刚离开这里的单精度浮点数不够好号的范围。 这就是全部。
顺便说一句:在我偶然发现你的问题之前,我确实认为CGFloat是双倍的。
如果你写:
CGPoint testPoint = CGPointMake(2341.2345f, 1350046324.1234f);
是更好?
CGPoint
在CGGeometry.h
定义:
struct CGPoint {
CGFloat x;
CGFloat y;
};
在32位系统CGFloat
是typedef
到float
。 iPhone/iPad是一个32位系统。最后一条信息 - 目标C中的float
号码(C是C的严格超集):
C中的浮点数使用IEEE 754编码。 由于这种编码,你永远不能保证你的 你的价值没有变化。
你可以在这里阅读整个讨论:float vs. double precision
单精度,这就是问题所在!谢啦! – Globalhawk