'p'文字を使用した2倍の16進数表現について説明してください。
0x1.5p10 or 0x1P-1
前もって感謝します。
これは実際にはObjective-Cに固有のものではありません。これはCから継承された標準機能です。丸めることなく浮動小数点数を書き込む方法を提供します。これはC標準で明確に文書化されていますが、ここに簡単な概要があります。
16進浮動小数点リテラルの形式0x[significand]p[exponent]
は、です。ここ[significand]
で、は16進数で、[exponent]
は10を底とする整数です。数値の値はです[significand] x 2^[exponent]
。
したがって、たとえば:
0x1.5p10 = (1 + 5/16) x 2^10 = 1344.0
0x1p-1 = 1 x 2^-1 = 0.5
これらの例は、どちらも10進浮動小数点リテラルとまったく同じように簡単に記述できるため、特に興味深いものではありません。指数が極端になるにつれて、表記はより興味深いものになります。たとえば、最大の有限倍精度数0x1.fffffffffffffp1023
(16進浮動小数点)について考えてみます。正確に10進数で書くと、次のようになります。
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0
これはかなり面倒です。