【问题标题】:MAXFLOAT in Objective-CObjective-C 中的 MAXFLOAT
【发布时间】:2012-01-15 05:57:56
【问题描述】:

最大浮动定义为:

math.h

#define    MAXFLOAT    0x1.fffffep+127f

我有点难过,我以前从未注意到这一点。这实际上是在说什么?我会期待这样的事情:

#define    MAXFLOAT    0xFFFFFFFF-1

这还能用吗?

【问题讨论】:

  • 这是特定于 Objective-C 的吗?是MAX_FLOAT 还是MAXFLOAT? C在<float.h>中有FLT_MAX;由于 Objective-C 与 C 的向后兼容性非常强,我希望它只使用它。
  • 0xFFFFFFFF-1 是一个整数表达式,因此它不适用于 MAX(_)FLOAT -- 也没有正确的值。
  • @KeithThompson:它不是特定于 Objective-C 的;它是 UNIX 一致性所必需的。
  • @StephenCanon:你是对的。它的拼写是MAXFLOAT,POSIX 说它已经过时了。在<float.h> 中使用FLT_MAX

标签: objective-c c floating-point


【解决方案1】:

0x1.fffffep+127 是(大致) 1.99999999999999999999998 次 2^127。它是一个浮点数,有一个指数,十六进制。

  • 0x = 十六进制表示法
  • 1 = 数字的整数部分
  • .fffffe = 数字的小数部分
  • p+127 = “乘以 2 的 127 次方”的科学记数法

【讨论】:

  • 除了pe还有更多的科学记数法语法吗?
  • The ISO standard for the C programming language 仅使用 pe - 其他语言可能会有所不同,但大多数流行语言(Perl、Python、Java、任何从 C 派生的语言)至少使用 @987654331 @ 语法。
  • 那么,在这种情况下,e 是数字的一部分,而不是 p?是否只允许在 + 之前使用文字?
  • 我猜是因为它是十六进制的,所以你不能使用 E,你必须更高,p 文字只是 A-F 之外的东西?
  • 区别在于e是10的幂指数(“乘以10的n次方”),而p是幂的-二指数(“乘以的n次方”);从语法上讲,您不能将十六进制数与十进制指数(反之亦然)放在一起,而且您通常也不想这样做。
【解决方案2】:

MAXFLOAT 是 UNIX 一致性所必需的:

最大浮点数

[XSI] 最大非无限单精度浮点数的值。

0x1.fffffep+127f 正是该值,表示为标准 C 十六进制浮点文字。

C 标准要求在 <float.h> 中定义 FLT_MAX,并且它具有相同的值(“最大可表示的有限浮点数”,根据 §5.2.4.2.2)。 FLT_MAX 是更便携的选择,因为它是语言标准所要求的。

【讨论】:

  • 而 POSIX 说 MAXFLOAT 已经过时了。
猜你喜欢
  • 2015-05-12
  • 2012-11-28
  • 2012-07-17
  • 2011-09-20
  • 2019-09-18
  • 2014-09-14
  • 2011-12-06
  • 2011-10-03
  • 2011-01-07
相关资源
最近更新 更多