2011-01-28 18 views

Respuesta

46

0x0.3p10 es un ejemplo de un literal de punto flotante hexadecimal, introducido en C99. El p separa el número base del exponente.

El bit 0x0.3 recibe el nombre de parte significativa (entero con fracción opcional) y el exponente es la potencia de dos por el que se escala.

Ese valor particular se calcula como 0.3 en hexadecimal, o 3 * 16-1 (3/16) multiplicado por 210 (1024), que da 3 * 1024/16 o 192.

El siguiente programa confirma:

#include <stdio.h> 
int main (void) { 
    double d = 0x0.3p10; 
    printf ("%.f\n", d); 
    return 0; 
} 

Sección 6.4.4.2 de C99 tiene todos los detalles:

Una constante flotante tiene una parte significand que puede ser seguida por una parte del exponente y un sufijo eso especifica su tipo. Los componentes de la parte significativa pueden incluir una secuencia de dígitos que representa la parte de números enteros, seguida de un punto (.), Seguido de una secuencia de dígitos que representa la parte de la fracción.

Los componentes de la parte exponente son e, E, p o P seguidos por un exponente que consiste en una secuencia de dígitos firmados opcionalmente. O bien la parte de número entero o la parte de fracción debe estar presente; para las constantes flotantes decimales, ya sea el período o la parte exponente debe estar presente.

La parte significativa se interpreta como un número racional (decimal o hexadecimal); la secuencia de dígitos en la parte exponente se interpreta como un entero decimal. Para las constantes flotantes decimales, el exponente indica la potencia de 10 por la cual se debe escalar la parte significativa. Para las constantes flotantes hexadecimales, el exponente indica la potencia de 2 por la cual se escalará la parte significativa.

Para constantes flotantes decimales, y también para constantes flotantes hexadecimales cuando FLT_RADIX no es una potencia de 2, el resultado es el valor representable más cercano o el valor representable mayor o menor inmediatamente adyacente al valor representable más cercano elegido en una manera definida por la implementación. Para constantes flotantes hexadecimales cuando FLT_RADIX es una potencia de 2, el resultado se redondea correctamente.

+0

Hola, Entonces, ¿qué valor decimal representa? ¿El 'p' representa alguna palabra en inglés? Gracias. –

+3

p para el poder tal vez? – tobyodavies

+1

Gracias por esta respuesta. ¿Es esto utilizable en C++? – Benoit