Espacios de nombres
Variantes
Acciones

Literal de punto flotante

De cppreference.com
< cpp‎ | language
 
 
 
 

Un literal de punto[1] flotante define una constante en tiempo de compilación cuyo valor se especifica en el archivo fuente.

Contenido

[editar] Sintaxis

secuencia-dígitos exponente-decimal sufijo(opcional) (1)
secuencia-dígitos . exponente-decimal(opcional) sufijo(opcional) (2)
secuencia-dígitos(opcional) . secuencia-dígitos exponente-decimal(opcional) sufijo(opcional) (3)
0x | 0X secuencia-dígitos-hexadecimales exponente-hexadecimal sufijo(opcional) (4) (desde C++17)
0x | 0X secuencia-dígitos-hexadecimales . exponente-hexadecima sufijo(opcional) (5) (desde C++17)
0x | 0X secuencia-dígitos-hexadecimales(opcional) . secuencia-dígitos-hexadecimales exponente-hexadecima sufijo(opcional) (6) (desde C++17)
1) secuencia-dígitos que representan un número entero sin separador decimal, es este caso al exponente no es opcional: 1e10, 1e-5L.
2) secuencia-dígitos que representan un número entero con separador decimal, en este caso el exponente es opcional: 1., 1.e-2.
3) secuencia-dígitos que representan un número fraccionario. El exponente es opcional: 3.14, .1f, 0.1e-1L.
4) secuencia-dígitos hexadecimales que representan un número entero sin separador de base. Para los literales de punto flotante hexadecimales el exponente nunca es opcional: 0x1ffp10, 0X0p-1.
5) secuencia-dígitos hexadecimales que representan un número entero con separador de base. Para los literales de punto flotante hexadecimales el exponente nunca es opcional: 0x1.p0, 0xf.p-1.
6) secuencia-dígitos hexadecimales que representan un número fraccionario con separador de base. Para los literales de punto flotante hexadecimales el exponente nunca es opcional: 0x0.123p-1, 0xa.bp10l.


El exponente-decimal tiene la forma

e | E signo-exponente(opcional) secuencia-dígitos

El exponente-hexadecimal tiene la forma

p | P signo-exponente(opcional) secuencia-dígitos (desde C++17)

El signo-exponente, si está, será + o -

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

  • (sin sufijo) indica double,
  • f F indica float,
  • l L indica long double.

Se pueden insertar comillas simples opcionales (') entre los dígitos como separador, se ignoran al compilar.

(desde C++14)

[editar] Explicación

Se usa la notación científica decimal, que quiere decir que el valor del literal de punto flotante es el número multiplicado por 10 elevado al exponente-decimal. Por ejemplo: el valor matemático de 123e4 es 123×104.

Si el literal de punto flotante empieza con la secuencia de caracteres 0x o 0X, el literal es un literal de punto flotante hexadecimal. En otro caso, es un literal de punto flotante decimal.

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

double d = 0x1.4p3; // fracción hexadecimal 1.4 (decimal 1.25)  por 2^3, es decir 10.0
(desde C++17)

[editar] Notas

Los literales de punto flotante hexadecimales no formaban parte de C++ hasta C++17, aunque las funciones de E/S pueden analizarlos e imprimirlos desde C++11: tanto los flujos de E/S de C++ cuando está habilitado std::hexfloat como los flujos de E/S de C: std::printf, std::scanf, etc. Véase std::strtof para la descripción del formato.

[editar] Ejemplo

#include <iostream>
int main()
{
  std::cout << 58.         << '\n'
            << 4e2         << '\n'
            << 123.456e-67 << '\n'
            << .1E4f       << '\n'
            << 0x10.1p0    << '\n'
            << 0x1e5       << '\n'; // literal de entero, no de punto flotante
}

Salida:

58
400
1.23456e-65
1000
16.0625
485

[editar] Véase también

Literales definidos por el usuario(C++11) Literales con sufijo definidos por el usuario[editar]
Documentación de C para Constante de punto flotante

[editar] Referencias

  1. Decimales: coma y punto son signos válidos