1

私は時間ベースの絵を作ろうとしています。例: 後で使用するポイントを定義します。

CGPoint testPoint = CGPointMake(2341.2345, 1350046324.1234);

次に、testPoint.y は 1350046336.00 になり、そこには配置されません。Xcode 4.5 を使用しています。何か案は?ありがとう。

4

3 に答える 3

2

CGPointで定義されていCGGeometry.hます:

struct CGPoint {
  CGFloat x;
  CGFloat y;
};

32 ビット システムCGFloatではtypedeftofloatです。iPhone/iPad は 32 ビットシステムです。最後の情報 - C のfloat数値 (Objective C は C の厳密なスーパーセットです):

C の浮動小数点数は、IEEE 754 エンコーディングを使用します。このエンコーディングのため、値が変更されないことを保証することはできません。

ここで議論全体を読むことができます: float vs. double precision

于 2012-10-12T11:47:04.683 に答える
1

CGPointはfloat(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が2倍だと思いました。

于 2012-10-12T11:54:52.057 に答える
0

あなたが書く場合:

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

それは良いですか?

于 2012-10-12T11:43:34.843 に答える