0

您能否解释一下使用“p”字符的双十六进制数字表示:

0x1.5p10 or 0x1P-1

先感谢您。

4

1 回答 1

4

这实际上并不特定于 Objective-C。它是从 C 继承的标准功能。它提供了一种无需舍入即可编写浮点数的方法。它在 C 标准中有明确记录,但这里有一个快速概述:

十六进制浮点字面量的形式为0x[significand]p[exponent],其中[significand]是十六进制数,并且[exponent]是基数为 10 的整数。该数字具有价值[significand] x 2^[exponent]

因此,例如:

0x1.5p10 = (1 + 5/16) x 2^10 = 1344.0
0x1p-1 = 1 x 2^-1 = 0.5

这些例子并不是特别有趣,因为它们都可以很容易地完全写成十进制浮点文字。随着指数变得更加极端,符号变得更加有趣。例如,考虑最大的有限双精度数:0x1.fffffffffffffp1023十六进制浮点数。用十进制精确写出来给我们:

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0

这相当麻烦。

于 2012-09-15T16:26:08.387 回答