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
    =数字的小数部分
  • p+127
    =表示“乘以2到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