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, CGFloat
adalah struct
pembungkus baik Float
pada arsitektur 32-bit atau Double
pada 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, long
s dan pointer, maka LP
. Lihat juga: http://www.unix.org/version2/whatsnew/lp64_wp.html