Mục tiêu-C
Từ mã nguồn Foundation, trong CoreGraphics ' CGBase.h
:
/* Definition of `CGFLOAT_TYPE', `CGFLOAT_IS_DOUBLE', `CGFLOAT_MIN', and
`CGFLOAT_MAX'. */
#if defined(__LP64__) && __LP64__
# define CGFLOAT_TYPE double
# define CGFLOAT_IS_DOUBLE 1
# define CGFLOAT_MIN DBL_MIN
# define CGFLOAT_MAX DBL_MAX
#else
# define CGFLOAT_TYPE float
# define CGFLOAT_IS_DOUBLE 0
# define CGFLOAT_MIN FLT_MIN
# define CGFLOAT_MAX FLT_MAX
#endif
/* Definition of the `CGFloat' type and `CGFLOAT_DEFINED'. */
typedef CGFLOAT_TYPE CGFloat;
#define CGFLOAT_DEFINED 1
Bản quyền (c) 2000-2011 Apple Inc.
Điều này về cơ bản là làm:
#if defined(__LP64__) && __LP64__
typedef double CGFloat;
#else
typedef float CGFloat;
#endif
Trong đó __LP64__
cho biết kiến trúc hiện tại * là 64 bit.
Lưu ý rằng các hệ thống 32 bit vẫn có thể sử dụng 64 bit double
, nó chỉ mất nhiều thời gian xử lý hơn, vì vậy CoreGraphics thực hiện điều này cho mục đích tối ưu hóa, không phải để tương thích. Nếu bạn không quan tâm đến hiệu suất nhưng lo ngại về độ chính xác, chỉ cần sử dụng double
.
Nhanh
Trong Swift, CGFloat
là mộtstruct
trình bao bọc xung quanh Float
trên các kiến trúc 32 bit hoặc Double
trên các cấu trúc 64 bit (Bạn có thể phát hiện điều này trong thời gian chạy hoặc biên dịch với CGFloat.NativeType
)
Từ mã nguồn CoreGraphics, trongCGFloat.swift.gyb
:
public struct CGFloat {
#if arch(i386) || arch(arm)
/// The native type used to store the CGFloat, which is Float on
/// 32-bit architectures and Double on 64-bit architectures.
public typealias NativeType = Float
#elseif arch(x86_64) || arch(arm64)
/// The native type used to store the CGFloat, which is Float on
/// 32-bit architectures and Double on 64-bit architectures.
public typealias NativeType = Double
#endif
* Cụ thể, long
s và con trỏ, do đó LP
. Xem thêm: http://www.unix.org/version2/whatsnew/lp64_wp.html