Literal de punto flotante
Un literal de punto[1] flotante define una constante en tiempo de compilación cuyo valor se especifica en el archivo fuente.
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) |
1e10, 1e-5L.1., 1.e-2.3.14, .1f, 0.1e-1L.0x1ffp10, 0X0p-1.0x1.p0, 0xf.p-1.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 Findicafloat,l Lindicalong double.
- (sin sufijo) indica
|
Se pueden insertar comillas simples opcionales ( |
(desde C++14) |
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 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) |
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.
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
Véase también
| Literales definidos por el usuario(C++11) | Literales con sufijo definidos por el usuario |
Documentación de C para Constante de punto flotante
|