Objektif-C
Dari kode sumber Foundation, dalam 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
Hak Cipta (c) 2000-2011 Apple Inc.
Ini pada dasarnya dilakukan:
#if defined(__LP64__) && __LP64__
typedef double CGFloat;
#else
typedef float CGFloat;
#endif
Di mana __LP64__menunjukkan apakah arsitektur saat ini * adalah 64-bit.
Perhatikan bahwa sistem 32-bit masih dapat menggunakan 64-bit double, hanya membutuhkan lebih banyak waktu prosesor, jadi CoreGraphics melakukan ini untuk keperluan optimasi, bukan untuk kompatibilitas. Jika Anda tidak khawatir tentang kinerja tetapi khawatir tentang akurasi, cukup gunakan double.
Cepat
Dalam Swift, CGFloatadalah structpembungkus baik Floatpada arsitektur 32-bit atau Doublepada yang 64-bit (Anda dapat mendeteksi ini saat run-atau compile-time dengan CGFloat.NativeType)
Dari kode sumber CoreGraphics, diCGFloat.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
* Khususnya, longs dan pointer, maka LP. Lihat juga: http://www.unix.org/version2/whatsnew/lp64_wp.html