El literal de coma flotante define una constante en tiempo de compilación cuyo valor se especifica en el archivo de origen.

Sintaxis

secuencia de dígitosexponentesufijo(Opcional) (1)
secuencia de dígitos.exponente(Opcional)sufijo(Opcional) (2)
secuencia de dígitos(Opcional).secuencia de dígitosexponente(Opcional)sufijo(Opcional) (3)
0x | 0Xsecuencia de dígitos hexadecimalesexponentesufijo(Opcional) (4) (desde C ++ 17)
0x | 0Xsecuencia de dígitos hexadecimales.exponentesufijo(Opcional) (5) (desde C ++ 17)
0x | 0Xsecuencia de dígitos hexadecimales(Opcional).secuencia de dígitos hexadecimalesexponentesufijo(Opcional) (6) (desde C ++ 17)

1)secuencia de dígitos representa un número entero sin un separador decimal, en este caso el exponente no es opcional: 1e10, 1e-5L2)secuencia de dígitos representando un número entero con un separador decimal, en este caso el exponente es opcional: 1., 1.e-23)secuencia de dígitos que representa un número fraccionario. El exponente es opcional: 3.14, .1f, 0.1e-1L4) Hexadecimal secuencia de dígitos que representa un número entero sin un separador de base. El exponente nunca es opcional para literales hexadecimales de punto flotante: 0x1ffp10, 0X0p-15) Hexadecimal secuencia de dígitos que representa un número entero con un separador de base. El exponente nunca es opcional para literales hexadecimales de punto flotante: 0x1.p0, 0xf.p-16) Hexadecimal secuencia de dígitos que representa un número fraccionario con un separador de base. El exponente nunca es opcional para literales hexadecimales de punto flotante: 0x0.123p-1, 0xa.bp10l

El exponente tiene la forma.

e | Esigno-exponente(Opcional)secuencia de dígitos (1)
p | Psigno-exponente(Opcional)secuencia de dígitos (2) (desde C ++ 17)

1) La sintaxis del exponente para un literal de coma flotante decimal2) La sintaxis del exponente para el literal de punto flotante hexadecimal

signo-exponente, si está presente, es + o -

sufijo, si está presente, es uno de f, F, l, o L. El sufijo determina el tipo de literal de punto flotante:

  • (sin sufijo) define double
  • f F define float
  • l L define long double
Comillas simples opcionales (') se pueden insertar entre los dígitos como separador, se ignoran al compilar. (desde C ++ 14)

Explicación

Se usa notación científica decimal, lo que significa que el valor del literal de coma flotante es el significado multiplicado por el número 10 elevado a la potencia de exponente. El significado matemático de 123e4 es 123 × 104.

Si el literal flotante comienza con la secuencia de caracteres 0x o 0X, el literal flotante es un literal flotante hexadecimal. De lo contrario, es un literal flotante decimal.

Para literal flotante hexadecimal, el significando se interpreta como un número racional hexadecimal, y el secuencia de dígitos del exponente se interpreta como la potencia entera de 2 a la que se debe escalar el significando.

double d =0x1.2p3;// hex fraction 1.2 (decimal 1.125) scaled by 2^3, that is 9.0
(desde C ++ 17)

Ejemplo

#includeintmain()
  std::cout <<58.<<'n'<<4e2<<'n'<<123.456e-67<<'n'<<.1E4f<<'n'<<0x10.1p0<<'n';

Producción:

584001.23456e-65100016.0625

Notas

Los literales hexadecimales de punto flotante no formaban parte de C ++ hasta C ++ 17, aunque pueden ser analizados e impresos por las funciones de E / S desde C ++ 11: ambos flujos de E / S de C ++ cuando std::hexfloat está habilitado y los flujos de CI / O: std::printf, std::scanf, etc. Ver std::strtof para la descripción del formato.

Ver también

literales definidos por el usuario literales con sufijo definido por el usuario (C ++ 11)