Objectif c
À partir du code source de la Fondation, dans 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
Copyright (c) 2000-2011 Apple Inc.
Cela consiste essentiellement à:
#if defined(__LP64__) && __LP64__
typedef double CGFloat;
#else
typedef float CGFloat;
#endif
Où __LP64__
indique si l'architecture actuelle * est 64 bits.
Notez que les systèmes 32 bits peuvent toujours utiliser le 64 bits double
, cela prend juste plus de temps processeur, donc CoreGraphics le fait à des fins d'optimisation et non de compatibilité. Si vous n'êtes pas préoccupé par les performances mais que vous êtes préoccupé par la précision, utilisez simplement double
.
Rapide
Dans Swift, CGFloat
est un struct
wrapper autour Float
des architectures 32 bits ou Double
64 bits (vous pouvez le détecter au moment de l'exécution ou de la compilation avec CGFloat.NativeType
)
À partir du code source CoreGraphics, dansCGFloat.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
* Plus précisément, long
s et pointeurs, d'où le LP
. Voir aussi: http://www.unix.org/version2/whatsnew/lp64_wp.html