Objective-C中的MAXFLOAT
最大浮动被定义为: 数学 我有点难过,我以前从未注意到这一点。这到底是怎么说的?我本以为会发生这样的事情:Objective-C中的MAXFLOAT,objective-c,c,floating-point,Objective C,C,Floating Point,最大浮动被定义为: 数学 我有点难过,我以前从未注意到这一点。这到底是怎么说的?我本以为会发生这样的事情: #define MAXFLOAT 0xFFFFFFFF-1 这行得通吗?0x1.fffff EP+127是(大致) 1.999999999999998乘以2^127。这是一个十六进制的带指数的浮点数 0x=十六进制表示法 1=数字的整数部分 .fffff e=数字的小数部分 p+127=表示“乘以2到127次方”的科学符号 符合UNIX要求需要MAXFLOAT MAXFLO
#define MAXFLOAT 0xFFFFFFFF-1
这行得通吗?
0x1.fffff EP+127
是(大致)
1.999999999999998乘以2^127。这是一个十六进制的带指数的浮点数
=十六进制表示法0x
=数字的整数部分1
=数字的小数部分.fffff e
=表示“乘以2到127次方”的科学符号p+127
符合UNIX要求需要MAXFLOAT
MAXFLOAT
[XSI]最大非无限单精度浮点数的值
0x1.fffffff ep+127f
正是该值,表示为标准的C十六进制浮点文字
C标准要求在
中定义FLT_MAX
,并且它具有相同的值(“根据§5.2.4.2.2,最大可表示有限浮点数”)FLT_MAX
是更便于携带的选择,因为这是语言标准所要求的。相关:这是针对Objective-C的吗?它是MAX_FLOAT
还是MAXFLOAT
?C在
中有FLT_MAX
;由于Objective-C与C的向后兼容性非常强,我希望它能使用它。0xFFFFFFFF-1
是一个整数表达式,因此它不适用于MAX()FLOAT
——也没有正确的值。@KeithThompson:它不是Objective-C特有的;这是UNIX一致性所必需的。@StephenCanon:你说得对。它的拼写是MAXFLOAT
,POSIX说它已经过时了。在
中使用FLT\u MAX
。POSIX说MAXFLOAT
已经过时。除了p
和e
之外,还有更科学的符号语法吗?仅使用p
和e
——其他语言可能会有所不同,但大多数流行语言(Perl、Python、Java、任何从C派生的语言)至少使用e
语法。那么在本例中e
是数字的一部分,而不是p
,这意味着什么呢?是否只允许在+
之前使用文本?我猜这是因为它是十六进制的,所以不能使用E,你必须更高,p
文本只是A-F之外的东西?区别在于E
是十个指数的幂(“十乘以n次幂”),而p
是两个指数的幂(“乘以2到n次方”);从语法角度看,不能将十六进制数与十进制指数相加(反之亦然),而且通常也不会这样做。
#define MAXFLOAT 0xFFFFFFFF-1